https://mqttx.app/zh/web


测试代码

注意安装的是老版本
pip install "paho-mqtt<2.0.0"
测试代码
import random
import time
# pip install "paho-mqtt<2.0.0"
from paho.mqtt import client as mqtt_client
from multiprocessing import Process,Manager
broker = 'broker.emqx.io'
port = 1883
topic = "/face/msg"
# generate client ID with pub prefix randomly
client_id = f'python-mqtt-{random.randint(0, 1000)}'
#client_id = f'mqttx_dadb0a99'
def connect_mqtt():
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Connected to MQTT Broker!")
else:
print("Failed to connect, return code %d\n", rc)
client = mqtt_client.Client(client_id)
client.on_connect = on_connect
client.connect(broker, port)
return client
def subscribe(client: mqtt_client,ShareImages,lock):
def on_message(client, userdata, msg):
recmsg=f"Received `{msg.payload.decode()}` from `{msg.topic}` topic"
ShareImages[1]=msg.payload.decode()
print(ShareImages[1],'===',recmsg)
client.subscribe(topic)
client.on_message = on_message
def publish(client,ShareImages,lock):
#msg_count = 0
while True:
if ShareImages[9]==1:
print("mqtt stop")
break
#time.sleep(6)
#msg = f"messages: {msg_count}"
if ShareImages[3]==1:
ShareImages[3]=0
msg=ShareImages[2]
result = client.publish(topic, msg)
# result: [0, 1]
status = result[0]
if status == 0:
print(f"Send `{msg}` to topic `{topic}`")
ShareImages[4]='ok'
else:
ShareImages[4]='error'
print(f"Failed to send message to topic {topic}")
else:
time.sleep(0.001)
#msg_count += 1
def runMqtt(ShareImages,lock):
client = connect_mqtt()
#client = mqtt_client.Client(mqtt_client.CallbackAPIVersion.VERSION1, client_id)
client.loop_start()
subscribe(client,ShareImages,lock) # 回调模式
publish(client,ShareImages,lock)
'''
if __name__ == '__main__':
lock = Manager().Lock()#创建共享内存容器
ShareImages=Manager().dict()#存str类型数据
ShareImages[1]="recmsg"
ShareImages[2]="senmsg"
ShareImages[3]=0# 发送控制命令
ShareImages[4]=0# 发送成功标志位
ShareImages[9]=0#用于QT界面关闭按键,关闭采集进程
p = Process(target=runMqtt, args=(ShareImages,lock))#开启进程
p.deamon=True #伴随主进程关闭而关闭,但是有时候还是关闭不了,单独搞个标志位来控制
p.start()#开始
msg_count=0
while True:
if ShareImages[3]==0:
msg_count += 1
ShareImages[2]=str(msg_count)
ShareImages[3]=1
time.sleep(6)
elif ShareImages[3]==2:
print(msg_count,"发送结果",ShareImages[4])
ShareImages[3]=0
'''
浙公网安备 33010602011771号