NodeMCU (ESP8266) 板通过共享托管数据库控制

物联网 ESP8266
2021-06-04 11:09:54

我有一个 NodeMCU (ESP8266) 板,我想通过互联网控制它。我试图找到一个解决方案,我不必在我的路由器上设置任何配置,如端口转发。我想出了以下解决方案:

在此处输入图片说明

我有一个网站,用户可以在其中更改设备状态(状态是指例如 GPIO5 引脚值高或低),然后将其保存到共享托管服务器上的数据库中。NodeMCU 会定期(例如每 5 秒)向数据库发送一个 HTTP GET 请求。根据从数据库接收到的值,NodeMCU 板将引脚值更改为高或低。如果 NodeMCU 更改其状态(例如,引脚值从 HIGH 变为 LOW),则新设备状态将通过 HTTP POST 请求发送到数据库。设备还会定期(例如每 60 秒)发送 HTTP POST 请求,以便用户可以在网站上监控设备状态。

这个配置有几个问题:

  1. NodeMCU和用户之间没有实时连接(设备响应总是有延迟)

  2. 该设备每天向共享托管服务器发送数千个查询。例如,如果 GET 请求每 5 秒发送一次,那么一台设备每天会产生 17280 次查询。

所以我的问题是这种配置在共享主机或任何类型的主机上的实用性如何,这种配置的替代方案或改进是什么,以及如何与 NodeMCU 建立连接,以便设备仅在以下情况下向数据库发送 GET 请求用户在数据库中更改设备状态。

1个回答

不要使用 HTTP,它是这类事情的错误选择。

使用基于消息传递的协议(例如MQTT),将更新推送到设备而不是让设备轮询它们。这减少了带宽,您将获得(近乎)实时通知。

下一个问题是在哪里运行消息代理。共享托管(例如 LAMP 堆栈)通常不允许您运行代理,但对于一些小的东西,将安装移动到 AWS lightsail 之类的东西可能会更便宜(但您将负责设置/维护/安全)。