|
本帖最后由 slzm40 于 2016-2-4 15:51 编辑
发现这个IBM开源协议挺晚的了,原来帮朋友做毕设,基于嵌入式跨网络的zigbee技术智能家居远程控制系统的课题,扩展弱,分层不明,增加功能复杂,基于QT实现。 所以后来发现MQTT,这个协议只有50多页,非常简单。
选这个是做了对自己随便做做的小型智能家居符合,我的现场是zigbee网络(独立工作),现场有个小型中转路由 连接到 MQTT服务,远程终端采用平板(用Qt开发界面),手机(java),网页等,小型中转路由是与现场zigbee采用USB或串口对接的。 我要实现的就是现场zigbee网,小型中转路由,远程终端。 服务器现成。
网络介绍:
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议。
MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:
1、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;
2、对负载内容屏蔽的消息传输;
3、使用 TCP/IP 提供网络连接;
4、有三种消息发布服务质量:
“至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
“至少一次”,确保消息到达,但消息重复可能会发生。
“只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
5、小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量;
6、使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制.
这里不讲这个协议,MQTT协议是开源的,有各种开源的服务器和客户端,比如Qt,linux,单片机,web,java等等,省去了很多工作,而且容易扩展,实现方便。
下面可以叫我搬运工,加一些自己做过的,移植过的,由于本人水平有限,所发内容仅供参考。
1 Broker
协议介绍
http://public.dhe.ibm.com/softwa ... mqtt/mqtt-v3r1.html
下面讲linux安装方法
目前最新mosquitto-1.4.5版本服务器
http://mosquitto.org/files/source/mosquitto-1.4.5.tar.gz
系统:Ubuntu 14.04
参考资料:
http://blog.csdn.net/xukai871105/article/details/39252653
都是现移的,加了一些自己的注释,另外mosquitto默认没开启websocket, 这个等需要时再增加。
安装 mosquitto 服务器
1 安装和使用注意点
1.1 安装
截止2015年9月,最新版本为mosquitto-1.4.5
# 下载源代码包
wget http://mosquitto.org/files/source/mosquitto-1.4.5.tar.gz
# 解压
tar zxvf mosquitto-1.4.5.tar.gz
# 进入目录
cd mosquitto-1.4.5
# 编译
make
# 安装
sudo make install
1.2 安装注意点
【1】编译找不到openssl/ssl.h
【解决方法】——安装openssl
sudo apt-get install libssl-dev
【2】编译过程找不到ares.h
【解决方法】——修改config.mk中的WITH_SRV:=yes,改为WITH_SRV:=no
【3】使用过程中找不到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
【4】make: g++:命令未找到
【解决方法】
安装g++编译器
sudo apt-get install g++
【5】make: uuid/uuid.h :No such file or directory
【解决方法】
安装
sudo apt-get install uuid-dev
1.3 执行过程中出现的问题
这是因为有些人的机子是root权限。 普通用户就不会出现。解决方法如下,然后每次启动加载配置文件
# mosquitto -c /etc/mosquitto/mosquitto.conf
【解决方法】
有两种,选其中之一即可
方法1. 修改配置文件:mosquitto.conf ,增加登录的用户,例如当前登录用户为root
方法2. 增加登陆用户
命令行执行 adduser mosquitto
测试方法一:
在 本例中,发布者、代理和订阅者均为localhsot,但是在实际的情况下三种并不是同一个设备,在mosquitto中可通过-h(--host)设置 主机名称(hostname)。为了实现这个简单的测试案例,需要在linux中打开三个控制台,分别代表代理服务器、发布者和订阅者。
图1 示例
2.1 启动代理服务
mosquitto -v
【-v】打印更多的调试信息
2.2 订阅主题
mosquitto_sub -v -t sensor
【-t】指定主题,此处为sensor
【-v】打印更多的调试信息
2.3 发布内容
mosquitto_pub -t sensor -m 12
【-t】指定主题
【-m】指定消息内容
2.4 运行结果
当发布者推送消息之后,订阅者获得以下内容
测试方法二:
开服务
#mosquitto -v
打开一个终端
#mosquitto_sub -h 192.168.1.110(虚拟机IP) -t test
在打开一个终端
#mosquitto_pub -t test -m "hello MQTT"
第一个终端会收到消息
测试成功!
友情提醒:测试的时候不要忘记调整系统的最大连接数和栈大小,比如:Linux上可用ulimit -n20000 -s512命令设置你需要的系统参数。
-------------------------------------------------------------分隔线-------------------------------------------------------------------------------------------------------------
mosquitto 的客户lib是非常不错的,不过我尝试改了makefile,移植了uuic,openssl,还是交叉编译不过, 如果有人交叉编译成功 共享下方法,想把服务器移到板上。
我现在用的是paho开源项目,这个基本大部份客户端都在这里。
-------------------------------------------------------------分隔线-------------------------------------------------------------------------------------------------------------
2. paho client
paho开源项目,这里面几乎想要的客户端都在这,而且开源,好用。
http://www.eclipse.org/paho/
下面主要介绍paho c client的安装
ubuntu pc机安装
1. 安装这个很简单(Ubuntu下)
下载源码,paho c client (注意,是C client for Windows/Unix/Mac)
a. make
b. make install
1. 介绍库区别
The Paho C client comprises four shared libraries:
API doc : http://www.eclipse.org/paho/files/mqttdoc/Cclient/index.html
* libpaho-mqtt3a.so - asynchronous
* libpaho-mqtt3as.so - asynchronous with SSL
* libpaho-mqtt3c.so - "classic" / synchronous
* libpaho-mqtt3cs.so - "classic" / synchronous with SSL
1. 例子
github 上有个简单的同步测试例程 hello world
交叉编译:
paho c client 交叉编译安装 生成lib
这个比较麻烦,需要一个交叉编译好的openssl(参考我的文章), 然后还要修改makefile,由于编译生成四个库,见上面库区别介绍。 只有异步带SSL和同步带SSL的库要用的,所以只要编译这两个相关指定相应头文件和库文件的路径。
修改makefile
因为我交叉编译好的路径openssl放在/opt/arm/里
顶部在.PHONY:下增加两行
INCLUDES = -I/opt/arm/ar-openssl/iclude
LIBSDIR = -L/opt/arm/ar-openssl/lib
180,186,202和214行, $(CC) 后加$(INCLUDES ),最尾加 $(LIBSDIR)
# make CC=arm-linux-gcc
这样,就生成了交叉编译的库,只要自己的程序交叉编译,并指定这个库,就可以在开发板上运行了,测试过的。
3. Qt mqtt client
MQTT for Qt client
源码:https://github.com/emqtt/qmqtt
介绍:http://emqtt.io/
方法一下子想不起来,看说明,简单的说就是生成QMQTT库文件,在自己程序的.pro 加入指定库文件,指定头文件,就行
交叉编译到arm开发板 -------> 还没去弄,参照前面,应该不难, 主要注意的是,QMQTT建议Qt版本是5.2以上。
4. 单片机MQTT client
参考本坛网友: http://www.amobbs.com/forum.php? ... &highlight=MQTT
最近开始弄STM32+FreeRTOS + LWIP的移植,现在就差LWIP了。 先把小型中转路由实现。
5.其它 client,以后研究,有经验的朋友分享下,让我少走点弯路。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|