• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
MKT-porter
博客园    首页    新随笔    联系   管理    订阅  订阅
经典mqtt通信(1) python发送和接受
 
 

 

 

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

'''

  

posted on 2024-05-02 23:59  MKT-porter  阅读(343)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3