ESP32のMicroPythonでMQTTを使う方法(基礎)【初心者向け完全解説】
この記事では、ESP32とMicroPythonを使ってMQTT ブローカーと接続してメッセージのやり取りをする方法を解説します。
結論
ESP32 で MQTT を使うと、センサー情報やボタンの状態を無線で送受信できます。
MicroPython では、umqtt.simple などのライブラリを使えば簡単に実装可能です。
この記事の手順通りに進めれば、初心者でも MQTT ブローカーと ESP32 の接続、パブリッシュ・サブスクライブまで試せます。
この記事で学べること
- ESP32 が MQTT ブローカーに接続できる
- センサーやボタンの状態を MQTT で送信できる
- 他のデバイスから MQTT メッセージを受信できる
- よくある失敗と対処法が分かる
MQTT とは?
MQTT(Message Queuing Telemetry Transport)は、軽量で高速な通信プロトコルです。
- IoT デバイス向けに設計
- TCP/IP 上で動作
- パブリッシュ / サブスクライブ方式で通信
パブリッシュ / サブスクライブのイメージ
- パブリッシャー:情報を送信
- サブスクライバー:情報を受信
- ブローカー:情報の仲介役(Mosquitto など)
本記事では、無料で使えるHiveMQを利用します
用意するもの
ハードウェア
- ESP32(M5StampS3など)
- 無線LAN環境
ソフトウェア
- MicroPython 導入済み ESP32
- MQTT ブローカー(例:無料の Eclipse Mosquitto、Cloud MQTT など)
- umqtt.simple ライブラリ
ここからダウンロードできます
MQTT接続の基本コード
from simple import MQTTClient
import network
import time
# WiFi接続
ssid = 'SSID'
password = 'PASSWORD'
# MQTT Broker
server = "broker.hivemq.com"
# TOPIC
TOPIC = b"test/topic/esp32"
client_id = binascii.hexlify(machine.unique_id())
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
while not wlan.isconnected():
time.sleep(0.5)
# MQTT接続
client = MQTTClient(client_id, server)
client.connect()
# メッセージ送信
client.publish(TOPIC, b"Hello MQTT")
# メッセージ受信
def sub_cb(topic, msg):
print((topic, msg))
print(topic.decode(), msg.decode()) # 文字列として使いたい場合
client.set_callback(sub_cb)
client.subscribe(TOPIC)
print("Connected to %s, subscribed to %s topic" % (server, TOPIC))
try:
while True:
client.wait_msg()
finally:
client.disconnect()
コード解説
- WiFi 接続:ESP32 をネットワークに接続
- MQTTClient:ブローカーとの接続クライアント
publish():メッセージ送信subscribe():トピック購読- wait
_msg():新着メッセージ受信 set_callback():メッセージ受信時に呼ばれる関数
MQTTでは通信データをバイト列(bytes)として扱うため、b"..." の形式で指定する必要があります。
文字列として使いたい場合は、decode()を使います。
print(topic.decode(), msg.decode())
【参考】文字列(str)とバイト列(bytes)の違い
|
種類 3664_b32eb4-02> |
例 3664_21065b-b7> |
説明 3664_4d452e-bd> |
|
文字列(str) 3664_ad9d90-1e> |
“test/topic/esp32” 3664_7ac7b2-1a> |
人間が読む文字 3664_fe83b0-8c> |
|
バイト列(bytes) 3664_8bad5d-fd> |
b”test/topic/esp32″ 3664_5cb32e-42> |
通信・機械向けのデータ 3664_72f947-ff> |
よくある失敗と対処法
接続できない
- WiFi SSID / パスワードの間違い
- ブローカーが停止している
- ファイアウォールで TCP 1883 がブロックされている
メッセージが届かない
- トピック名のミス
- QoS 設定の違い
- subscribe のタイミングミス
応用例
- センサー値を MQTT で送信
- 複数デバイスでデータ共有
- スマホアプリやクラウドと連携
まとめ
- MQTT は軽量で IoT に最適
- MicroPython でも簡単に接続・送受信可能
- WiFi 接続やブローカー設定に注意
この手順で、ESP32 を使った IoT 通信がすぐに試せます。
