MQTT 是我的应用程序的不错选择吗?

物联网 MQTT 传感器 无线上网 阿杜伊诺
2021-06-28 12:53:59

对于大学项目,我需要一些“东西”来收集数据,然后我们才能查看和操作这些数据。

目前,每个设备都由几个传感器组成,连接到 Arduino MKR1010。当设备被带到外面远离家庭 wifi 时,arduino 可能会间歇性地失去与 wifi 的连接。

我的计划是将 MQTT 与托管在 Raspberry Pi 上的服务器一起使用,该服务器将订阅包含数据的主题。每当 arduino 重新连接到 wifi 时,它就会向 Pi 发布更新的读数。数据很可能只是整数,我们只需要每分钟左右发送一条消息(当连接到 wifi 时)。

我们没有 Web 开发或网络工程经验,所以我打算使用 node-red 创建一个网页来查看数据。我的问题是 MQTT 是否是此类应用程序的不错选择?

2个回答

MQTT 是您将传感器数据发送到中央服务器的不错选择。它重量轻且可扩展。您可以直接从 Web 界面使用数据或将其存储在数据库中。您可以使用 node-red 来创建流管道和可视化

如果应用程序需要以下内容,MQTT 是一个不错的选择:

  • 在设备之间或从设备到服务器的数据传输
  • 数据传输的可靠性
  • 扩展能力
  • 与低功耗设备的兼容性
  • 对不可靠的互联网连接很强大

听起来您的应用程序有这些要求,MQTT 将是一个足够的解决方案。

当设备被带到外面远离家庭 wifi 时,arduino 可能会间歇性地失去与 wifi 的连接。

MQTT 使用不同的数据包来完成不同的任务,例如连接到服务器。

根据文档,“如果服务器在建立网络连接后的合理时间内没有收到 CONNECT 数据包,服务器应该关闭网络连接。”

当没有连接的 ACK 确认时,不会发送任何数据。然后,通过 CONNECT 数据包,当回到 wifi 范围时,客户端也将自动重新连接到服务器。

您可以在 MQTT 中将服务质量 (QoS) 调整为三个不同的级别,以确保服务器接收到您的所有数据:

  • QoS 0“最多一次”是默认值,不保证服务器收到消息。
  • QoS 1“至少一次”继续发送消息,直到确认接收。有可能发送重复的消息
  • QoS 2“恰好一次”确保发送消息时没有重复的风险。

数据很可能只是整数

MQTT 支持的最大负载大小为 256 MB,足以支持整数传输。

我们只需要每分钟左右发送一条消息

MQTT 非常适合网络带宽非常宝贵的环境。考虑到您只发送整数并假设您一次不发送 256MB 的整数,每分钟 1 条消息的带宽非常低。

参考:https : //docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901234