IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> Python Mqtt 二次封装与模块化开发 -> 正文阅读

[嵌入式]Python Mqtt 二次封装与模块化开发

使用pip安装封装好的DXR插件

pip install DXR

安装完成后会得到两个包分别为Dxr_mqtt以及Dxr_log,使用下列方式导入包内所有函数,也可以单独引用相应内容

from Dxr_mqtt.dxr_mqtt_2 import *
from Dxr_mqtt.dxr_mqtt import *
from Dxr_log.log import *

dxr_mqtt以及dxr_mqtt_2区别在于2使用了qos为2的方式进行发布话题和订阅话题,dxr_mqtt使用qos为0的方式进行发布话题和订阅话题,可以根据业务具体需求进行选择

MQTT设计了一套保证消息稳定传输的机制,包括消息应答、存储和重传。在这套机制下,提供了三种不同层次QoS(Quality of Service):

  • QoS0,At most once,至多一次;
  • QoS1,At least once,至少一次;
  • QoS2,Exactly once,确保只有一次。

QoS 是消息的发送方(Sender)和接受方(Receiver)之间达成的一个协议:

  • QoS0 代表,Sender 发送的一条消息,Receiver 最多能收到一次,也就是说 Sender 尽力向 Receiver 发送消息,如果发送失败,也就算了;
  • QoS1 代表,Sender 发送的一条消息,Receiver 至少能收到一次,也就是说 Sender 向 Receiver 发送消息,如果发送失败,会继续重试,直到 Receiver 收到消息为止,但是因为重传的原因,Receiver 有可能会收到重复的消息;
  • QoS2 代表,Sender 发送的一条消息,Receiver 确保能收到而且只收到一次,也就是说 Sender 尽力向 Receiver 发送消息,如果发送失败,会继续重试,直到 Receiver 收到消息为止,同时保证 Receiver 不会因为消息重传而收到重复的消息。

?dxr_mqtt包类和方法的介绍,(dxr_mqtt_2一致,只是qos不一样)

# setServerUrl(选用)
# 用于设置mqtt连接的服务器,
# 默认url为127.0.0.1,默认clientID为随机时间戳,
# 根据也无需要进行相应修改
setServerUrl('xx.xx.xx.xx', clientID='server')
# dxr_mqtt_2中方法为以下方法内容,后续所有方法都相似,方法名+'_2'
# clientID 不能和上面一样,会有冲突
setServerUrl_2('39.101.69.111', clientID='server_2')
# 设置是否打印mqtt日志,默认为False
# setMqttLog(False)
# Dxr_Publisher(消息发布者)
# 申请一个消息发布者后
# 可以直接使用发布至调用publish方法进行话题发布
dxr_publish = Dxr_Publisher('/cmd_vel')
# 直接使用publish方法进行消息发布(消息为json对象)
dxr_publish.publish({
    "op": "test",
    "cmd": '/test',
    "msg": {
        "test": 'test'
    }
})
# 订阅消息回调方法
def callback_test1(msg):
    print('test1', msg)
# 申明一个订阅者
# topic 订阅一个话题
# callback 定义一个回调函数用于接受话题消息
dxr_subscriber = Dxr_Subscriber('/test1', callback=callback_test1)

dxr_log包类和方法的介绍

# log存放在项目下的log文件加下,log文件夹不存在会自动创建文件夹
# 第一个版本还无法设置日志存储时长,目前为3天一覆盖,后续会更新
# 设置相应类型日志是否打印在终端
setLogPrint(info=True, debug=True, error=True)
# 日志存储在all.log中
print_info('test')
# 日志存储在debug.log中
print_debug('test')
# 日志存储在error.log以及all.log中
print_error('test')

其它介绍,上篇文章有介绍如何安装mosquitto,本篇会讲解下如何使用mosquitto查看DXR插件包中订阅和发布的相应客户端

root@iZzpmczawpjrqvZ:~# mosquitto_sub -t /topic/#

server_pub:

/cmd_vel

/test2

/test3

server_sub:

/test1

/test2

/test3

server_2_pub2:

/test4

/pub_test2

?使用mosquitto_sub -t /topic/#查看所有正在发布和订阅者发布和订阅的话题类型

也可以使用mosquitto_sub -t /topic/<client_id> (client_id为订阅发布这的client_id)来查看特定发布者发布和订阅的话题

如果发布者意外掉线后,发布和订阅的话题会被清空,也可以根据这个方式来检验发布订阅者程序是否正常运行

根据上述查看到的话题使用mosquitto_sub -t <topic>查看具体话题发布的消息

也可以使用mosquitto_pub -t <topic> -m <msg>消息内容来发布一条测试消息给相应话题

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-10-06 12:23:33  更:2021-10-06 12:25:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:54:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码