from machine import Pin
import time
import network
from umqtt.simple import MQTTClient
# WiFi配置
WIFI_SSID = "Wokwi-GUEST"
WIFI_PASS = ""
# 巴法云配置
MQTT_BROKER = "bemfa.com"
MQTT_PORT = 9501
CLIENT_ID = "252038e6acc763bea58640db824b0a64" # 替换为您的密钥
TOPIC_LED = "ledstate" # LED状态主题
# 配置LED引脚
led = Pin(15, Pin.OUT)
led_state = False # 初始状态为OFF
# WiFi连接函数
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print("Connecting to WiFi...")
wlan.connect(WIFI_SSID, WIFI_PASS)
# 等待连接
start_time = time.ticks_ms()
while not wlan.isconnected():
if time.ticks_diff(time.ticks_ms(), start_time) > 10000:
print("连接超时!")
return False
time.sleep_ms(100)
print("WiFi connected!")
print("IP:", wlan.ifconfig()[0])
return True
# MQTT发布函数
def publish_led_state(state):
try:
client = MQTTClient(CLIENT_ID, MQTT_BROKER, MQTT_PORT)
client.connect()
client.publish(TOPIC_LED, "ON" if state else "OFF")
print(f"已上传LED状态: {'ON' if state else 'OFF'}")
client.disconnect()
return True
except Exception as e:
print("MQTT错误:", e)
return False
# 处理串口命令
def process_serial_command(cmd):
global led_state
cmd = cmd.strip().upper()
if cmd == "ON":
led.value(1)
led_state = True
print("LED已打开")
publish_led_state(True)
return True
elif cmd == "OFF":
led.value(0)
led_state = False
print("LED已关闭")
publish_led_state(False)
return True
elif cmd == "TOGGLE":
led_state = not led_state
led.value(led_state)
state = "ON" if led_state else "OFF"
print(f"LED已切换: {state}")
publish_led_state(led_state)
return True
elif cmd == "STATUS":
state = "ON" if led_state else "OFF"
print(f"当前LED状态: {state}")
return True
else:
print("未知命令. 可用命令: ON, OFF, TOGGLE, STATUS")
return False
# 主程序
def main():
global wifi_connected, led_state
# 连接WiFi
wifi_connected = connect_wifi()
# 初始状态
led.value(led_state)
print(f"系统就绪,初始LED状态: {'ON' if led_state else 'OFF'}")
print("通过串口发送命令控制LED:")
print("ON, OFF, TOGGLE, STATUS")
while True:
# 模拟串口输入(实际使用时替换为真实串口读取)
# 这里使用input()模拟,实际设备上可能需要使用uart.read()
try:
cmd = input("> ").strip()
if cmd:
process_serial_command(cmd)
except Exception as e:
print("错误:", e)
time.sleep(0.1)
if __name__ == "__main__":
wifi_connected = False
main()