1、安装paho.mqtt包
pip install paho.mqtt
2、下载mqtt.fx用于测试消息通信
3、python 连接免费mqtt服务完整代码,broker-cn.emqx.io是免费的mqtt服务,可订阅testtopic/#主题
from paho.mqtt import client as mqtt
import time
host = 'broker-cn.emqx.io' #连接ip地址 根据服务地址更改
client_id="client:"+str(int(time.time())) #客户端连接id 一个id不能同时在线 唯一 更改为随机
port= 1883 #连接端口 mqtt服务默认端口1883
#username="client" #连接验证 用户名
#password="client" #连接验证 密码
topic="testtopic/send" #订阅主题 接受信息主题
send_topic="testtopic/send2" #发送主题 发送信息到主题
connect_status=0 #mqtt连接状态
#监听连接成功事件
def on_connect(client, userdata, flags, rc):
if rc == 0:
connect_status=1
print("Connected to MQTT Broker!"+" "+client_id)
publish(mqttClient, 'test') #测试发布 其他地方直接调用发布信息函数
else:
print("Failed to connect, return code %d\n", rc)
client.subscribe(topic) # 订阅消息 可以订阅 testtopic/# 主题
# 监听连接断开事件
def on_disconnect(client, userdata, rc):
connect_status=0
print("Client Got Disconnected")
#监听接受消息
def on_message(client, userdata, msg):
"""一旦订阅到消息, 回调此方法"""
message = str(msg.payload.decode())
print("topic:"+msg.topic+" message:"+message) #接受的消息、主题
#自定义mqtt连接函数
def server_conenet(client):
client.on_connect = on_connect # 返回连接状态的回调函数
client.on_disconnect = on_disconnect # 返回连接状态的回调函数
client.on_message = on_message # 返回订阅消息的回调函数
# client.username_pw_set(username, password) # mqtt服务器账号密码
client.connect(host, port, 60) # 连接
client.loop_forever() # 以forever方式阻塞运行。
#发送消息
def publish(client,msg):
send_status=client.publish(send_topic, msg)
status = send_status[0]
if(connect_status==1):
if status == 0:
print("Send successed")
else:
print("Failed to send message")
else:
print("mqtt not connected")
if __name__ == '__main__':
mqttClient = mqtt.Client(client_id)
server_conenet(mqttClient)
python 客户端订阅testtopic/send 主题 接受消息,mqtt.fx订阅testtopic/send2主题接受消息
python 客户端向主题testtopic/send2 发送消息 mqtt.fx 收到信息 mqtt.fx向testtopic/send主题发送信息 python 客户端收到信息