【HarmonyOS HiSpark Wi-Fi IoT 套件试用连载】[soon][三]用python快速搭建MQTT控制红绿灯测试页面

描述

本文来源电子发烧友社区,作者:soon顺soon, 帖子地址:https://bbs.elecfans.com/jishu_2010903_1_1.html


本文分享一种利用python搭建MQTT控制WIFI-IoT的红绿灯测试web页面的方法,实现按下 web页面按键后会发布topic为ledstatus,payload分别为RedLED、YellowLED、GreenLED的消息,如果刚好有兴趣的可以参考下。

WIFI-IoT上收到消息后反转对应LED 状态的相关代码,参阅
MQTT 控制红绿灯的演示与代码分享
 
一、相关的软件和python库安装
ubuntu20.04中搭建MQTT Broker的指令如下
  1. sudo apt-get install mosquitto
  2. sudo apt-get install mosquitto-clients
  3. sudo apt-get install mosquitto-dev
复制代码
 
Ubuntu下用python搭建web会用到的库安装指令如下
  1. pip3 install paho.mqtt
  2. pip3 install web.py
复制代码
 
如果是在windows下mqtt的包安装要换成如下
  1. pip install web.py
  2. pip install paho-mqtt
复制代码
 
二、用html写个简单的页面"key.html"如下
  1.  
  2.  
  3.  
  4.  
  5.  

    •         Wifi-loT测试页面
       
    •         Soon-Wifi-loT
       
    •         
  6.          tion="/RedLED" method="POST">
    •                 
    •         
  7.        
    •                 
    •         
  8.        
    •                 
    •         
  9.  
  10.  
复制代码

页面比较简洁只有标题和三个按键

三、Python相关代码如下
  1. import web
  2. import paho.mqtt.client
  3. import time
  4.  
  5. HOSTNAME ="xxxxxx"#请填入你的Broker地址/可以是你局域网ubuntu虚拟机IP,或者云服务器地址
  6. MQTTPORT = 1883#默认1883 具体看你Broker配置
  7. USERNAME ="xxxxxx" #请填入用户名
  8. PASSWD="xxxxxx"#请填入用密码
  9.  
  10. HTML_PAGE = "key.html"
  11. TOPICE = "ledstatus"
  12. mqtt = paho.mqtt.client
  13.  
  14. urls = (
  15.     '/RedLED', 'RedLED',
  16.     '/YellowLED', 'YellowLED',
  17.     '/GreenLED', 'GreenLED',
  18.     '/(.*)', 'Wifi_lOT_home'
  19. )
  20.  
  21. app = web.application(urls, globals())
  22. client_id = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
  23. client = mqtt.Client(client_id)    # ClientId不能重复,所以使用当前时间
  24.  
  25. # publish 消息
  26. def on_publish(topic, payload, qos):
  27.     client.username_pw_set(USERNAME, PASSWD)  # 必须设置,否则会返回「Connected with result code 4」
  28.     client.connect(HOSTNAME, MQTTPORT, 60)
  29.     client.publish(topic, payload, qos)
  30.  
  31. class Wifi_lOT_home:
  32.     def GET(self, name):
  33.         file = open(HTML_PAGE, "rb+")
  34.         return file.read()
  35.     def POST(self):
  36.         print ("test soon")
  37.         
  38. class RedLED:  
  39.     def POST(self):
  40.         print ("RedLED POST")
  41.         on_publish(TOPICE, "RedLED".encode(),0)
  42.         file = open(HTML_PAGE, "rb+")
  43.         return file.read()           
  44.  
  45. class YellowLED:
  46.     def POST(self):
  47.         print ("YellowLED POST")
  48.         on_publish(TOPICE,"YellowLED".encode(),0)
  49.         file = open(HTML_PAGE, "rb+")
  50.         return file.read()        
  51.  
  52. class GreenLED:  
  53.     def POST(self):
  54.         print ("GreenLED POST")
  55.         on_publish(TOPICE,"GreenLED".encode(),0)
  56.         file = open(HTML_PAGE, "rb+")
  57.         return file.read()  
  58.  
  59. if __name__ == "__main__":
  60.     app.run()
复制代码

四、运行指令和效果
运行指令python3 -u xxxxxx.py 端口  ,如 python3 -u keyEvent.py 8080
然后在浏览器输入http://localhost:8080/  或者http://(ubuntu IP/server IP):8080/ 就能看到以下页面

wi-fi


附相关代码下载
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分