【HarmonyOS HiSpark Wi-Fi IoT 套件试用连载】[soon][三]用python快速搭建MQTT控制红绿灯测试页面 - HarmonyOS技术社区 - 电子技术论坛 - 广受欢迎的专业电子论坛
分享 收藏 返回

[文章]

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

本帖最后由 soon顺soon 于 2020-12-8 12:37 编辑

本文分享一种利用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.         Wifi-loT测试页面

  2.         Soon-Wifi-loT

  3.         

  4.         
  5.         

  6.                
  7.         

  8.         

  9.                
  10.         



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

三、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

附相关代码
python_mqtt_web.7z (1.18 KB)
(下载次数: 5, 2020-11-22 20:36 上传)









更多回帖

×
发帖