ESP32のMicroPythonでMQTT × LED制御(MicroPython 完全ガイド)
このページでは ESP32 + MicroPython + MQTT を使って、 外部からLEDをON / OFF制御する方法をわかりやすく解説します。スマホやPCから MQTT メッセージを送るだけで、ESP32 の LED を制御できます。
この記事で学べること
- MQTT を使って ESP32 をリモート制御できる
- LED を ON / OFF できる
- IoT の基本構造が理解できる
MQTTの仕組み(簡単)
- Publisher:メッセージを送る
- Subscriber:メッセージを受け取る
- Broker:仲介サーバ
今回は、
- PC(Linux) → Publisher
- ESP32 → Subscriber
として動作します。
ステップごとの解説
- 必要な部品を準備する
今回も前回、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
まとめ
ESP32とMicroPythonを使えば、シンプルなコードでMQTTプロトコルで通信ができます。応用すればIoTデバイスに簡単に組み込めます。
