12345下一页

[资料] 【eBox生态圈】进步篇:移植超级火的MQTT物联网协议,进攻物联网!

  [复制链接]
发表于 2015-11-24 00:19:34   19550 查看 83 回复 显示全部楼层 倒序浏览
分享
这个互联网的年代,如果你不支持物联网就不要出来混啦!

科普:

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,将成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议。

MQ 遥测传输 (MQTT) 是轻量级基于代理的发布/订阅的消息传输协议,设计思想是开放、简单、轻量、易于实现。这些特点使它适用于受限环境。例如,但不仅限于此:

●网络代价昂贵,带宽低、不可靠。
●在嵌入设备中运行,处理器和内存资源有限。
该协议的特点有:
使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。
●对负载内容屏蔽的消息传输。
●使用 TCP/IP 提供网络连接。
●有三种消息发布服务质量:
    ▲“至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
    ▲“至少一次”,确保消息到达,但消息重复可能会发生。
    ▲“只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
●小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量。
●使用 Last Will和 Testament 特性通知有关各方客户端异常中断的机制。
库文件:Embedded MQTT C/C++ Client Libraries
版本:移植的是目前最新稳定版本3.1.1
下载地址:http://git.eclipse.org/c/paho/org.eclipse.paho.mqtt.embedded-c.git/refs/
在此网页的左下角有三个下载链接,文件格式不同而已,选择第一个。
移植简介:

初看MQTT库文件觉得不知道从哪里下手。第一步就是选取自己需要的文件,解压后会看到MQTTPacket文件夹,移植到新的平台,这个文件夹就够用了。MQTTClient这个文件夹下面有已经移植好的接口,是在Linux、arduino、mbed平台上运行的。没有支持eBox,说明eBox还不够火,那咱们就自己移植吧。

MQTTPacket文件夹下面有src文件夹。这个就是MQTT的核心代码,不用,也不要做任何修改。Samples文件夹下面的transport.c和.h是MQTT的基本数据传输函数。老外做的就是好,接口文件完全独立于本身的逻辑部分。transport.c这个文件就是移植的最重要部分!要实现基本的四个函数,只填充发送、接收、打开、关闭,不要对函数名称做任何修改,除了这四个函数外,用户也可以添加自己的接口,比如状态判断,需要初始化的东西。


在eBox平台下,我吧transport.c改为.cpp,这要做是为了能让他使用eBox自带的tcp协议,而不必再去基于socket实现传输函数的移植。这一步大大的简化了填充过程。上代码:

  1. #include "tcp.h"

  2. TCPCLIENT mqtt_tcp;
  3. int transport_init(int local_sock,int local_port)
  4. {
  5.     mqtt_tcp.begin(local_sock,local_port);
  6.     return 0;
  7. }int transport_sendPacketBuffer(unsigned char* buf, int buflen)
  8. {
  9.         int rc = 0;
  10.     rc = mqtt_tcp.send(buf,buflen);
  11.         return rc;
  12. }
  13. int transport_getdata(unsigned char* buf, int count)
  14. {
  15.         return mqtt_tcp.recv(buf,count);
  16. }
  17. int transport_open(char* addr, int port)
  18. {   
  19.         return mqtt_tcp.connect((unsigned char *)addr,port);   
  20. }
  21. int transport_close(int sock)
  22. {
  23.     mqtt_tcp.stop();
  24.         return 1;
  25. }
  26. int transport_connnected()
  27. {
  28.     return mqtt_tcp.is_connected();

  29. }
复制代码
不知道为什么一加注释代码就显示不全了。可以看源文件来查看详细内容


写完这几个函数就可以,看官方提供的例程了。例程在samples文件夹下面。pub0sub1.c/qos0sub.c/pub0sub1_nb.c。打开之后,直接懵了。。。。。。。这是什么代码啊。。。



沉下心来,过一遍就能理解个大概了。多过几遍就没问题了。从这几个例程中了解他的一个基本的通信过程。然后把他这些例程,移植到eBox上就行了。这里要注意的是,官方默认为你的接收函数使用阻塞式接收,而我用的是非阻塞的,要再应用层上做点循环,do ...while。先一直publish。调试协议多了,就会明白发送是一个比接收容易一百倍的事情。过了一天,调通了。。。然后移植接收,又是一天。然后就是优化,两天时间。应用层的移植过程中还需要不断的修改底层的函数bug,中间找到了不少网卡和socket的bug。所以花了比较长的时间。涉及的内容太多,就不贴出来了,看附件就行了。

到此基本上实现了mqtt的qos0模式的发布和订阅消息。实现了断线自动重连。我用了两个eBox的板子,一个发布消息,一个订阅消息,运行一个晚上,第二天依然工作。没有断线。

强势插入两个图片

发布消息,每隔一段时间会给服务器发一个ping_req告诉服务器我还活着。。


订阅消息当服务器向订阅者发布消息后,订阅者接收消息并显示。每隔一段时间会给服务器发一个ping_req告诉服务器我还活着。。。




调试工具:http://m2m.demos.ibm.com/mqttclient/#subscribe怎么是个网页呢?鄙人不会各种高大上的软件平台,就找到了网页版的客户端,然后通过他来调试自己发送的数据,接收的数据。还有一个eclipse平台的服务器m2m.eclipse.org,1883端口可以让用户调试。

移植好的文件,里面有mqtt的src文件和我自己的interface文件夹(包含了transport和应用层api)。用户把此文件夹放到eBox工程目录下的network文件夹下面。然后把代码添加到ebox工程中就可以了。


两个API的使用例程

上传一个3.1.1的协议说明,中文版

最后上传下MQTT的全部文件

重磅资料,最新的ebox固件库。。。。。。。。。。。。。。。。。。。


等众筹结束后我会将整套工程,发布出来,让用户的编程变得简单再简单!!!希望朋友多多支持!


我的众筹项目地址:http://z.elecfans.com/30.html 期待大家一起来完善和发展eBox,打造国人自己的库,不仅仅支持STM32,更能支持飞思卡尔MCU、NXP MCU······

本帖子中包含更多资源

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

x
标签:物联网 stm32 stm32 stm32 stm32

技术员

发表于 2015-11-24 09:25:10  
支持楼主,多谢分享
回复

举报

实习生

发表于 2015-11-24 09:46:59  
强烈支持啊,楼主如果能早点发货就最好了
回复

点赞 举报

发表于 2015-11-24 10:45:49    楼主|
qwert1213131 发表于 2015-11-24 09:46
强烈支持啊,楼主如果能早点发货就最好了

快了!还有十来天
回复

点赞 举报

实习生

发表于 2015-11-24 11:46:01  
谢谢楼主分享,强烈支持
回复

点赞 举报

技术员

发表于 2015-11-24 16:46:35  

谢谢楼主分享,强烈支持
回复

点赞 举报

版主

发表于 2015-11-27 17:03:36  
支持支持,棒棒的
回复

举报

发表于 2015-11-27 17:40:06    楼主|
小梅哥 发表于 2015-11-27 17:03
支持支持,棒棒的

多谢小哥支持!
回复

点赞 举报

发表于 2015-12-7 13:42:00  
好好好好好好好好好好好好好好好好好好
回复

点赞 举报

技术员

发表于 2015-12-18 20:50:28  
支持楼主。支持楼主。
回复

举报

技术员

发表于 2015-12-19 17:06:24  

像这位学习。。。。
回复

举报

实习生

发表于 2015-12-21 11:47:22  
好东西谢谢楼主
回复

举报

工程师

发表于 2015-12-25 11:28:46  
支持。加油。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
回复

举报

实习生

发表于 2015-12-25 19:39:42  
感谢楼主分享,真的是个好东西
回复

点赞 举报

实习生

发表于 2015-12-25 19:41:03  
MQTT这个移植到STM32上对我们来说真的是福音
回复

点赞 举报

助理工程师

发表于 2015-12-29 13:33:46  
嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻详详细细
回复

点赞 举报

技术员

发表于 2016-1-1 21:32:56  
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
回复

点赞 举报

技术员

发表于 2016-1-1 21:33:06  
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶的
回复

点赞 举报

技术员

发表于 2016-1-1 21:33:33  
顶顶顶顶顶顶顶顶顶顶顶顶顶顶
回复

点赞 举报

实习生

发表于 2016-1-1 23:51:37  
谢谢分享 下下来好好学习
回复

点赞 举报

12345下一页
高级模式
您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐 上一条 /8 下一条

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

推荐专区

技术干货集中营

专家问答

用户帮助┃咨询与建议┃版主议事

工程师杂谈

工程师创意

工程师职场

论坛电子赛事

社区活动专版

发烧友活动

-

嵌入式论坛

ARM技术论坛

Android论坛

Linux论坛

单片机/MCU论坛

MSP430技术论坛

FPGA|CPLD|ASIC论坛

STM32/STM8技术论坛

NXP MCU 技术论坛

PIC单片机论坛

DSP论坛

瑞萨单片机论坛

嵌入式系统论坛

-

电源技术论坛

电源技术论坛

无线充电技术

-

硬件设计论坛

PCB设计论坛

电路设计论坛

电子元器件论坛

控制|传感

总线技术|接口技术

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量技术专区

仪器仪表技术专区

-

EDA设计论坛

multisim论坛

PADS技术论坛

Protel|AD|DXP论坛

Allegro论坛

proteus论坛|仿真论坛

EasyEDA-中国人自已的EDA工具

Orcad论坛

-

综合技术与应用

电机控制

智能电网

光电及显示

参考设计中心

汽车电子技术论坛

医疗电子论坛

-

开源硬件

-

无线通信论坛

无线通信技术专区

天线|RF射频|微波|雷达技术

-

IC设计论坛

芯片测试与失效分析

Mixed Signal/SOC[数模混合芯片设计]

Analog/RF IC设计

设计与制造封装测试

-

厂商专区

TI论坛

TI Deyisupport社区

-

检测技术与质量

电磁兼容(EMC)设计与整改

安规知识论坛

检测与认证

-

消费电子论坛

手机技术论坛

平板电脑/mid论坛

音视/视频/机顶盒论坛

-

电子论坛综合区

聚丰众筹官方社区

新人报道区

聚丰供应链

-

论坛服务区

-

供求信息发布

供需广告

招聘┃求职发布区

电子展览展会专区