没有以太网的mqtt串行消息

hew*_*ewi 7 arduino mqtt

无论我在哪里看,如果涉及到MQTT消息传递,它都是以太网.不幸的是,我没有以太网线.

我正在自动化我的家,想要使用mqtt作为消息服务.我的按钮给运行mqtt客户端的arduino板发出一个信号(比如'on'灯).如何在串行线路上输出mqtt消息,这样传输的消息可以直接由mqtt代理接收,而不使用以太网电缆?

Lie*_*ven 5

由于我一直在寻找相同的答案并且没有找到我喜欢的任何东西,因此我决定编写一个实现,使任何蓝牙、USB 或纯串行端​​口通信都能够发送 MQTT 消息。您可以在此处找到结果:https : //github.com/vortex314/serial2mqtt 它使任何 linux 机器(Raspberry Pi 1、Raspi 3、PC)都可以充当网关。它是用 C++ 编写的,因此对于小型设备来说应该足够轻量级。希望这可以帮助。

27/6 更​​新:构建文件夹包含 Linux Intel 和 Raspberry 的预构建版本。


njh*_*njh 4

我正在尝试为我的家庭自动化实现类似的目标,尽管我的墙上确实有 Cat5e,所以可以使用以太网。

以下是通过串行通信使用 MQTT 的一些可能性:

  • 在 Arduino 和网关之间使用 SLIP。通过串行实现 TCP/IP 的 SerialIP 客户端库: http: //playground.arduino.cc/Code/SerialIP。虽然我还没有测试这是否适用于 MQTT 客户端库。Nick O'Leary 的 MQTT 客户端理论上可以与 Arduino“客户端”类的任何实现一起使用。
  • 可能可以直接通过串行实现 MQTT,无需 TCP/IP,尽管我不知道有任何网关可以执行此操作。
  • MQTT-SN(与 MQTT 略有不同的协议)设计用于通过不可靠的传输发送消息,并且可能更适合串行线路。如果您对仅发布感兴趣,我编写了一个非常基本的库来通过串行发送 MQTT-SN 数据包: https: //github.com/njh/DangerMinusOne
  • 您可以在 Linux 网关上使用 Node-RED 之类的东西,与 Arduino 进行其他串行协议(Firmata?)对话,然后使用 Node-RED 转换为 MQTT。

我确实开始研究通过串行实现的 MQTT,但我没有解决的问题之一是如何处理多个设备:

  • 向 Linux 添加大量串行端口很复杂/昂贵(大概是https://twitter.com/njh/status/570298977310150656
  • 长距离可靠串行需要额外的 RS-485 组件
  • MQTT 在半双工上不能很好地工作,因为没有额外的软件层来处理主轮询从属消息

所以我目前正在考虑为 ENC28j60 以太网控制器实现 MQTT-SN...