文件名:【Python】Flask + MQTT 实现消息订阅发布,ipad3发布
【Python】Flask + MQTT 实现消息订阅发布
目录 Flask + MQTT 实现消息订阅发布准备开始1.创建Flask项目2创建py文件:`mqtt_demo.py`3.代码实现4.项目运行5.测试5.1 测试消息接收5.2 测试消息发布6、扩展
Flask + MQTT 实现消息订阅发布 准备 本次项目主要使用到的库:flask_mqtt pip install flask_mqtt 开始 1.创建Flask项目 2创建py文件:mqtt_demo.py - *也可以直接在项目中的 `app.py` 文件进行代码编写*
3.代码实现
from flask
import Flask
, request
, jsonify
from flask_mqtt
import Mqttapp
= Flask
(__name__
)app
.config
['MQTT_BROKER_URL'] = 'broker.emqx.io'app
.config
['MQTT_BROKER_PORT'] = 1883app
.config
['MQTT_USERNAME'] = 'user'app
.config
['MQTT_PASSWORD'] = '123456'app
.config
['MQTT_KEEPALIVE'] = 60app
.config
['MQTT_TLS_ENABLED'] = Falsetopic
= '/flask/mqtt'mqtt_client
= Mqtt
(app
)@app.route('/')def index():return "Welcome mqtt_flask"@mqtt_client.on_connect()def handle_connect(client
, userdata
, flags
, rc
):"""连接回调函数"""if rc
== 0:print('Connected successfully')mqtt_client
.subscribe
(topic
)else:print('Bad connection. Code:', rc
)@mqtt_client.on_message()def handle_mqtt_message(client
, userdata
, message
):""" 消息回调函数 """data
= dict(topic
=message
.topic
,payload
=message
.payload
.decode
())print('Received message on topic: {topic} with payload: {payload}'.format(**data
))@app.route('/publish', methods
=['POST'])def publish_message():""" 消息发布接口(实际应用中,该接口可能需要处理一些复杂业务逻辑) """request_data
= request
.get_json
()publish_result
= mqtt_client
.publish
(request_data
['topic'], request_data
['msg'])return jsonify
({'code': publish_result
[0]})if __name__
== '__main__':app
.run
() 4.项目运行 运行项目前可在Pycharm中设置host和port 设置好后直接运行项目 5.测试
使用MQTTX进行消息测试
5.1 测试消息接收
创建连接
Host:为代码中定义好的 broker.emqx.ioPort:为代码中定义好的 1883用户名、密码根据需要添加
添加订阅
主题为:/flask/mqtt
在MQTTX中发布消息
主题:/flask/mqtt
Flask控制台中接收到的消息
5.2 测试消息发布 订阅使用消息接收的订阅 主题为:/flask/mqtt 使用Postman调用 /publish 接口,并发送消息到 /flask/mqtt 主题中 MQTTX 中接收到的消息 6、扩展
本次Flask项目在Win10下运行, MQTTX消息消息发送订阅在Ubuntu下进行
内网穿透 使用花生壳进行内网映射内网地址及端口为:Flask项目所在主机IP,端口为Flask运行端口使用协议:HTTPS
参考:
链接: https://www.emqx.com/zh/blog/how-to-use-mqtt-in-flask链接: https://blog.csdn.net/emqx_broker/article/details/124816126