我可以使用 ESP8266 作为 MQTT 代理吗?

物联网 智能家居 MQTT ESP8266
2021-06-01 02:01:04

我正在制作一个基于星型拓扑的家庭自动化项目。我想要实现的是,nodemcu/ESP8266 之一充当可供外界访问的服务器,而其他 nodemcu/ESP8266 充当连接到继电器或传感器的客户端。

从服务器收到命令后,必须相应地触发中继并将状态更新回服务器。我通过不同的方法阅读了很多教程。MQTT 看起来不错,但我不想使用任何第三方代理,如 Adafruit。我想在我的 nodemcu 或我的网络主机上托管网络服务器。可悲的是我没有树莓派。

我可以将我的 ESP8266 设备之一用作 MQTT 代理,还是有合适的替代方案?

4个回答

从技术上讲,是的,ESP8266可以充当 MQTT 代理。其实已经有人试过了他们的项目结束时,他们声称拥有一个可以桥接到云 MQTT 代理的代理,具有 Web 界面和相当长的正常运行时间。在评论中,他们说他们的代码是专有的,所以你不能完全使用他们的代码,但如果你真的想使用 ESP8266 ,它确实可以作为概念证明

然而,使用 ESP8266 作为代理可能需要很多努力正如MatsK所建议的那样使用 Pi会容易得多,尽管 Raspberry Pi 的单元要贵一些(5 到 25 英镑 + 邮费,具体取决于您选择的型号),但您会节省很多时间. 有了 Pi,你就可以使用像Mosquitto这样的成熟经纪人在一个ESP8266,有没有机会说Mosquitto会跑,你可能不得不写自己的经纪人,或使用不可靠得多之一。

或者,您可以将所有 ESP8266 直接连接到AWS IoT等云服务这简化了您的设置,但确实意味着每个请求都通过 Internet 路由,您无法在本地控制设备。如果使用这种方法您的 Internet 连接中断,您也将无法控制设备。

我的建议是在 Raspberry Pi 上使用 mosquitto MQTT 代理。

这里有一篇文章https://tech.scargill.net/a-christmas-script/,其中 Peter Scargill 制作了一个安装所有必要组件和依赖项的脚本。

看看Node-red。有了它,您可以创建逻辑来补充您的项目。

更新:

我刚刚找到了一个免费提供的 ESP8266 MQTT 代理。这个我得试试....

https://www.youtube.com/watch?v=0K9q4IuB_oA

https://github.com/martin-ger/esp_mqtt

除了由于 ESP8266 资源有限而推荐使用 Raspberry Pi 的答案和评论之外,使用 ESP32(ESP8266的非官方后继产品)通常是有意义的。由于是双核 + 3 倍 RAM,它修复了随着用户程序大小增加而增加的 WiFi 连接问题。

在价格范围内,它只比 ESP8266 贵几美元,而且比 RaspberryPi 便宜很多(至少在价格降为零之前)。其他答案应该已经涵盖了软件方面。

除了其他优秀答案已经陈述的内容之外,使用 ESP8266 作为您的 MQTT 代理不太理想,原因很简单,因为它缺乏执行速度的系统要求。 Github 上有人正在尝试类似的壮举,并被告知:

这并非不可能,但没有多大意义。代理需要一些资源,如 CPU、内存和 TCP 连接数(每个客户端一个),可能是非易失性存储(用于持久消息)、用户访问权限配置和许多其他细节。

我附和其他很好的答案:给自己一个 Raspberry Pi 或其他一些便宜的计算机来充当你的经纪人。ESP 将只是缺乏性能良好的规格。