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

阅读量0
1
2


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

WIFI-IoT上收到消息后反转对应LED 状态的相关代码,参阅

一、相关的软件和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. <html>
  2. <meta charset="utf-8">
  3. <div align="center">
  4. <body>
  5. <h1>
  6.         Wifi-loT测试页面<BR>
  7.         Soon-Wifi-loT<BR>
  8.         </h1>
  9.         <form action="/RedLED" method="POST">
  10.                 <input type="submit" value="红灯">
  11.         </form>
  12.         <form action="/YellowLED" method="POST">
  13.                 <input type="submit" value="黄灯">
  14.         </form>
  15.         <form action="/GreenLED" method="POST">
  16.                 <input type="submit" value="绿灯">
  17.         </form>
  18. </body>
  19. </html>
复制代码

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

三、Python相关代码如下
  1. import web
  2. import paho.mqtt.client
  3. import time

  4. HOSTNAME ="xxxxxx"#请填入你的Broker地址/可以是你局域网ubuntu虚拟机IP,或者云服务器地址
  5. MQTTPORT = 1883#默认1883 具体看你Broker配置
  6. USERNAME ="xxxxxx" #请填入用户名
  7. PASSWD="xxxxxx"#请填入用密码

  8. HTML_PAGE = "key.html"
  9. TOPICE = "ledstatus"
  10. mqtt = paho.mqtt.client

  11. urls = (
  12.     '/RedLED', 'RedLED',
  13.     '/YellowLED', 'YellowLED',
  14.     '/GreenLED', 'GreenLED',
  15.     '/(.*)', 'Wifi_lOT_home'
  16. )

  17. app = web.application(urls, globals())
  18. client_id = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
  19. client = mqtt.Client(client_id)    # ClientId不能重复,所以使用当前时间

  20. # publish 消息
  21. def on_publish(topic, payload, qos):
  22.     client.username_pw_set(USERNAME, PASSWD)  # 必须设置,否则会返回「Connected with result code 4」
  23.     client.connect(HOSTNAME, MQTTPORT, 60)
  24.     client.publish(topic, payload, qos)

  25. class Wifi_lOT_home:
  26.     def GET(self, name):
  27.         file = open(HTML_PAGE, "rb+")
  28.         return file.read()
  29.     def POST(self):
  30.         print ("test soon")
  31.         
  32. class RedLED:  
  33.     def POST(self):
  34.         print ("RedLED POST")
  35.         on_publish(TOPICE, "RedLED".encode(),0)
  36.         file = open(HTML_PAGE, "rb+")
  37.         return file.read()           

  38. class YellowLED:
  39.     def POST(self):
  40.         print ("YellowLED POST")
  41.         on_publish(TOPICE,"YellowLED".encode(),0)
  42.         file = open(HTML_PAGE, "rb+")
  43.         return file.read()        

  44. class GreenLED:  
  45.     def POST(self):
  46.         print ("GreenLED POST")
  47.         on_publish(TOPICE,"GreenLED".encode(),0)
  48.         file = open(HTML_PAGE, "rb+")
  49.         return file.read()  

  50. if __name__ == "__main__":
  51.     app.run()
复制代码

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


附相关代码
python_mqtt_web.7z
(1.18 KB, 下载次数: 5)

1









回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友