MQTT 是一种专为物联网 (IoT) 设备通信而设计的消息传输协议。 它广泛应用于许多领域,例如银行、石油和天然气、制造业等。
MQTT 协议有很多优点,部分如下所示:
- 它是一种轻量级的二进制协议,通常在 TCP/IP 协议之上运行。
- 它专为网络不可靠的场景设计,是户外安装的理想选择。
- 它遵循发布/订阅模式,简化客户端逻辑。
我们将在设置中演示 MQTT 的一些优势。
MQTT Broker
MQTT 的一个重要特征是它简化了客户端逻辑,这对于嵌入式设备至关重要。 这是通过发布/订阅模式实现的:在 MQTT 中,没有“服务器”的概念。 相反,所有参与实体都是连接到所谓 broker 的客户端。 客户端订阅主题,向它们发布消息,broker 进行路由(以及许多其他事情)。
一个好的用于生产的 broker,如 EMQ X,通常不仅提供 MQTT 路由功能,还提供许多其他有趣的功能,例如
- 其他类型的连接方法,如 WebSockets;
- 不同的认证和授权模式;
- 将数据流传输到数据库;
- 基于消息特征的自定义路由规则。
传感器设置
为简单起见,我们的设备将由一个普通的 Mix 应用程序表示:它可以轻松转换为 Nerves 应用程序。
首先,我们创建一个 Mix 项目:
mix new --sup weather_sensor
cd weather_sensor
为了与 MQTT broker 交互,我们需要一个 MQTT 客户端。 我们采用 emqtt。 将其添加到 mix.exs 作为依赖项:
defp deps do
[
{:emqtt, github: "emqx/emqtt", tag: "1.4.4", system_env: [{"BUILD_WITHOUT_QUIC", "1"}]}
]
end