最近SwitchBot が安く買えることが多いので、いつのまにか3つに増えていました。照明のスイッチにつけているので、人感センサーをつけて、5分動きがなかったら消灯、のような使い方が代表的かと思います。3つのうち1つはHueモーションセンサーからAlexa経由で、もう1つはモーションセンサー をつけたEcho FlexからAlexa経由で操作させ、人感センサーと連動させています。3つ目もモーションセンサーをつけたかったのですが、ちょうどM5Atom が届いたので、これとPIRセンサユニット を接続して、BLE経由でSwitchBotを操作することで、モーションセンサーと照明スイッチを連動させてみました。

接続


M5AtomとPIRユニットを接続するだけです。写真ではATOM Matrixを使っていますが、ATOM Lite を使っても、そのままのソースコードで動作しています。

SwitchBot


仮止め状態なのできたないですが、ATOM LiteとPIRセンサーを電源につないで、SwitchBot(写真上の黒いタイプ) の近くに設置します。SwitchBotには1台ごとにBluetooth MAC アドレスがふられており、スマートフォンのSwitchBotアプリから確認できるので、あらかじめ控えておきます。

スケッチ

M5StackからBLEを使ってSwitchBotを制御した記事Fusic Tech Blogさんで公開されており、Arduinoで書かれた制御プログラムのソースコードも掲載されていたので、参考にさせていただき、制御用スケッチ を作成しました。GitHub Gistに置いています。
ソースコード7行目で、制御対象のSwitchBotのBluetooth MACアドレスをSWITCHBOT_MACとしてハードコーディングしているので、ここにはあらかじめ控えておいたMACアドレスを入れてください。複数のSwitchBotがある場合、ここできちんと指定しないと、遠いもののAdvertising を拾ってしまうことがあるようで、うまく動作しませんでした。
SwitchBotを押すまでのモーション未検出時間は121行目 で指定しています。ループごとにdelay(500);を挟んでおり、その繰り返し回数だけで測っているので、正確ではないです。
SwitchBotへの接続エラーやコマンド送信エラーがあると、ATOMのLEDは赤く光ります。モーションを検出しているとグリーンです。モーションが検出されていないが、未検出時間まで達していない場合は紫にしています。SwitchBotを押すことに成功するとLEDは消灯します。ATOMにはプッシュボタンもありますから、一度SwitchBotへの接続が成功している場合、プッシュボタンを押すとすぐにSwitchBotにコマンドを送ります。

設置

いつまでも養生テープで止めておくわけにもいかないので、M5Atomのレゴマウンタを作ってみたで公開されているSTLファイルから、M5Atomが収納できるケースを3Dプリントして、Nimuno Loopsを使って壁に取り付けました。

感想

Arduinoから使うESP32のBLEスタックは重いという評判があったので、ATOMでちゃんと動くかどうか不安でしたが、一応問題なく動いているようです。シリアルモニタも併用できます。複数のSwitchBotはそれなりに離れているので、最初はSwitchBotのBluetooth MACアドレスを確認せずに、service UUIDが合致していれば接続としていましたが、どうも不安定でした。ちゃんとMACアドレスを確認して接続対象とするようにしたところ一気に改善しました。ATOMはバッテリーが内蔵されていないので、常時つけておきたいこういう用途にはちょうどいいですね。できれば3Dプリンターでちゃんとしたケースを作りたいと思います。