搜索
bottom↓
回复: 25

MQTT IBM物联网Broker和client

  [复制链接]

出0入0汤圆

发表于 2016-2-4 13:09:04 | 显示全部楼层 |阅读模式
本帖最后由 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

阿莫论坛20周年了!感谢大家的支持与爱护!!

阿莫论坛才是最爱国的,关心国家的经济、社会的发展、担心国家被别国牵连卷入战争、知道珍惜来之不易的和平发展,知道师夷之长,关注世界的先进文化与技术,也探讨中国文化的博大精深,也懂得警惕民粹主义的祸国殃民等等等等,无不是爱国忧民的表现。(坛友:tianxian)

出0入0汤圆

发表于 2016-2-4 13:36:19 | 显示全部楼层
mqtt不错

出0入0汤圆

发表于 2016-2-4 13:38:55 | 显示全部楼层
年后也准备搞搞。话说要搞的东西真不少,不知道来不来得及。

把MQTT V3.1搞成了PDF,方便阅读和记录

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2016-2-4 13:39:10 | 显示全部楼层
mark, IBM的物联网协议. 感谢LZ分享

出0入0汤圆

发表于 2016-2-4 14:05:13 | 显示全部楼层
年后来玩

出20入0汤圆

发表于 2016-2-4 14:30:27 | 显示全部楼层
谢谢分享。

出0入0汤圆

发表于 2016-2-4 15:28:02 | 显示全部楼层
谢谢分享  收藏!

出0入0汤圆

发表于 2016-2-4 23:38:13 | 显示全部楼层
TI的Zstack让人痛不欲生

出0入0汤圆

发表于 2016-2-4 23:48:24 | 显示全部楼层
good,一直在说服自己一定要看MQTT,但是一直忙别的事情,年后看

出0入0汤圆

发表于 2016-2-5 07:15:05 | 显示全部楼层
谢谢分享!

出0入0汤圆

发表于 2016-2-5 09:30:10 | 显示全部楼层
技术储备,收藏了。

出0入50汤圆

发表于 2016-2-6 09:35:08 | 显示全部楼层
好东西,谢谢楼主分享

出0入0汤圆

发表于 2016-2-7 07:18:38 | 显示全部楼层
谢谢楼主,有空看看.

出0入0汤圆

发表于 2016-2-7 23:46:50 | 显示全部楼层
好东西,谢谢楼主分享

出0入0汤圆

发表于 2016-2-8 08:30:44 来自手机 | 显示全部楼层
单片机上面的mqtt client 我记得我也弄过

出0入0汤圆

发表于 2016-2-8 09:21:08 | 显示全部楼层
无线大数据物联网协议MQTT;
MARK!

出0入0汤圆

发表于 2016-2-8 16:54:30 | 显示全部楼层
mark。 云

出0入0汤圆

发表于 2016-2-9 00:39:54 | 显示全部楼层
不错,好好看看

出0入0汤圆

发表于 2016-2-9 00:52:42 | 显示全部楼层
我倒,竟然在stm32上看到了这个协议。这是我用了几年的协议。

出0入0汤圆

发表于 2016-2-9 08:33:14 | 显示全部楼层
谢谢分享。。。学习一下。

出0入0汤圆

发表于 2016-2-9 09:32:41 | 显示全部楼层
谢谢分享!!!

出0入0汤圆

发表于 2016-2-15 11:03:48 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2016-2-19 22:26:16 | 显示全部楼层
太感谢了

出0入0汤圆

发表于 2016-7-2 18:50:33 | 显示全部楼层
谢谢楼主无私分享资料!!!

出0入0汤圆

发表于 2016-8-24 15:43:28 | 显示全部楼层
给力,最近在学习MQTT
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-17 03:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表