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

从服务器接收命令后,必须相应地触发继电器并将状态更新回服务器。我通过不同的方法阅读了很多教程。 MQTT看起来不错,但我不想使用像Adafruit这样的任何第三方经纪人。我想在nodemcu或Web主机上托管Web服务器。可悲的是我没有Raspberry Pi。

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

评论

要使用MQTT,您需要一个代理,而esp8266不能充当代理。您需要“更大”的东西

您可以在PC /笔记本电脑上托管MQTT代理,尽管运行0/24可能会增加电费。

@hardillb->更大的东西本身意味着树莓派吗?或Arduino Mega也可以用于相同目的

它意味着一台真正的计算机,所以不是一个Arduino Mega,一个Pi Zero就足够了

@BenceKaulics->我可以使用我的虚拟主机,而不是一生都在打开笔记本电脑。我有一个共享的虚拟主机。

#1 楼

从技术上讲,是的,ESP8266可以充当MQTT代理。实际上,已经有人尝试过!在他们的项目结束时,他们声称拥有一个可以通过Web界面和相当长的正常运行时间连接到云MQTT代理的代理。他们在评论中说他们的代码是专有的,因此您将无法完全使用他们的代码,但如果您确实想使用ESP8266,它确实可以作为概念证明。

但是,使用ESP8266作为代理可能会付出很多努力。根据MatsK的建议,使用Pi会容易得多,尽管Raspberry Pi的单位要贵一些(5英镑到25英镑+邮费,具体取决于您选择的型号),但您可以节省很多时间。有了Pi,您可以只使用Mosquitto之类的既有经纪人。在ESP8266上,Mosquitto几乎不可能运行,您可能必须编写自己的代理或使用可靠性差得多的代理。

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

评论


我建议使用“ Node-red”图形Web界面,您可以在其中创建自动化逻辑。

– MatsK
17年9月17日在9:46

@Aurora-感谢您对如此深入的解释。它使我的思路更加清晰。我知道Pi对于独立服务器是必需的。但是如果我想把这个东西带到云端。是否需要使用第三方物联网服务?我可以使用我的虚拟主机吗?如果不是太难。我只有14岁。所以,我没有太多的技术知识。

–罗希特·马图尔(Rohit Mathur)
17年9月17日在11:56

@RohitMathur是的,您可以使用自己的Web主机,具体取决于您拥有的Web主机的类型-如果是VPS或专用服务器,是的。如果它只是仅用于网页的传统网络托管,则不会。如果您共享使用的主机,我可以尝试为您指明正确的方向。另外,请务必阅读当有人回答我的问题时该怎么办?因此,您可以奖励所获得的任何有用答案。

–Aurora0001♦
17/09/17在11:58



我有一个共享主机。就目前而言,我认为我必须与Pi妥协。 VPS成本很高。作为客户端可以将多少个节点连接到Pi?像ESP8266一样最多可以管理4个客户端。我的项目不能为n。节点。一些连接到继电器,一些带有传感器。

–罗希特·马图尔(Rohit Mathur)
17年9月17日在12:05

@RohitMathur我不知道确切的数字,但是我可以想象一个Pi每秒可以处理数百条消息,尤其是Pi 3,它非常强大。几乎可以肯定,用例不会达到Pi的功能极限。

–Aurora0001♦
17年9月17日在12:09

#2 楼

我的建议是在Raspberry Pi上使用蚊子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

评论


是的,我想我需要购买Pi。这篇文章真的很有帮助。您可以为我的项目分享更多的教程吗?一旦获得Pi,我将通过它们。

–罗希特·马图尔(Rohit Mathur)
17年9月17日在11:50

Rui Santos有很多不错的教程,例如:randomnerdtutorials.com/…还有更多,他的书《家庭自动化》值得推荐。

– MatsK
17年9月17日在11:57

我一直在关注一个教程。 randomnerdtutorials.com/…。 Raspberry Pi绝对正常。但我相信esp8266没有收到消息。所以我无法控制连接esp8266的继电器。

–罗希特·马图尔(Rohit Mathur)
17年9月23日在2:53

#3 楼

由于ESP8266的资源有限,除了建议使用Raspberry Pi的答案和评论外,通常还可以使用ESP32的非官方继承者ESP32。由于采用双核+ 3倍以上的RAM,它解决了WiFi连接问题,当用户程序增大时,WiFi连接问题也随之增加。比RaspberryPi的价格要便宜(至少直到价格下降到零为止)。其他答案应该涵盖在软件方面。

#4 楼

除了其他出色的答案外,使用ESP8266作为MQTT代理也不理想,原因很简单,因为它缺乏系统性能以实现最高速度。 Github上的某人正在尝试类似的壮举,并被告知:


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


我也回答其他很棒的答案:让自己的Raspberry Pi或其他廉价计算机充当您的经纪人。 ESP只会缺少性能良好的规格。

评论


是。现在非常清楚,我将需要一个Pi来完成此项目

–罗希特·马图尔(Rohit Mathur)
17年9月17日在11:57

这主要是扩展问题-直到节点数量增加,它才真正出现。从一开始就存在的问题是,必须重新编写软件(很可能是从头开始),才能以最少的资源来创建代理功能。

–克里斯·斯特拉顿(Chris Stratton)
17年9月17日在14:19

这么大的MCU就足够了,但是不会比低端SBC便宜吗?

– Sean Houlihane
17年9月17日在15:22

#5 楼

有一个不错的且功能齐全的arduino兼容库,带有一个运行在ESP8266上的小型MQTT-broker:

评论


这个应该是一个选择的答案)

– Podarok
19年6月28日在14:55

#6 楼

您可以将ESP8266用作MQTT代理。它支持20个设备,websockets和到提供MQTT websockets和SSL的云MQTT实例的桥接。

三分钟之内,您就可以拥有一个功能全面的MQTT代理。查看iotcentral.eu平台。注册帐户,就可以了。

评论


感谢Dan的建议。但是现在我正在使用Raspberry Pi作为MQTT代理。但是现在问题出在esp8266。有时它连接到Wifi,但有时只说“正在连接.....”,点一直亮着。我尝试使用外部电源也无法正常工作。知道怎么做吗?

–罗希特·马图尔(Rohit Mathur)
17-10-16在8:36

@RohitMathur:检查过您的wifi接收吗?

–woodz
20年9月9日在9:07