MQTT 协议是否适合通过 BLE 传输传感器读数?

物联网 MQTT 能量消耗 蓝牙低功耗
2021-06-21 23:15:30

假设有许多弱传感器(例如,Arduino 级别的设备)依赖 BLE 作为通信手段,并且这些设备连接到更强大的网关(例如,Raspberry pi 级别的设备)。

我想知道 MQTT 是否被认为是传输读数(短而频繁的突发消息)的合适协议。

许多博客/文档认为 MQTT 适合“物联网应用程序”,因为与 HTTP 相比,它的重量更轻(更)并且可以节省电量。但是,据我所知,它需要保持连接处于打开状态,而 BLE 或其他适用于物联网的通信协议则不是这种情况。BLE 不会长时间保持连接打开以保留能量。显然,MQTT 适用于使用 WiFi 等 MAC 层协议。这几乎首先打破了使用 MQTT 背后的基本原理(即,如果设备可计算地处理诸如 WiFi 之类的协议,那么它可能不需要诸如 MQTT 之类的协议)。你觉得这个逻辑有缺陷吗?

是否有任何替代应用层协议用于此目的?这些类型的消息(例如,原始二进制数据、JSON、XML)在与网关通信和直接与服务器通信时最常见的结构是什么?

2个回答

MQTT 必须在 TCP/IP 上运行(我不记得它是否真的在规范中,或者是否做出了足够的假设来使它如此)但它的姊妹协议MQTT-SN几乎可以在任何可以传递数据的协议上运行,我已经看到了 UDP 和串行的实现。

话虽如此,我不确定通过 BLE 运行您会获得什么,BLE 的内置特性提供了许多相同的好处(如果只是在 1 对 1 的基础上),例如通知。

我认为要记住的一件重要事情是“我”在物联网中代表什么,它意味着在某个时候可以访问互联网(即使它是网关设备或电话)。在这一点上,MQTT 可能非常有用,但它并不一定意味着一直到(流血)边缘。

可以说,您最好将数据从 BLE 范式简单映射到 MQTT,而不是尝试通过 BLE 直接发送 MQTT。

BLE一般以特征的形式交换数据它们具有各种 BLE 独特的机制,用于发现您可能会发现有用的值变化。 但它们的最大数据长度为 20 字节

这是可能的过度BLE以流的串行数据,在时间移动20个字节。有时这样做是为了实现一个虚拟串行端口,您可以通过这个隧道传输完整的 MQTT。

但是您可能会更好地使用一组 BLE 特征来承载不同主题的数据,并拥有一个将特征标识映射到 MQTT 主题并将映射到 MQTT 负载的桥接器

BLE 对正在进行的连接会话与非连接会话有自己的理解。您可能应该弄清楚 BLE 的哪种用法最适合您的应用程序,然后将其映射到 MQTT 维护连接的意义。

您应该能够在任一方向或两个方向执行此操作:BLE->MQTT 和 MQTT->BLE