The Simple MQTT Device

簡単なMQTTデバイスで温湿度・圧力をPublishする

先に断っておきますが、この文書の目的は私のメモです。 ここで述べるMQTTデバイスは一度作ったら数か月、あるいはそれ以上連続稼働させる装置です。 数か月先になってメンテナンスの必要が生じたときに、何も迷うことがないように記録を 残すことが目的です。

デバイス概要

一定周期で温度・湿度・気圧をPublishするデバイスです。 ESP32-WROOM-32とBME680を使用。ソフトウェアはMicropythonで記述してあります。

ハードウェア

ハードウェアはこんな感じです。 SwitchScience製のESP32-WROOM-32開発基板と、おなじくSwitchScience製のBME680センサモジュールを搭載です。 あと部品箱の底に眠っていたおそらく10年物のLEDを3粒添えました。 土台は秋月電子通商の片面基板です。

ESP32

ここに諸元をまとめておく

BME680

Bosch製。気温・湿度・気圧・VOCを測定可能なMEMSセンサ。 SwitchScience製のモジュールに搭載されている。だいたい3000円位した。 中身一緒なので秋月電子通商のモジュールも(配線を合わせれば)使用可能。

I/F

LEDが3つ。スイッチはなし。

  • LED_ERR : エラー表示のLED。なにか失敗したときに光る
  • LED_STAT : 動作中表示。Publishするときに光る
  • LED_DEBUG : デバッグ用のLED。もう使わない

LEDの電流制限抵抗は470Ωです。たぶん。

配線表

GPIO No. 接続先
17 LED_ERR
18 LED_STAT
19 LED_DEBUG
25 SCL
26 SDA

回路図はないよ。電源はモジュールの3.3V電源同士をわすれずに繋いでね。

写真では見えませんが、SCL/SDAのプルアップ抵抗10kΩ×2本がESP-WROOM-32開発基板の 下に実装してあります。

ソフトウェア

このソフトウェアはMicropythonで記述してます。

ソフトウェアは誰もリセットボタンを押してくれない環境で使うことを想定しないといけないです。この手の開発は異常系を作りこんでこそ(十分作りこめたとは言ってないです…)。

ライブラリ「umqtt.simple」

micropython-libの一部。micropython/umqtt.simple/umqtt/simple.pyを使用しました。200行程のスクリプトでMQTTの実装ができてしまうなんて、いかにMQTTがシンプルなプロトコルであるかわかる。しゅごい。

ライブラリ「BME680-Micropython」

github

データシートとにらめっこせずに短期間で開発できたのはこのライブラリのおかげです。 BME680.pyをつかいました。

Tips? WiFiアクセスポイントの切断に備える

メインループの処理の中でWiFi(WLAN)の接続状態を評価しています。 接続が切れているとisconnectedがFalseを返すようになります。 WiFiアクセスポイントが勝手に止まる状況は移設の際に電源を抜かれるくらいしか 思いつきませんが、ともかく、それを検知したら自分自身をリセットするようにしています。 ただしすぐにリセットしても元の木阿弥なので1分待ってからです。 1分も待てばWiFiアクセスポイントは再起動が完了しているだろうという目論見です。 だめならまた再起動すればよいので。

wlan = network.WLAN(network.STA_IF)
# (ものすごい中略)
while True: # ずっと繰り返す処理
    if not wlan.isconnected():
        # AP切断
        led_err.on() # ERR_LEDを点灯させて...
        time.sleep(60) # 60sec...
        machine.reset() # リセット

ソースコード全文

こっち

ライセンスはNYSLまたはWTFPLのいずれか好きなほうを使ってください。ただし対象は上述のリンクから飛べるmain.pyに限ります。

採取できるデータ

別途MQTTサブスクライバが必要なんですが、サブスクライバで適切にログを採取できれば、 こんな感じのグラフを描くことができます。

お正月から暖房をつけずにやせ我慢するとある一室の温度ログ一週間分です。

動かし方

main.py, umqtt/simple.py, bme680.pyをampy等でESP32にputして動かしてください。 boot.pyはデフォルトのままで大丈夫です。


トップページ

(c)2023 ぺいるだすと