没有以太网的mqtt串行消息

时间:2016-06-04 23:43:09

标签: arduino mqtt

我认为,无论是MQTT消息传递,它都是以太网。不幸的是,我没有以太网线。

我正在自动化我的家,想要使用mqtt作为消息服务。我的按钮给运行mqtt客户端的arduino板提供了一个信号(如灯光和#39;)。如何在串行线路上输出mqtt消息,以便mqtt代理可以直接获取传输的消息,而无需使用以太网电缆?

3 个答案:

答案 0 :(得分:3)

我正在尝试为自己的家庭自动化实现类似的目标,虽然我的墙壁上有Cat5e,因此可以使用以太网。

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

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

我确实开始在串行实现上查看MQTT,但我没有解决的问题之一是如何处理多个设备:

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

对于SLIP,还有向后兼容的SlipMux,它可以轻松支持MQTT数据包类型。另见:sending packets over serial comms java

您可以构建一个简单的代理,在一侧将MQTT数据包转换为SlipMux数据包,并在另一端解码数据包。 MQTT实现不应该注意任何事情。