Python编程之MQTT

前言

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

Python编程之MQTT_第1张图片

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

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

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

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

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

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

Python编程之MQTT_第2张图片

所以要完成目标,需要搭建一台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

Python编程之MQTT_第3张图片

Ubuntu 系统IP为10.10.80.106

 

 

发布者

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

Python编程之MQTT_第4张图片

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

 

订阅者

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

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

DTU701订阅代码 mqtt.py

Python编程之MQTT_第5张图片

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

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

Python编程之MQTT_第6张图片

Python编程之MQTT_第7张图片

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

 

你可能感兴趣的:(Python编程之MQTT)