ESP32のMicroPythonでMQTT × LED制御(MicroPython 完全ガイド)
この記事では、ESP32 に MicroPython を書き込み、MQTT メッセージを受信して LED を ON / OFF 制御する方法を解説します。
MQTT の詳しい仕組み(publish / subscribe、ブローカーの役割など)については、別記事で解説していますので、基礎から知りたい方はこちらをご覧ください。
ESP32のMicroPythonでMQTTを使う方法(基礎編)
https://try-iot.com/tutorial/micropython_mqtt/
この記事で学べること
- ESP32 を MQTT ブローカーに接続する
- MQTT メッセージを受信する
- JSON形式のデータを解析する
- 受信内容に応じて LED を ON / OFF 制御する
対象読者
- ESP32 / MicroPython を触り始めた方
- MQTT を使った遠隔制御を試してみたい方
- IoT の実践的な通信処理を学びたい方
なぜ LED 制御を例にするのか
LED は 状態が目で確認できるため、MQTT の「メッセージを受信 → 処理 → 動作する」という流れを理解するのに最適です。
将来的に
- リレー制御
- モーター制御
- センサー連携
へ発展させる際の基本形にもなります。
MQTTの役割(簡潔)
本記事では、ESP32 は Subscriber(受信側) として動作します。
- MQTT ブローカーからメッセージを受信
- 指定した topic のみを処理
- メッセージ内容に応じて LED を制御
今回は、
- PC(Linux) → Publisher
- ESP32 → Subscriber
として動作します。
※ MQTT の仕組みそのものは、以下の記事で詳しく解説しています。
👉 https://try-iot.com/tutorial/micropython_mqtt/
MQTTメッセージ形式(JSON)
今回は、以下のような JSON形式 のメッセージを受信します。
{
"led": "on"
}
なぜ JSON を使うのか
- 将来、複数の制御項目を追加しやすい
- センサー値や状態情報をまとめて扱える
- IoT で一般的に使われている形式
ステップごとの解説
- 必要な部品を準備する
今回も前回、MicroPythonをインストールしたM5STACK社のM5StampS3を使います。
M5StampS3は、Amazon、スイッチサイエンス社、マルツエレック社などで購入することができます。 - M5StampS3にMicroPythonをインストールする
前回の記事を参考にMicroPythonをインストールします。 - M5StampS3をPCに接続する
M5StampS3とPCをUSBケーブルで接続します。接続できているか確認します。
ls -l /dev/tty.usbmodem*
crw-rw-rw- 1 root wheel 0x9000006 8 24 16:37 /dev/tty.usbmodem11401
- VSCodeで以前、作ったプロジェクトを選択する
VSCodeを起動して、以前、作ったプロジェクトを選択します。

- boot.pyをM5StampS3にアップロードする
左側のエクスプローラにて、以前、作成した「boot.py」を選択して、右クリックから、「Upload file to Pico」をクリックして、M5StampS3にアップロードします。 - エディタで新しいファイルを作成する
左側のエクスプローラにて右クリックして、「新しいファイル」を選択します。ファイル名を入力する欄が表示されるので、適当に名前を入力します。今回は、「mqtt_led.py」としました。

- 下記コードをエディターで記入する
「mqtt_led.py」を選択すると、エディター画面が開くので、下記コードを記入して保存します。
from umqtt.simple import MQTTClient
import network
import time
import json
import binascii
import machine
import neopixel
# WiFi接続
# WiFiのssid
ssid = "SSID"
# WiFiのパスワード
password = "PASSWORD"
# MQTT Broker
server = "broker.hivemq.com"
# TOPIC
TOPIC = b"test/topic/esp32"
client_id = binascii.hexlify(machine.unique_id())
pin = machine.Pin(21, machine.Pin.OUT) # NeoPixel 駆動のための GPIO 21 を出力に設定
np = neopixel.NeoPixel(pin, 8) # 8ピクセル用の NeoPixel ドライバーを GPIO 21 で作成
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, port=8883, ssl=True)
client.connect()
# メッセージ送信
client.publish(TOPIC, b"Hello MQTT!")
# メッセージ受信
def sub_cb(topic, msg):
print((topic.decode(), msg.decode()))
data = json.loads(msg.decode())
print(data)
print(data["led"])
if data["led"] == "on":
print("led on")
led_on()
elif data["led"] == "off":
print("led off")
led_off()
# LED ON
def led_on():
np[0] = (255, 0, 0) # 第1ピクセルを赤に設定
np.write() # 全ピクセルにデータ書込み
# LED OFF
def led_off():
np[0] = (0, 0, 0) # 第1ピクセルを消灯に設定
np.write() # 全ピクセルにデータ書込み
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()
- 「mqtt_led.py」を実行する
左のエクスプローラにて、「mqtt-led.py」を選択して、右クリックから、「Run current file on Pico」をクリックすると、REPL画面に下記のように、MQTTブローカーに接続したことが表示されます。
MicroPython v1.26.1 on 2025-09-11; Generic ESP32S3 module with ESP32S3
Type "help()" for more information or .help for custom vREPL commands.
>>>
Connected to broker.hivemq.com, subscribed to b'test/topic/esp32' topic
- Publish側を作成する
PC(Linux)にて、node.jsをインストールし、下記のコードを記入して、index.jsとして保存します。
import mqtt from 'mqtt'
const client = mqtt.connect('mqtts://broker.hivemq.com', {
rejectUnauthorized: false
});
const topic = "test/topic/esp32"
const argv = process.argv[2]
console.log(argv)
let msg;
if (argv === "on") {
msg = {
'led': 'on',
}
} else {
msg = {
'led': 'off',
}
}
client.on('connect', () => {
console.log("MQTT connected");
client.publish(topic, JSON.stringify(msg))
client.end()
})
- mqttモジュールをインストールする
npmをインストールしてから、mqttモジュールをインストールします。
$ npm init
$ npm install mqtt
- 下記コマンドを実行する
ESP32S3のLEDを点灯する
$ node index.js on
ESP32S3のLEDを消灯する
$ node index.js off
まとめ
- MQTT を使うことで ESP32 を遠隔制御できる
- JSON形式を使うと拡張しやすい
- LED制御は MQTT の理解に最適な例
- この仕組みを応用すれば、さまざまな IoT 制御に発展可能
ESP32とMicroPythonを使えば、シンプルなコードでMQTTプロトコルで通信ができます。応用すればIoTデバイスに簡単に組み込めます。
- ESP32のMicroPythonでMQTTを使う方法(基礎)
https://try-iot.com/tutorial/micropython_mqtt/
