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 '''