ESP32-S3 を使って自作しているリモート I/O デバイス「ESP32IO」の通信方式を、HTTP から MQTT に全面刷新しました。
これにより、Node-RED・Home Assistant・Python など複数のクライアントから、イベント駆動で I/O を扱えるようになりました。
ESP32IO は、ESP32-S3 を USB や Wi-Fi 経由で制御できる汎用リモート I/O ファームウェアです。
Python・Node-RED・Home Assistant などから デジタル I/O・アナログ入力・PWM・I2C センサ を簡単に扱えます。
ESP32IO MQTT 版の全体構成(イメージ)

MQTT Broker を中心に、複数のクライアントと複数の ESP32IO を同時に扱える構成です。
対象読者
- ESP32 を使って設備監視・I/O制御をしたい人
- Node-RED や Home Assistant と連携したい人
- 複数台の ESP32 を同時に扱いたい人
- HTTP 制御の限界を感じている人
なぜ MQTT にしたのか
従来の HTTP 版には、以下の課題がありました。
- ポーリング方式のため、状態変化を即座に取得できない
- 複数デバイスの同時制御が難しい
- 通信量が増えるとレスポンスが不安定
- イベント通知が弱い
MQTT にすることで、これらが解消されます。
MQTT のメリット
- イベント駆動で状態変化を即座に受け取れる
- 通信オーバーヘッドが小さく効率的
- 複数デバイスとの通信を管理しやすい
- HTTP のポーリングを繰り返さず効率的に通信できる
- Node-RED や Home Assistant と自然に連携
ESP32IO は「現場の I/O をネットワーク越しに扱う」ことを目的として開発しています。
MQTT は複数のクライアントとデバイスを疎結合で接続できるため、ESP32IO の思想と非常に相性が良いと判断しました。
MQTT 版でできること(ユースケース)
機能一覧ではなく、利用イメージ中心で紹介します。
● Node-RED で設備監視ダッシュボード
MQTT のイベント通知により、
センサ値・デジタル入力の変化を即座に可視化できます。
● Python から複数台の I/O を同時制御
Publish/Subscribe により、
複数デバイスを一括制御したり、並列処理が簡単になります。
● Home Assistant と連携したスマートホーム
MQTT Discovery により、
ESP32IO を Home Assistant のデバイスとして自動登録できます。
● Raspberry Pi を MQTT Broker にしたローカル監視システム
インターネット不要で、
工場・研究室・自宅などのローカル環境で安定運用できます。
● Excel やデータベースへのイベントロギング
MQTT クライアントを使えば、
センサ値をそのままデータベースや Excel に保存できます。
公開情報
ESP32IO MQTT版はオープンソースとして公開しています。
Python APIはPyPIからインストールできます。
pip install esp32io-mqtt
リポジトリ構成を整理しました
MQTT 版の公開に合わせて、プロジェクト構成を以下のように整理しました。
Firmware(ESP32側)
- esp32io-firmware(HTTP版 → 今後はメンテナンスのみ)
- esp32io-mqtt-firmware(MQTT版 → 継続開発)
Python API(PC/Raspberry Pi側)
- esp32io-api(HTTP版 → 今後はメンテナンスのみ)
- esp32io-mqtt-api(MQTT版 → 継続開発)
Python API(MQTT版)の特徴
MQTT の Publish / Subscribe や Topic 管理を意識する必要はありません。
HTTP 版と同じ感覚で I/O を操作できるように設計しています。
from esp32io_mqtt import ESP32IOMQTT
io = ESP32IOMQTT("device01")
io.digital_write(1, True)
state = io.digital_read(0)
temperature = io.i2c["bme280"].temperature
内部で MQTT 通信を処理するため、「MQTT の複雑さを隠蔽した I/O ライブラリ」として使えます。
今後の予定(MQTT版)
- MQTT 版のサンプルコード追加
- GitHub Pages に公式ドキュメント整備
- Node-RED 向けサンプルフローの公開
- Home Assistant 向けセットアップガイドの公開
※以前の HTTP 版に搭載していた Serial 通信機能は、高速通信向けの新しいラインとして、今後あらためて開発・公開する予定です。
おわりに
ESP32IO を MQTT ベースへ刷新したことで、HTTP のポーリング中心だった構成から、イベント駆動で複数デバイスを扱いやすい構成へ進化しました。
まだ発展途上のプロジェクトですが、実際に使っていただいた方からのフィードバックをもとに、より使いやすいリモート I/O プラットフォームへ育てていきたいと考えています。
不具合報告や改善案、「こんな機能が欲しい」といったご意見があれば、Qiitaへのコメントや、GitHub の Issues および Discussions でお気軽にお知らせください。
実際の利用シーンでのフィードバックは、今後の開発にとても役立ちます。