在这个项目中,我使用 ESP8266-01 通过 MQTT 协议使用互联网触发警报到所需目的地(连接到 NodeMCU 的蜂鸣器)。只要 ESP8266 都可以通过 WiFi 访问互联网,就可以从任何远程位置操作警报按钮。单个按钮执行以下功能。
1. 短时间按下按钮时(500 到 1500 毫秒之间)- 每隔短时间(alert-1)鸣响蜂鸣器触发警报。
2. 长时间按下按钮时(超过 1500 毫秒)- 通过保持蜂鸣器高电平触发警报(alert-2)。
3.当按钮刚被点击时(少于500毫秒)-禁用警报。
MQTT 是一种轻量级的消息传递协议,它使用发布/订阅操作在客户端和服务器之间交换数据。我使用了这个协议,因为它是开发“物联网”项目的理想选择,因为它速度更快、使用的数据包更少并且专为受限设备而设计。
MQTT 代理作为客户端(NodeMCU 和 ESP8266-01)之间基于感兴趣主题的信息交换媒介。我在这个项目中使用的主题是“警报”。由于 ESP8266-01 必须发送按钮的状态,它会将关于“警报”主题的数据“发布”到 MQTT 代理。在接收端,NodeMCU “订阅”了相同的主题,因此它接收到按钮状态。根据接收到的按钮状态,连接到 NodeMCU 的蜂鸣器运行。我使用了 Adafruit io 的 MQTT 代理,因为它免费且易于实现。为此,我们需要在 Adafruit io 上设置仪表板。
要创建新仪表板,我已按照adafruit io提供的步骤进行操作。
1.仪表板创建后,您将看到一个空白屏幕。要添加块,您需要单击“+”图标。
2. 选择量块。
3. 创建一个新的提要作为“警报”并选择提要。ESP8266 的草图被编程为将数据发送到同一馈送。
4. 输入仪表的最小值和最大值为“1”和“3”。值'1'是禁用警报,'2'是触发alert-1,'3'是触发alert-2。
5. 仪表最终设置完毕,您将能够在仪表板屏幕中看到它。
要向/从仪表“发布”和“订阅”数据,我们需要将草图上传到 NodeMCU 和 ESP8266-01。
ESP8266 的草图已从示例草图修改(示例-> Adafruit MOTT 库-> mqtt_esp8266)
如果您是 ESP8266 的新手,请确保在 Arduino IDE 上安装 ESP8266 板。在上传我的第一个草图之前,我已经按照此处给出的步骤进行操作。
该草图需要以下库,您可以从 Arduino IDE(工具->库管理器)本身安装这些库。
1. Adafruit IO Arduino (由 Adafruit 提供)
2. Adafruit MQTT 库(由 Adafruit 提供)
3. ArduinoHttpClient (由 arduino 提供)
在将草图上传到两个 ESP8266 模块之前,请确保在草图中输入SSID、密码、用户名、Aio 密钥。
ESP8266 通过互联网运行时,也可以为它们分配单独的 SSID 和密码。
用户名和aio 密钥可以从 adafruit 仪表板的右上角获取。在 IDE 草图中复制相同的内容。
将草图上传到 ESP8266-01 可能有点棘手。我已经使用 Arduino UNO 对 ESP8266-01 进行了编程。如下所示进行连接。
在 IDE 中选择板作为“通用 ESP8266 模块”并上传草图。我建议您在使用锂电池/锂离子电池时使用稳压器(查看此处了解更多信息)。
连接到 ESP8266-01 的 Pin-2 的 LED 提供有关按钮按下和连接到 MQTT 的状态。最初,LED 将闪烁一秒钟,表示与 MQTT 的连接成功。如果按下按钮触发警报 1(小于 500 和 1500 毫秒),则 LED 会立即闪烁,如果按下按钮以触发警报 2(大于 1.5 秒),则 LED 会一直亮起直到它转动关闭(当按钮被点击时)。
您会注意到,按下 ESP8266-01 上的按钮后,仪表板上的仪表值会发生变化,这意味着发射端通信成功。
如果仪表值发生变化,则 NodeMCU 接收到它并响起与按下的按钮相对应的蜂鸣器。NodeMCU 的内置 LED 还提供有关与 MQTT 代理连接的指示。最初,当 NodeMCU 打开时,LED 变为高电平表示它正在连接,当 LED 变为低电平时,表示与代理的连接成功。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !