对在智能家居系统中使用哪种技术感到困惑

物联网 智能家居 树莓派
2021-06-16 02:23:03

在我的大学项目(智能家居系统)中有一个功能,如果有人敲门,图像必须显示在监视器上(在浏览器中)。我正在使用 Arduino 实现敲门传感器 (Piezo),该传感器必须以某种方式向 Raspberry Pi 发送命令以拍摄照片,然后将照片发送到另一台计算机的浏览器。还有其他几个类似的模块。一切都连接到同一个 WiFi 网络。

现在我希望可以使用 PHP 和 MySQL 以及几个不断运行的 Ajax 请求以某种方式使其工作,但这可能不是一种非常巧妙的方法。我听说过 node.js 和 web sockets,但我不确定我有时间学习它。(如果绝对必要,我可以)

无论如何,谁能告诉我实现这种系统的正确方法是什么?这真的很有帮助。

1个回答

推送与投票

您提议的频繁发送 AJAX 请求的解决方案听起来很像轮询- 您每隔一段时间发送一个请求以检查状态是否已更改。当压电传感器检测到更改时更改送到服务器会更有意义

这是这之间的区别:

服务员:门口有人吗? 传感器:没有
服务员:门口有人吗? 传感器:没有
服务员:门口有人吗? 传感器:没有
……无休止地重复……

还有这个:

传感器:门口有人!

第一个例子是轮询,第二个例子是推送。您可以判断哪一个将具有更低的功耗、更少的复杂代码和更少的网络使用。

HTTP 还是其他什么?

AJAX 请求是通过 HTTP 发送的,因此它非常重要,并且每个连接需要多次TCP 握手 (除非您使用Keep-Alive)。

可能值得考虑替代协议,例如MQTT(问题“何时以及为什么使用 MQTT 协议? ”中有一些很好的解释,该问题与您的问题非常相似)。

在当前情况下,像 MQTT 这样的消息代理可能比您真正需要的更强大一点,但是如果您选择向智能家居网络添加更多设备,则可以轻松扩展一个 MQTT 代理,而您当前的 AJAX 请求系统将很快分崩离析。想象一下四五个不同的设备相互轮询;它会很快导致您的网络过载,并且会大量消耗电力。

节点和网络套接字

使用 web sockets 和 Node 可以解决使用push而不是poll 的问题,所以在我看来这将是一个好主意。但是,我怀疑如果您真的不想学习 Node.js,轮询会起作用。

如果您想要一个在您扩展智能家居时使用的可扩展解决方案,那么一定要推动——它会省去很多麻烦和眼泪。如果您只想快速验证概念,轮询可能会奏效。

我个人的建议是,您应该学习 Web 套接字或使用 MQTT 之类的消息代理进行调查。您可以使用像Mosquitto-PHP(带有HiveMQ指南这样的客户端库来简化在 PHP 中使用 MQTT,或者只使用 Node 和 Web 套接字。我怀疑 Node 和 web sockets 的学习资源会更好,但 MQTT 往往更受智能家居/物联网环境的青睐。