2026年11月12日 星期四

【ESP32 物聯網實戰 09】遙控:遠端反向控制,透過 MQTT 操作實體繼電器

今天,我們要來打通雙向通訊的最後一哩路:利用 MQTT 的訂閱 (Subscribe) 功能,讓 ESP32 即時監聽來自雲端的指令,並透過繼電器 (Relay) 去安全地控制 110V 的實體電器,實現真正的遠端遙控!

透過 MQTT 遠端訂閱與繼電器反向控制架構 📱 遠端控制端 發布 "ON" ☁️ MQTT Broker ► iot/fan ESP32 訂閱端 GPIO13 OUT 繼電器 (Relay) ⚡ 實體迴路 ON

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()

沒有留言:

張貼留言

熱門文章