前言
本文将简单介绍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,足见其强横。