|
本帖最后由 mao_jin_dao 于 2023-6-7 22:32 编辑
上一篇 [Arduino] [esp8266_micropython] 使用mqtt协议控制esp8266nodemuc的led 帖子有mqtt客户端源码,如有需要,请自行查阅。
本帖承接上帖,使用esp8266的gpio5(D1)、gpio4(D2)、gpio14(D5)三个引脚的输出模式,控制三路继电器。
继电器使用的是光耦隔离的5V输入继电器,测试3.3V也可以正常驱动。需要注意的是,光耦隔离的继电器似乎为低电压触发。
主要代码如下
-
- from umqtt.simple import MQTTClient
- import urequests as requests
- import network
- from machine import Pin
- import time
- import ujson
- led=Pin(2,Pin.OUT)
- gpio5 = Pin(5,Pin.OUT)
- gpio5.on()
- gpio4 = Pin(4,Pin.OUT)
- gpio4.on()
- gpio14 = Pin(14,Pin.OUT)
- gpio14.on()
- def alarm_disable():
- gpio5.on()
- gpio4.on()
- gpio14.on()
- def alarm_green():
- gpio4.on()
- gpio14.on()
- gpio5.off()
-
- def alarm_yellow():
- gpio5.on()
- gpio14.on()
- gpio4.off()
-
- def alarm_red():
- gpio5.on()
- gpio4.on()
- gpio14.off()
-
- def connectionWifi(ssid, password):
- wlan = network.WLAN(network.STA_IF)
- wlan.active(True)
- wlan.connect(ssid, password)
- while True:
- if not wlan.isconnected():
- time.sleep_ms(2000)
- else:
- print('connected to network')
- led.off()
- break
- def sub_callback(topic, msg):
- print(msg)
- msgStr = msg.decode()
- print(msgStr.replace('"','\''))
- msgObj = ujson.loads(msgStr)
- if(msgObj['target_esp'] != mqttClientId):
- print("not the device")
- return
-
- if(msgObj['led_status'] == "on"):
- led.off()
- elif(msgObj['led_status'] == "off"):
- led.on()
- else:
- print("unknow led's status "+msgObj['led_status'])
-
- if(msgObj['alarm_status'] == "green"):
- alarm_green()
- elif(msgObj['alarm_status'] == "yellow"):
- alarm_yellow()
- elif(msgObj['alarm_status'] == "red"):
- alarm_red()
- elif(msgObj['alarm_status'] == "disable"):
- alarm_disable()
- else:
- print("unknow alarm's status "+msgObj['alarm_status'])
- if __name__== '__main__':
- ssid='FAST_20CC'
- password='409409409'
-
- mqttServerIP='192.168.1.113'
- mqttServerPort=1883
- mqttClientId='esp0001'
- mqttSubTopic=b'espiot'
-
- connectionWifi(ssid, password)
-
- client = MQTTClient(mqttClientId, mqttServerIP, mqttServerPort)
- client.set_callback(sub_callback)
- client.connect()
- print('mqtt client connected')
- client.subscribe(mqttSubTopic)
- while True:
- client.wait_msg()
复制代码
mqtt数据如下
- {
- "target_esp":"esp0001",
- "alarm_status":"disable",
- "led_status":"off"
- }
复制代码
效果如下图
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|