使用ESP8266 NodeMCU的Facebook控制家庭自动化
扫描二维码
随时随地手机看文章
Facebook是使用最广泛的社交媒体应用程序之一,它不仅用于社交网络,还用于消息传递,视频通话,语音通话,市场等。Facebook的这些功能在构建任何基于物联网的项目时都非常有用。就像在这里,我们将使用Facebook来远程控制家里的设备。你只需要给聊天机器人发一条短信,它就可以从世界任何地方控制你家里的灯。我们将使用ESP8266 NodeMCU硬件和一些在线应用程序来构建这个项目。
我们之前使用不同的微控制器构建了一些基于物联网的家庭自动化项目:
•物联网家庭自动化使用Blynk应用程序使用ESP32
•家庭自动化与麻省理工学院应用发明人和ESP8266
•基于物联网的家用电器控制与Adafruit IO和树莓派
•用ARTIK云和树莓派控制家用电器
•基于ESP32和Adafruit IO的谷歌助手家电控制
在进入细节之前,我们先了解一下这个项目所涉及的事情。
ESP8266 NodeMCU
ESP8266 NodeMCU是一个开源的物联网平台。它包括运行在expressif Systems低成本支持Wi-Fi的ESP8266 Wi-Fi SoC上的固件,以及基于ESP-12模块的硬件。它具有GPIO, SPI, I2C, ADC, PWM和UART引脚,用于通信和控制附加到它的其他外设。板载NodeMCU具有提供USB到TTL功能的CP2102 IC。
MQTT
MQTT表示消息查询遥测传输。MQTT是一种基于TCP/IP的发布和订阅协议,专为轻量级机器对机器与物联网设备的交互而设计。这些设备充当客户机,与称为代理的服务器通信。代理是一个服务器,它允许客户端向代理发送短消息,并在客户端订阅特定主题时接收消息。它充当服务器,处理连接到该服务器的设备的所有信息。客户机可以同时是信息的发布者(从设备向服务器发送数据)或订阅者(从服务器向设备获取数据)。
Facebook Messenger
Facebook Messenger是一款由Facebook开发的即时通讯应用和平台。人们通常用它来发短信,分享照片/视频,甚至进行语音或视频通话。可以在个人之间或群组中进行常规聊天和语音/视频聊天。
Chatfuel
Chatfuel是为Facebook创建AI聊天机器人的领先机器人平台。人们可以创建人工智能聊天机器人,用于远程触发任何事件。你在messenger上的简单文本可以为你的项目添加AI功能。
IFTTT
IFTTT代表如果这个比那个。这是一个免费的基于web的服务,允许连接到web服务,应用程序和设备,如b谷歌,Facebook, Adafruit, Webhooks, Telegram等来自动执行任务。applet使用触发器和操作帮助组合两个服务。它只是意味着,如果在一个web服务中触发了某些操作,那么将在其他web服务中发生操作。
Adafruit IO
Adafruit IO是Adafruit Industries的服务器。它是一个使用HTTP和MQTT协议与物联网设备交互的平台,有助于存储和查看数据,也有助于控制设备。
Facebook控制家用电器的工作
在这个项目中,我们将控制一个家电,如使用Facebook messenger的灯。在信使上输入某些关键字,你就可以控制你家里的设备。消息将被发送到一个聊天机器人,它将触发Chatfuel中各自的AI块。该块链接到一些JSON API,该API将向IFTTT发送POST请求。IFTTT将帮助连接Webhooks和Adafruit,在Webhooks的帮助下将数据发送和存储到Adafruit。Webhooks将创建一个事件,该事件将具有唯一的触发键来触发事件。发送到Adafruit的数据将触发仪表板中的切换按钮。Adafruit作为NodeMCU的服务器,并将数据发送给它,从而在MQTT的帮助下激活或停用灯。
线路图
组件的要求
•ESP8266 NodeMCU
•USB数据线
•跳线
•LED
•继电器
•带灯座的灯或灯泡
•交流电源
Adafruit IO控制家用电器的设置
打开,点击免费开始。输入详细信息并创建一个新帐户。在此之后,您将被重定向到Adafruit IO主页。点击左上角的Feeds。现在在Feeds页面中,单击Action按钮,然后单击Create a New Feed,并为提要命名。这里我们将它命名为“OnOff”名称到我的Feed。
创建Feed之后,单击左侧的Dashboards。现在在仪表板中单击Actions,然后选择Create a New Dashboard。现在给你的仪表盘命名,点击创建,这里我给我的仪表盘命名为“家庭自动化”。
然后单击新创建的仪表板。在你的仪表板页面,你必须创建一个新的块开/关切换按钮。点击仪表板页面中的加号按钮创建一个新块,然后选择第一个“切换按钮”。
接下来,您将被要求为这个按钮选择提要,因为这个按钮将帮助我们提供数据。勾选Feed的复选框(这里我的Feed是OnOff),然后点击Next Step。
现在给切换按钮ON和OFF的名称,然后点击Create Block。现在,一个切换按钮将在你的仪表板上创建,这将帮助我们发送数据到我们的饲料。
设置IFTTT触发水果切换按钮
步骤1:-进入并登录Facebook或谷歌。登录后,点击顶部的“我的小程序”,然后点击“新小程序”。
步骤2::-然后点击“+ this”,在“选择服务”部分搜索Webhooks。
步骤3:-现在点击接收web请求
步骤4:-键入任何事件名称(在我的情况下为“自动化”),然后单击触发器(在我的情况下为“自动化”)。
步骤5:-在下一页点击“+ that”,在红色框中提到。搜索Adafruit并提供登录凭据。
步骤6:-点击发送数据到Adafruit IO。选择之前在Adafruit IO设置部分创建的Feed名称。通过单击Data中的add ingredient来选择value1,然后单击Create Action,然后单击Finish。
步骤7:-现在转到Webhooks设置并在记事本中复制URL。这个URL包含混合字符的Webhooks键,这将有助于将Chatfuel连接到IFTTT。
安装Chatfuel与Facebook
步骤1::-去并点击登录与您的Facebook Id。成功登录后,它将引导您到仪表板页面。点击从模板创建,然后点击我的第一个机器人。然后将My First Bot连接到一个可以创建的facebook页面。
步骤2:-创建一个任意名称的页面(在我的情况下是“家庭自动化”),并将其连接到您的新机器人。连接后,您将被引导到您的机器人页面与欢迎信息。您可以根据自己的意愿编辑此欢迎辞。
步骤3:-现在创建两个新块(这里是Relay ON和Relay OFF)。然后单击Relay on,从Add Element中选择Text。编写要在用户调用继电器on块时显示的文本。对Relay OFF块做同样的操作。
步骤4:-单击左侧的设置AI,单击添加AI规则,单击默认组。在bot replies with部分中选择RELAY ON。现在添加文本,如果用户说类似的部分。这些文本将有助于触发积木。对继电器关闭按钮做同样的操作。
步骤5:-现在我们必须为RELAY ON和RELAY OFF块添加JSON API,以将chatfuel与IFTTT链接起来。您可以通过点击test your BOT来测试您的聊天框,欢迎文本将发送到您的信使帐户。
与IFTTT聊天
步骤1:-现在我们必须为RELAY ON和RELAY OFF按钮制作两个url。转到Chatfuel,选择Relay ON,然后在添加元素中单击+号,然后从Chatfuel插件中选择JSON API。
步骤2:-设置类型为POST,从下面复制URL1,并根据您的IFTTT帐户更改事件名称和密钥,或者您可以直接从您的IFTTT帐户获取URL。对RELAY OFF块做同样的操作。
继电器ON块:
继电器关闭块:
步骤3:这是在RELAY ON和RELAY OFF的JSON API部分复制的两个url。此URL包含事件名称和Webhooks触发键。“Automation”是我们在Webhooks中创建的事件名称,“jE8LXKI6XocT7u8gX7qwKocf3DAN57MZIXtLmfVbBiG”是触发键。Value1=1表示继电器ON, Value1=0表示继电器OFF块。
步骤4:-现在Chatfuel已经准备好并连接到IFTTT。
步骤5:-按照电路图进行连接,并将代码上传到NodeMCU。等待一段时间,直到它连接到Wi-Fi和MQTT代理。在Chatfuel中点击“测试你的机器人”,这将引导你进入你的信使网站,在那里你可以通过输入“打开中继”或“关闭中继”来测试你的机器人。你会得到一个回复在信使与值的切换按钮在实时更改在您的Adafruit仪表板。您还可以看到led以及灯或灯泡的状态变化与继电器的发痒声。
代码的解释
这个基于ESP8266的Facebook家庭自动化的完整代码在最后给出了一个演示视频。但在开始编写代码之前,首先我们需要Adafruit的“Adafruit_MQTT.h”库,用于将NodeMCU与Adafruit IO服务器进行MQTT连接。我们可以直接从Arduino IDE下载这个库。打开Adruino IDE,进入Sketch -> Include Library -> Manage Libraries。在库管理器中搜索adafruit_mqtt。安装红色框中选择的最新版本。
安装此库附带了许多内置示例。对于这个家庭自动化项目,我们将使用mqtt_esp8266示例。进入文件->示例-> Adrafruit MQTT库-> mqtt_esp8266。现在我们将编辑mqtt_esp8266中给出的代码。
现在首先包含所有必需的库。
将代码中给出的SSID和密码替换为Wi-Fi SSID和密码。
为了将我们的客户端ESP8266连接到Adafruit服务器,我们需要Adafruit服务器链接,Adafruit服务器端口,Adafruit用户名和Adafruit密钥。AIO SERVER为“io.adafruit.com”,SSL使用的端口为8883。在Adafruit的安装部分,我已经提到了获取Adafruit用户名和密钥的过程。所有这些变量都传递给Adafruit_MQTT_Client mqtt函数,该函数有助于建立mqtt连接。将Adafruit_MQTT_Subscribe函数中给出的提要名称更改为Adafruit中的提要名称。
在void setup()函数中,将NodeMCU的D1引脚设置为继电器的输出数据引脚。串口显示器显示数据的波特率设置为115200。通过在WiFi.begin()函数中传递Wi-Fi凭据建立Wi-Fi连接,连接成功后在串口监视器上打印IP地址。MQTT订阅设置为开关提要。
在void loop()中,MQTT_connect()确保MQTT连接保持活动状态,并在断开连接时自动连接。while等待传入的订阅包,当它接收到任何数据字符串响应时,它将响应转换为1或0,并检查if-else语句。如果接收到的数据是1,那么我们将D1引脚设置为高,否则将其设置为低。
下面是MQTT连接的功能:
最后,将任何家用电器与D1端口的继电器模块连接起来,并在NodeMCU中上传下面给出的代码。NodeMCU与Wi-Fi连接后,您可以通过在Arduino IO中切换仪表板上的按钮来打开和关闭家用电器。
本文编译自iotdesignpro