AtmosBot2.0Piのシステム変更(準備編)
はじめに
先日、Raspberry Pico Wに変更してAtmosBot2.0Piへ移行したことをnoteにした。
最後にAtmosBot2.0PiとRaspberry Piとの通信をHTTPからMQTTヘプロトコルを変更したいと書いていた。
ここ最近週末に時間が十分取れなかったり、やる気にならなかったりしていたのだが、相変わらず十分な時間はないが少しやる気がでてきたのでまずは準備に取りかかることにする。
HTTPからMQTTへの変更仕様
まずはHTTPを使った現在のシステム構成を示す。
直接AmbientやThingSpeakなどのクラウドへ送信するのでなく、一旦Raspberry Pi上のHTTPサーバーを経由してクラウドに送信している。また、データベース(SQLite)へデータを書き込んでいる。
これを下記のようにMQTTにプロトコルを変更する。
Raspberry Pi上のMQTTはMosquittoを使う。AtmosBot2.0PiはこれまでのHTTP POSTのデータと同様にクエリー文字列をPublishすることにする。
datetime=2023-10-07 17:00:01&temp=19.31&hum=48.84&press=1019.23&brightness=95&vol=2.60
3つのSubscriberは図にあるようにそれぞれ下記の処理を担う。
Ambientへのデータ送信
ThingSpeakへのデータ送信
データベース(SQLite)への書き込み
これまではHTTPでPOSTしてその延長でクラウドへの送信など処理が終わってから200OKを返す同期処理になっていた。
MQTTではクラウドへの送信、データベースへの書き込みは分散処理で行われるので、AtmosBot2.0PiはBrokerに送信するだけになる。従って、AtmosBot2.0PiはこれまでよりWi-Fiへの接続時間の短縮が見込まれ、若干消費電力は抑えられる…かもしれない。
実装
上記のような設計に従って実装していく。
AtmosBot2.0Pi
AtmosBot2.0Piは引き続きMicroPythonを使う。MQTTはumqtt.simpleを使って実装する。
送信するデータの仕様は変わらないので、HTTPをMQTTに置き換えてPublishするだけ。
Raspberry Pi上のSubscriber
SubscriberはMosquittoのクライアントライブラリーを使って実装する。Ambientへの送信、ThingSpeakへの送信、SQLiteへの書き込みと3つのPythonコードを書く。こちらもこれまでのコードを流用できる。
これらをsystemdで自動起動できるように設定した。設定の際には
Brokerより後に起動するよう設定する必要がある。
テストしてしばらく様子見
準備ができたので軽くテストを実施。少しトラブルがあったが、問題なく処理できることが確認できた。しばらく屋内で安定して動作できるかシステムテストを行うことにする。
これまでと比較して同等かそれ以上であればHTTPからMQTTに変更することにする(何が同等?)。AtmosBot2.0PiからAtmosBot2.1Piにバージョンアップってことになるかな。