2019.09.24
[蓼科の工房から]micro:bit+Raspberry Piで隣の小屋の室温をスマートスピーカーで聞けるようにする
標高1,300メートルの森の中のカフェ『ペロンタ』で出しているパンやケーキは、山小屋の隣に建てたパン工房で焼いている。パン工房は、広さは4畳半程度、天井高も2メートル弱と狭い。そのため、外気温の影響を受けやすく、夏の日中は暑く、冬はひどく寒い。秋になると、室温は簡単に10℃以下になり、冬は氷点下だ。
もちろん、工房には温湿度計を設置してあるが、厳寒の冬は、なるべく外に出たくない。母屋の中から工房の室温を調べられると便利だ。ということで、工房の室温データを無線で飛ばして母屋からチェックできるようにしてみた。
左がセルフビルドのパン工房、右が母屋
まずは、工房の温度を測る方法を検討した。micro:bitには温度センサーが付いており、簡単に温度が調べられるが、得られるのはプロセッサーの温度で室温ではない。そこで、micro:bitに温度センサーを外付けすることにした。
micro:bitでGROVEの温湿度センサーを使う
使用したのは、micro:bitでGROVEモジュールが使えるようになる拡張ボード「micro:bit用GROVEシールド」と、GROVEの温湿度・気圧センサーだ。
micro:bitにGROVEシールドと温湿度・気圧センサーを接続
この組み合わせにしたのは、以前に「micro:bitでGROVE!」と興味本位で購入したものの、あまり活用していなかったから。というのは、このボードはGROVEモジュールの接続が簡単になるだけで、実際にモジュールが利用できるかどうかは、micro:bit側での工夫次第だからだ。
モジュールがアナログやデジタル出力なら簡単だが、I2Cでやり取りするようなものだと相当大変なことになる。超音波距離センサーやジェスチャー認識モジュールなどは、ボードの製造元がmicro:bitのMakeCodeエディター向けの拡張機能を用意しており、簡単に利用できるが、それら以外の面白そうなGROVEモジュールは、自分でコードを書き、うまく動けばラッキー、という印象だ。
GROVEの温湿度・気圧センサーもこの大変な部類になり、最初はどうしたものかと途方に暮れていた。そのうち、このモジュールに搭載されているセンサー「BME280」を使った、別のメーカーが出しているmicro:bitに直接接続できる拡張ボード「SparkFun weather:bit」を見つけた。これにはMakeCodeエディター用の拡張機能が用意されている。センサーとのやり取りはI2Cなので、もしや、と思いこの拡張機能を使ってみると、GROVEシールド+温湿度・気圧センサーの組み合わせにも使えることがわかった。最近は、micro:bit用の各種環境センターを搭載した拡張ボード「enviro:bit」があるので、これを使うと、簡単に室温が測れるだろう。
micro:bitの発信する温湿度データをRaspberry Piで受信する
母屋のRaspberry Piで温湿度データを受け取る
次に取り組んだのは、母屋のRaspberry Pi Zero Wと工房のmicro:bitとの無線通信。micro:bitにWi-Fi機能はないので、Bluetoothを使う。Raspberry Pi側は、慣れているNode-REDでプログラムすることにした。下調べで、Node-REDでBluetoothを扱うノードをいくつか見つけておいた。初めは正攻法と思われるUARTに挑戦したが、どうもうまく通信できず。micro:bitをビーコンにして定期的に室温・湿度・気圧を発信し、Raspberry Piで信号を受信することにした。Node-REDに追加したのは「node-red-contrib-beacon-scanner」。micro:bitでは、拡張機能の「bluetooth」を追加している。
ここまでで、Node-RED内で工房の室温・湿度・気圧が取り出せるようになった。とりあえず可視化するため、Dashboardでグラフを描いてみた。この状態ではローカルLAN内でしか室温が確認できないので、ついでに外出時に確認できるようにAdafruitが運営している高機能なMQTTブローカー()にデータを送ってみた。デフォルトでもなかなかカッコいい表示になるので、おススメだ。
Node-REDのDashboadでグラフ表示
MQTTブローカーで室温をグラフ表示
スマートスピーカーに工房の温度を聞きたい
目標は達成できたが、ちょっと欲が出てきた。母屋にはAmazonのスマートスピーカーがあるので、「Alexa、工房の温度は?」と聞いてみたい。Node-REDでは、「Node-RED Alexa Home Skill Bridge」というサービスが利用できる。Node-REDにnode-red-contrib-alexa-home-skillを追加し、Alexaには「Node-Red」スキルを追加、サービスで設定を作成しておく。すると、Alexaへの音声による命令をスキルがサービスに送り、サービスからNode-REDに命令が送られてくるのだ。あとは、Node-REDでお好み次第。Alexaに命令していろんなものがコントロールできるようになる。今回はAlexaに「〜の温度は?」と聞きたいので、サービスにサーモスタットを用意した。この場合、室温のデータをAlexaに戻すレスポンスをNode-REDで作成する必要がある。
いろいろ試行錯誤したが、Alexaに工房の温度を聞けるようになって大満足。ちょっと気になるのは、Alexaがたまに「工房」の聴き取りに失敗すること。スキルでデバイス名を漢字ではなく「こうぼう」にしたり、「こーぼー」にしたりして試しているところだ。
さらにその後、「〜の温度は?」という質問はAlexaが受け付けなくなり、「〜の室温は?」「〜の温度はどうなっている?」で答えが返ってくるようになった。急に言葉が通じなくなるのは戸惑うが、生き物のように勝手に成長していくのはスマートスピーカーの面白さでもある。