これはいい! Raspberry Pi Zero 2W はスマートホームのDIYに最適かも ESP32に飽きたら…
スマートホームしてますか?
筆者は、賃貸の大家なのですが、所有する賃貸物件のスマート化に余念がない大家ということで、テック大家さんと名乗っています。
特に、IoTのシステムを色々と自作していて、これまで、ESP32のような小型でBluetoothやWiFiが使えるハードウェアを使って色々とソフトウェアを書いています。
その昔は、フルスペックの(?) Raspberry Pi(ラズパイ)も触っていたのですが、ESP32のボードよりも厚ぼったくてダサいと感じます。ですので、最近はM5StickなどのESP32系のチップが入った小型のものを触っていました。
最近、ラズパイの小さいヤツが気になり、手を出してみました。Raspberry Pi Zero 2Wと言うモデルです。これがなかなか良いので、本日、これをテーマにしてみます。
宅内スマートホーム専用サーバを立てたい
さて、筆者は小さなボードでBluetooth Low Energy(BLE)とWiFiを両方使った宅内の専用サーバーを立ていたいと考えています。
例えば、家庭内にスマートホームを実現するための機器が複数あるとして、それらを連携して操作するようなアプリケーションを作りたい。つまり、筆者がこのブログ「テック大家さん」で推し活しているSwitchBotのようなBLE対応機器やHue電球などを連携させて動作するようなシステムです。そのUI(ユーザーインターフェース)としては、Webアプリにしたいのです。
これをやるのに、いちいちAWSやFirebaseのようなクラウドのサーバーを使う必要はありません。家の中に小さなHTTPサーバー(Webサーバー)があって、そこにアプリとAPI機能などを全部押し込んでやるだけでいいのです。
だからといって、フルスペックのPCを買ってきて、Linuxを入れるなどといった大げさなことはしたくありません。それだと待機電力ももったいないですし、物理的にも邪魔です。
最近は「ミニPC」と呼ばれるジャンルの小型のデスクトップPCが流行っています。だとしても、邪魔です。フルスペックのデスクトップPCである必要は全くありません。
そこで、ESP32のような組み込みのボードを考えるわけです。たとえば、ESP32をベースにした、M5Stickのような商品ですね。
何しろ、小さくて低消費電力で、自分が必要な機能だけが動作するように作れる。そして、WiFiもBluetoothもまとめて搭載されている。これは便利じゃないか、と。
専用サーバーを立てる課題
ところが、ESP32はちょっと小さすぎました。いろいろと難しい課題も出てきます。
第一に、ESP32でプログラミングすると基本C++で、ArduinoやPlatformIOなどのプラットフォームでプログラミングすることになります。これがいちいち面倒です。
筆者はその昔はC++でWindowsのアプリを開発した経験があるのでC++でプログラミングするのはどうってことはないのです。そんな筆者でも、昨今のスクリプト系のプログラミング言語で開発を行っていると、C++は何かと面倒でお手軽感がないのです。PlatformIOなどは、昔の組み込み開発環境から比べると、非常に便利なのはわかっています。にしても、高齢の(?!)筆者にとっては少々腰が重くなってしまいます。
スクリプト系言語と言う意味では、Webアプリはブラウザで動作する部分はJavaSriptやTypescriptの力を借りられます。でも、結局サーバー機能、つまりAPI実装(Webアプリのサーバー機能)は結局、C++で書くことになってしまいます。
また、Webアプリを作ろうと思ってもメモリ制約も大きく、ちょっとしたものを作ろうとするとサイズが大きすぎて入りません。WiFiとBluetoothの同時動作、例えば、WiFi経由でHTTPサーバーにアクセスして、内部でBLEのコマンドを送出するような、システムを作るのが困難になってきます。
Rasbperry Pi Zero 2W のメリット
そこで目に留まったのが、Raspberry Pi Zero 2Wです。物理的に小さくて、WiFiとBluetoothも搭載されている。これは便利なんじゃないか、と。
筆者の宅内スマートホーム専用サーバーを作るうえでのメリットを上げてみましょう。
小さいのにLinuxが動く
Linuxが動作します。
筆者の場合、モニターをつないでデスクトップ画面を出す必要はありません。いわゆる、ヘッドレスでの動作を考えているわけです。この場合、WiFi経由で作業PCからSSHでログインして使えます。Linux OSのシェルが使えるので、システムの状況などもCLIで簡単にわかるわけです。
起動するプログラムも自由に選択できます。カスタマイズは自由にできるので、Linuxのサービスで不要なものは自分で外していけるというのもありがたいです。
小さいのにNodeJSが動く
なにより、NodeJSが動くので、プログラムをJavaScript/TypeScriptで作成できます。これは筆者のようにJavaScript贔屓な開発者にとっては、かなりありがたい。
おかげで、ReactやSvelteのような昨今流行りのフレームワークを使ってプログラムが作れます。
これらのフレームワークは、以前はSPA(Single Page Application)を作るためのフレームワークというイメージでした。つまり、ブラウザで動作するコードだけを書くためのものでした。ところが、昨今は、これらのフレームワークがサーバー側のコードもJavaScript/TypeScriptで記述できるように進化してきています。
サーバーサイドのコードはNodeJSが実行。NodeJSがHTTPサーバー機能も含めて面倒を見てくれるのです。
小さいのにBluetoothとWiFiが使える
BLEもちゃんと動作します。JavaScriptのようなスクリプト言語でも、nobleのようなシステムAPIのブリッジとなるパッケージを使えばシステムにアクセスできます。
すると、筆者にとっては、HTTPリクエストをNodeJSで受けてそのまま、BLEでにリクエストにつなぐようなシステムをすべてJavaScript/TypeScriptで書けるということになります。
これは非常に便利です。
具体的なシステム案(使い道)
具体的なシステムとしては、以下のようなものを考えています。
SwitchBotスマートロックという商品はご存知でしょうか。このブログでもSwitchBotの推し活を展開しているのですが、世のスマートロックの中でも、SwitchBotは外部インターフェースが公開されているという特徴があります。SwitchBotハブ/ハブ2と連携して、SwitchBotクラウド上のWeb API経由で施錠・解錠ができるのです。
またSwitchBotスマートロック単体では、BLEで施錠・解錠もできます。BLEならネット経由することなく、宅内/建物内に閉じて制御できるわけです。
そこで、建物内部のWiFiにRaspberry Pi Zero 2Wをつなぎ、Webアプリサーバーにします。このサーバーはBLEも使えるので、Webアプリ上のボタンUIをクリックとスマートロックを解錠する、みたいなシステムが組めるのです。SwitchBotハブを買わず、代わりに宅内にラズパイを設置し、宅内だけでWeb API経由で機器制御するというイメージ(下図参照)。
より詳細な内容は、今後別記事にしていきます。どうぞお楽しみに!
筆者おすすめのSwitchBot製品とWeb APIの解説については、以下の記事も併せてご覧ください。
また、スマートロックのWeb API経由の制御に関しては、以下に詳しく書いておりますので、ご覧ください。
ディスカッション
コメント一覧
まだ、コメントがありません