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)の違い

種類

説明

文字列(str)

“test/topic/esp32”

人間が読む文字

バイト列(bytes)

b”test/topic/esp32″

通信・機械向けのデータ

よくある失敗と対処法

接続できない

  • WiFi SSID / パスワードの間違い
  • ブローカーが停止している
  • ファイアウォールで TCP 1883 がブロックされている

メッセージが届かない

  • トピック名のミス
  • QoS 設定の違い
  • subscribe のタイミングミス

応用例

  • センサー値を MQTT で送信
  • 複数デバイスでデータ共有
  • スマホアプリやクラウドと連携

まとめ

  • MQTT は軽量で IoT に最適
  • MicroPython でも簡単に接続・送受信可能
  • WiFi 接続やブローカー設定に注意

この手順で、ESP32 を使った IoT 通信がすぐに試せます。

類似投稿