我正在使用多个arduino板,现在需要通过Web界面对其进行控制。

通过Web界面我想激活GPIO。

我有两个想法:


每个arduino都充当Web服务器,而我可以通过Arduino网页控制GPIO。基本上每个arduino都有一个浏览器选项卡。
使用MQTT协议与arduino板交换消息。此外,我认为将树莓派用作Web服务器和MQTT代理。每个arduino开发板都订阅了一个特定的主题,并且通过树莓派上托管的网页,我可以控制Arduino GPIO。

第一个解决方案我非常简单,非常简单。

关于第二个选项,我不知道如何通过网页发送MQTT消息。我读到我需要使用Websocket。这样对吗?我需要用Java脚本编写代码还是什么?

我的第二个问题是:MQTT代理可以同时通过Websocket同时管理MQTT和MQTT吗?否则,我还需要在Arduino上使用Websocket。

另一个选择是使用GUI构建Python脚本,该脚本允许将MQTT消息发送到Arduino。



谢谢您的帮助!

#1 楼

对我来说,您所写的全部内容似乎都很合理。

MQTT通常在TCP1上运行,但是您的浏览器不允许网页打开原始TCP套接字。有提议允许这样做,但是我怀疑它们会很快实现。因此,您的浏览器无法连接到仅支持TCP连接的MQTT代理。

如您所见,该解决方案是使用WebSocket-浏览器支持这些,因此有些JavaScript代码可用于通过网页连接到MQTT代理。 HiveMQ有一个示例可供您使用,也可以尝试使用像MQTT.js这样的库来支持与MQTT代理的WebSocket通信。

大多数代理-我所知道的所有-都赢得了胜利”不必担心客户端是WebSocket还是TCP客户端。您可以很高兴地将这两个代理都连接到一个代理上,并且可以找到有关如何在Stack Overflow2上配置Mosquitto代理的说明。如果您对JavaScript满意,那么使用它就没有问题。如果Python更简单,则可以这样做(您无需以这种方式设置WebSockets支持)。如果您不太在意UI,甚至可以使用预构建的客户端软件。


1 MQTT 3.1.1确实允许TLS或WebSocket连接。参见规范第4.2节。有一个变体MQTT-SN,它放宽了对TCP的要求。无论哪种方式,对于您的用例,您可能都不担心。

2请注意,在Windows上,Mosquitto构建未启用WebSocket支持。如果要在Windows上使用Mosquitto,则需要自己构建。或者,您可以尝试使用不以此方式限制您的其他经纪人。

评论


感谢Aurora0001的回复!我的想法是用JS代码构建一个网页,该网页将MQTT消息发送到代理(Raspberrry Pi)。我唯一关心的是TCP和Web Secket MQTT连接的共存。您如何看待Mosquitto Broker?我可以在覆盆子上安装Mosquitto Broker,然后像服务一样运行它。

–费德里科
18年6月20日在10:24



正如我所说的,TCP和WebSockets可以愉快地共存。如果您沿WebSockets路线走,那么您的Web服务器到底是什么都没关系(即使静态文件主机也可以工作),因为客户端JS才是最重要的。如果您通过Pi进行了MQTT连接,然后想要创建一个网页来控制它(即不是websocket),那么Python可能会更容易使用,因为它拥有比C多得多的Web框架。

–Aurora0001♦
18年6月20日在10:28



我的想法是使用树莓作为MQTT Broker。该网页将打开一个websocket,以发布有关特定主题的消息。最后,消息由代理服务器(在我的情况下为Raspberry)路由

–费德里科
18年6月20日在12:16