0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

自作の ESP32-S3 ベース IoT デバイス「ESP32IO」を MQTT 対応へアップデート

0
Last updated at Posted at 2026-07-17

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 版の全体構成(イメージ)

image.png
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 でお気軽にお知らせください。

実際の利用シーンでのフィードバックは、今後の開発にとても役立ちます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?