数码之家

 找回密码
 立即注册
搜索
查看: 2195|回复: 6

[Arduino] [esp8266_micropython] esp8266nodemcu使用mqtt协议控制三路5v继电器

[复制链接]
发表于 2023-6-7 22:29:21 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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也可以正常驱动。需要注意的是,光耦隔离的继电器似乎为低电压触发。

主要代码如下
  1.   
  2. from umqtt.simple import MQTTClient
  3. import urequests as requests
  4. import network
  5. from machine import Pin
  6. import time
  7. import ujson

  8. led=Pin(2,Pin.OUT)
  9. gpio5 = Pin(5,Pin.OUT)
  10. gpio5.on()

  11. gpio4 = Pin(4,Pin.OUT)
  12. gpio4.on()

  13. gpio14 = Pin(14,Pin.OUT)
  14. gpio14.on()

  15. def alarm_disable():
  16.   gpio5.on()
  17.   gpio4.on()
  18.   gpio14.on()

  19. def alarm_green():
  20.   gpio4.on()
  21.   gpio14.on()
  22.   gpio5.off()

  23.   
  24. def alarm_yellow():
  25.   gpio5.on()
  26.   gpio14.on()
  27.   gpio4.off()
  28.   
  29. def alarm_red():
  30.   gpio5.on()
  31.   gpio4.on()
  32.   gpio14.off()
  33.   
  34. def connectionWifi(ssid, password):
  35.   wlan = network.WLAN(network.STA_IF)
  36.   wlan.active(True)
  37.   wlan.connect(ssid, password)
  38.   while True:
  39.     if not wlan.isconnected():
  40.       time.sleep_ms(2000)
  41.     else:
  42.       print('connected to network')
  43.       led.off()
  44.       break

  45. def sub_callback(topic, msg):
  46.   print(msg)
  47.   msgStr = msg.decode()

  48.   print(msgStr.replace('"','\''))
  49.   msgObj = ujson.loads(msgStr)
  50.   if(msgObj['target_esp'] != mqttClientId):
  51.     print("not the device")
  52.     return
  53.   
  54.   if(msgObj['led_status'] == "on"):
  55.     led.off()
  56.   elif(msgObj['led_status'] == "off"):
  57.     led.on()
  58.   else:
  59.     print("unknow led's status "+msgObj['led_status'])
  60.    
  61.   if(msgObj['alarm_status'] == "green"):
  62.     alarm_green()
  63.   elif(msgObj['alarm_status'] == "yellow"):
  64.     alarm_yellow()
  65.   elif(msgObj['alarm_status'] == "red"):
  66.     alarm_red()
  67.   elif(msgObj['alarm_status'] == "disable"):
  68.     alarm_disable()
  69.   else:
  70.     print("unknow alarm's status "+msgObj['alarm_status'])

  71. if __name__== '__main__':
  72.   ssid='FAST_20CC'
  73.   password='409409409'
  74.   
  75.   mqttServerIP='192.168.1.113'
  76.   mqttServerPort=1883
  77.   mqttClientId='esp0001'
  78.   mqttSubTopic=b'espiot'
  79.   
  80.   connectionWifi(ssid, password)
  81.   
  82.   client = MQTTClient(mqttClientId, mqttServerIP, mqttServerPort)
  83.   client.set_callback(sub_callback)
  84.   client.connect()
  85.   print('mqtt client connected')
  86.   client.subscribe(mqttSubTopic)
  87.   while True:
  88.     client.wait_msg()



复制代码


mqtt数据如下
  1. {
  2.   "target_esp":"esp0001",
  3.   "alarm_status":"disable",
  4.   "led_status":"off"
  5. }
复制代码



效果如下图
微信图片_20230607221620.jpg
微信图片_20230607221613.jpg
微信图片_20230607221605.jpg
微信图片_20230607221558.jpg
微信图片_20230607221550.jpg
微信图片_20230607221432.jpg

打赏

参与人数 1家元 +90 收起 理由
家睦 + 90

查看全部打赏

发表于 2023-6-8 08:26:30 | 显示全部楼层
太高级了,看不懂~~~~~~~
回复 支持 反对

使用道具 举报

发表于 2023-6-8 10:05:10 | 显示全部楼层
HP 840 G5? 用着怎么样?
回复 支持 反对

使用道具 举报

发表于 2023-6-8 14:28:11 | 显示全部楼层
满满高级感
回复 支持 反对

使用道具 举报

发表于 2023-6-8 19:07:53 | 显示全部楼层
看起来像是python代码呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-8 20:01:47 | 显示全部楼层
xueyuking 发表于 2023-6-8 10:05
HP 840 G5? 用着怎么样?

是战66二代intel集显版, 买了4年,配置已经落后三四代了,体验对现在的产品没有参考价值。
回复 支持 反对

使用道具 举报

发表于 2023-6-9 11:10:04 | 显示全部楼层
改一下代码,使用公网上的MQTT服务器,就可以真正实现远程控制了。我曾用ESP32+MicroPython实现了,安卓手机端用E4A简单写了个收发MQTT消息的APP。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-15 22:34:53 | 显示全部楼层
shanyaochi 发表于 2023-6-8 19:07
看起来像是python代码呢?

是的,micropython ,精简过核心库的python。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-4-27 17:59 , Processed in 0.171601 second(s), 13 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

快速回复 返回顶部 返回列表