以MQTT接入设备优缺点分析

/ 0评 / 2

这个标题想了很久,也不知道该如何开始,以MQTT方式接入,是目前大多数IOT Hub,比如阿里云/腾讯云/AWS都是这种方法,由于前段时间在公司里搞些东西,所以,也就接触到这些云平台,也有一些传统的设备(还不如说是玩具...),走的依然是局域网连接.

MQTT接入下的优缺点.

  1. 不一定要有路由器,但是一定要接入网络,而且必须能访问公网,对设备的开销其实并不大,主要是MQTT认证过程麻烦一些,后续操作不麻烦,我已经在ESP8266和A9模块(GPRS)上都实践过了,很多空闲资源,相较于局域网接入,需要路由器或者蓝牙,需要做上复杂的配对操作,在接入难度上降低了很多,成本两者差不多.
  2. 公网接入带来了延迟,人眼在100ms以上的延迟就能感受得到,我开启一个腾讯云广州节点(我的地理位置是深圳),节点延迟大约5~8ms,我自己的访问API延迟大约10ms,API函数执行大约需要50ms.这样情况下,基本感觉不到延迟,但是,实际操作可能更差,比如使用蜂窝网络传输,这样手机控制的延迟就会感觉非常之大.相对于局域网控制而言,因为设备就在局域网,或者蓝牙对等关系,这样的传输速度是有保证的.
  3. MQTT本身有QOS控制能力,但是一般平台只做了QOS0(最多一次)/QOS1(至少一次)的选项,而QOS2(保证一次)则大多数平台没提供,所以,使用MQTT下发指令,是有发送质量保证的,而局域网传输,需要自己额外做QOS保证,这点来说,MQTT算是给你做好了工具,直接用的感觉了.
  4. 消息推送策略是MQTT的异步IO实现比较重要的功能,这样可以(几乎)不占资源,实现消息推送,而常规局域网/蓝牙等方式,需要使用诸如select函数等异步操作I/O,这同时也增加了一些开发风险.

目前来说,大多数MQTT平台,都没有直接说支持嵌入式平台,但是既然大家都是提供HAL接口的,那么移植到嵌入式平台又能有多难呢?特别是如果嵌入式平台刚好用的是LWIP这种,提供socket编程接口的,更是简单!

如下图,就两个库,一个是平台无关,一个是平台相关,显然,平台无关库是我们不需要关心的.

而像腾讯云说的,至少4MB的SRAM,也只是危言耸听,反正我在ESP8266都移植过去了,另外腾讯云/阿里云的SDK都像极了AWS SDK,也可以去借鉴一下.

另外,附赠移植文档:https://cloud.tencent.com/document/product/634/12515

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注