今天,我們要來打通雙向通訊的最後一哩路:利用 MQTT 的訂閱 (Subscribe) 功能,讓 ESP32 即時監聽來自雲端的指令,並透過繼電器 (Relay) 去安全地控制 110V 的實體電器,實現真正的遠端遙控!
3. ESP32 實作:訂閱 MQTT 遠端指令
import time
import network
from machine import Pin
from umqtt.simple import MQTTClient
relay = Pin(13, Pin.OUT)
relay.value(0)
SSID = "Your_WiFi_SSID"
PASSWORD = "Your_WiFi_Password"
CLIENT_ID = "esp32_relay_control_01"
BROKER = "broker.emqx.io"
TOPIC_CONTROL = "tpcu/iot/classA/fan"
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)
while not wlan.isconnected():
time.sleep(0.5)
def on_message_received(topic, msg):
topic_str = topic.decode("utf-8")
msg_str = msg.decode("utf-8").upper()
print(f"收到來自主題 [{topic_str}] 的訊息: {msg_str}")
if msg_str == "ON":
relay.value(1)
print("💡 繼電器開啟!風扇/電燈運轉...")
elif msg_str == "OFF":
relay.value(0)
print("🚫 繼電器關閉!風扇/電燈停止...")
else:
print("收到未知指令。")
client = MQTTClient(CLIENT_ID, BROKER)
client.set_callback(on_message_received)
client.connect()
client.subscribe(TOPIC_CONTROL)
print(f"成功連線 Broker 並訂閱主題,等待指令中...")
try:
while True:
client.check_msg()
time.sleep(0.1)
except KeyboardInterrupt:
client.disconnect()

沒有留言:
張貼留言