Python编程之MQTT

前言

本文将简单介绍DTU701订阅MQTT消息,远程控制LED灯。

MQTT是IBM开发的一个即时通讯协议。MQTT是面向M2M和物联网的连接协议,采用轻量级发布和订阅消息传输机制。

若初次接触MQTT协议,可先理解以下概念:

MQTT协议特点—— 借助消息推送功能,可以更好地实现远程控制。

MQTT协议角色—— 发布者,代理器(服务器)和订阅者。

MQTT协议消息—— 消息可理解为发布者和订阅者交换的内容(负载),这些消息包含具体的内容,可以被订阅者使用。

MQTT协议主题—— 主题可理解为相同类型或相似类型的消息集合。

所以要完成目标,需要搭建一台MQTT服务器,我们采用ubuntu系统,IP为10.10.80.106

发布者,采用Windows 运行MQTT测试工具。订阅者,为DTU701,采用python编写,并控制LED。

 

设计一个简单的测试案例,在ubuntu上运行MQTT代理服务器,而DTU701订阅主题为gpio的消息,Windows发布同主题消息,消息的内容为JSON数据包,数据包格式为{“index”:130,“value”:0},index代表GPIO的编号,value代表打开或关闭状态。

 

MQTT服务器

Mosquitto是一款实现了 MQTT v3.1 协议的开源消息代理软件,提供轻量级的,支持发布/订阅的的消息推送模式,使设备对设备之间的短消息通信简单易用。我们在ubuntu上安装mosquitto。

下载源码http://mosquitto.org/files/source/

这里选择mosquitto-1.4.5,解压编译make & make install

 

常见问题:

编译找不到openssl/ssl.h

解决方法:安装openssl

sudo apt-get install libssl-dev

编译过程找不到ares.h

解决方法:修改config.mk中的WITH_SRV:=yes,改为WITH_SRV:=yes

使用过程中找不到libmosquitto.so.1

error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory

解决方法:修改libmosquitto.so位置 创建链接

sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1

# 更新动态链接库

sudo ldconfig

make: g++:命令未找到

解决方法:安装g++编译器

sudo apt-get install g++

 

开启MQTT服务

在ubuntu终端输入如下命令:

mosquitto -v

Ubuntu 系统IP为10.10.80.106

 

 

发布者

采用windows下mqtt工具,mqtt工具很多如mqtt-spy,为了方便我这边采用MQTT测试工具(网盘可下载):

输入MQTT服务器IP及端口号,点击connect

 

订阅者

基于DTU701 采用python编写代码实现mqtt订阅。

paho-python是一个符合MQTT v3.1协议的客户端,paho-python可连接MQTT代理服务器、发布消息、订阅消息和获得推送消息。DTU701默认带有paho-python模块。

DTU701订阅代码 mqtt.py

注意:网络编程中,服务器和浏览器只认bytes 类型数据。所以msg.payload为bytes类型字符串。

运行python mqtt.py 订阅,  MQTT测试工具 发布send。结果如下:

至此,已实现预定的设想。可见python 采用50行代码实现MQTT,足见其强横。

 

Python MQTT是一种基于Python编程语言的MQTT(Message Queuing Telemetry Transport)客户端库。MQTT是一种轻量级的通信协议,用于在物联网(IoT)应用程序中传输消息。 要在Python中使用MQTT,可以使用一些流行的Python MQTT库,如paho-mqttmqtt-client。这些库提供了一些API和函数,用于连接到MQTT代理服务器,并进行发布(publish)和订阅(subscribe)消息。 以下是一个使用paho-mqtt库的示例代码,用于连接到MQTT代理服务器并发布和订阅消息: ```python import paho.mqtt.client as mqtt # 连接回调函数 def on_connect(client, userdata, flags, rc): print("Connected with result code " + str(rc)) # 订阅主题 client.subscribe("topic/test") # 接收消息回调函数 def on_message(client, userdata, msg): print(msg.topic + " " + str(msg.payload)) # 创建MQTT客户端 client = mqtt.Client() # 设置连接回调函数 client.on_connect = on_connect # 设置接收消息回调函数 client.on_message = on_message # 连接到MQTT代理服务器 client.connect("mqtt.example.com", 1883, 60) # 循环处理网络流量 client.loop_forever() ``` 上述代码创建了一个MQTT客户端,并连接到名为"mqtt.example.com"的MQTT代理服务器。然后,它设置了两个回调函数,一个用于处理连接事件,另一个用于处理接收到的消息。最后,它循环处理网络流量以保持与服务器的连接。 这只是一个简单的示例,你可以根据自己的需求进一步扩展和定制代码。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值