使用ESP8266 NodeMCU的Facebook控制家庭自動化
Facebook是使用最廣泛的社交媒體應用程序之一,它不僅用于社交網(wǎng)絡,還用于消息傳遞,視頻通話,語音通話,市場等。Facebook的這些功能在構建任何基于物聯(lián)網(wǎng)的項目時都非常有用。就像在這里,我們將使用Facebook來遠程控制家里的設備。你只需要給聊天機器人發(fā)一條短信,它就可以從世界任何地方控制你家里的燈。我們將使用ESP8266 NodeMCU硬件和一些在線應用程序來構建這個項目。
我們之前使用不同的微控制器構建了一些基于物聯(lián)網(wǎng)的家庭自動化項目:
?物聯(lián)網(wǎng)家庭自動化使用Blynk應用程序使用ESP32
?家庭自動化與麻省理工學院應用發(fā)明人和ESP8266
?基于物聯(lián)網(wǎng)的家用電器控制與Adafruit IO和樹莓派
?用ARTIK云和樹莓派控制家用電器
?基于ESP32和Adafruit IO的谷歌助手家電控制
在進入細節(jié)之前,我們先了解一下這個項目所涉及的事情。
ESP8266 NodeMCU
ESP8266 NodeMCU是一個開源的物聯(lián)網(wǎng)平臺。它包括運行在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的發(fā)布和訂閱協(xié)議,專為輕量級機器對機器與物聯(lián)網(wǎng)設備的交互而設計。這些設備充當客戶機,與稱為代理的服務器通信。代理是一個服務器,它允許客戶端向代理發(fā)送短消息,并在客戶端訂閱特定主題時接收消息。它充當服務器,處理連接到該服務器的設備的所有信息??蛻魴C可以同時是信息的發(fā)布者(從設備向服務器發(fā)送數(shù)據(jù))或訂閱者(從服務器向設備獲取數(shù)據(jù))。
Facebook Messenger
Facebook Messenger是一款由Facebook開發(fā)的即時通訊應用和平臺。人們通常用它來發(fā)短信,分享照片/視頻,甚至進行語音或視頻通話。可以在個人之間或群組中進行常規(guī)聊天和語音/視頻聊天。
Chatfuel
Chatfuel是為Facebook創(chuàng)建AI聊天機器人的領先機器人平臺。人們可以創(chuàng)建人工智能聊天機器人,用于遠程觸發(fā)任何事件。你在messenger上的簡單文本可以為你的項目添加AI功能。
IFTTT
IFTTT代表如果這個比那個。這是一個免費的基于web的服務,允許連接到web服務,應用程序和設備,如b谷歌,F(xiàn)acebook, Adafruit, Webhooks, Telegram等來自動執(zhí)行任務。applet使用觸發(fā)器和操作幫助組合兩個服務。它只是意味著,如果在一個web服務中觸發(fā)了某些操作,那么將在其他web服務中發(fā)生操作。
Adafruit IO
Adafruit IO是Adafruit Industries的服務器。它是一個使用HTTP和MQTT協(xié)議與物聯(lián)網(wǎng)設備交互的平臺,有助于存儲和查看數(shù)據(jù),也有助于控制設備。
Facebook控制家用電器的工作
在這個項目中,我們將控制一個家電,如使用Facebook messenger的燈。在信使上輸入某些關鍵字,你就可以控制你家里的設備。消息將被發(fā)送到一個聊天機器人,它將觸發(fā)Chatfuel中各自的AI塊。該塊鏈接到一些JSON API,該API將向IFTTT發(fā)送POST請求。IFTTT將幫助連接Webhooks和Adafruit,在Webhooks的幫助下將數(shù)據(jù)發(fā)送和存儲到Adafruit。Webhooks將創(chuàng)建一個事件,該事件將具有唯一的觸發(fā)鍵來觸發(fā)事件。發(fā)送到Adafruit的數(shù)據(jù)將觸發(fā)儀表板中的切換按鈕。Adafruit作為NodeMCU的服務器,并將數(shù)據(jù)發(fā)送給它,從而在MQTT的幫助下激活或停用燈。
線路圖
組件的要求
?ESP8266 NodeMCU
?USB數(shù)據(jù)線
?跳線
?LED
?繼電器
?帶燈座的燈或燈泡
?交流電源
Adafruit IO控制家用電器的設置
打開,點擊免費開始。輸入詳細信息并創(chuàng)建一個新帳戶。在此之后,您將被重定向到Adafruit IO主頁。點擊左上角的Feeds。現(xiàn)在在Feeds頁面中,單擊Action按鈕,然后單擊Create a New Feed,并為提要命名。這里我們將它命名為“OnOff”名稱到我的Feed。
創(chuàng)建Feed之后,單擊左側的Dashboards?,F(xiàn)在在儀表板中單擊Actions,然后選擇Create a New Dashboard?,F(xiàn)在給你的儀表盤命名,點擊創(chuàng)建,這里我給我的儀表盤命名為“家庭自動化”。
然后單擊新創(chuàng)建的儀表板。在你的儀表板頁面,你必須創(chuàng)建一個新的塊開/關切換按鈕。點擊儀表板頁面中的加號按鈕創(chuàng)建一個新塊,然后選擇第一個“切換按鈕”。
接下來,您將被要求為這個按鈕選擇提要,因為這個按鈕將幫助我們提供數(shù)據(jù)。勾選Feed的復選框(這里我的Feed是OnOff),然后點擊Next Step。
現(xiàn)在給切換按鈕ON和OFF的名稱,然后點擊Create Block?,F(xiàn)在,一個切換按鈕將在你的儀表板上創(chuàng)建,這將幫助我們發(fā)送數(shù)據(jù)到我們的飼料。
設置IFTTT觸發(fā)水果切換按鈕
步驟1:-進入并登錄Facebook或谷歌。登錄后,點擊頂部的“我的小程序”,然后點擊“新小程序”。
步驟2::-然后點擊“+ this”,在“選擇服務”部分搜索Webhooks。
步驟3:-現(xiàn)在點擊接收web請求
步驟4:-鍵入任何事件名稱(在我的情況下為“自動化”),然后單擊觸發(fā)器(在我的情況下為“自動化”)。
步驟5:-在下一頁點擊“+ that”,在紅色框中提到。搜索Adafruit并提供登錄憑據(jù)。
步驟6:-點擊發(fā)送數(shù)據(jù)到Adafruit IO。選擇之前在Adafruit IO設置部分創(chuàng)建的Feed名稱。通過單擊Data中的add ingredient來選擇value1,然后單擊Create Action,然后單擊Finish。
步驟7:-現(xiàn)在轉到Webhooks設置并在記事本中復制URL。這個URL包含混合字符的Webhooks鍵,這將有助于將Chatfuel連接到IFTTT。
安裝Chatfuel與Facebook
步驟1::-去并點擊登錄與您的Facebook Id。成功登錄后,它將引導您到儀表板頁面。點擊從模板創(chuàng)建,然后點擊我的第一個機器人。然后將My First Bot連接到一個可以創(chuàng)建的facebook頁面。
步驟2:-創(chuàng)建一個任意名稱的頁面(在我的情況下是“家庭自動化”),并將其連接到您的新機器人。連接后,您將被引導到您的機器人頁面與歡迎信息。您可以根據(jù)自己的意愿編輯此歡迎辭。
步驟3:-現(xiàn)在創(chuàng)建兩個新塊(這里是Relay ON和Relay OFF)。然后單擊Relay on,從Add Element中選擇Text。編寫要在用戶調(diào)用繼電器on塊時顯示的文本。對Relay OFF塊做同樣的操作。
步驟4:-單擊左側的設置AI,單擊添加AI規(guī)則,單擊默認組。在bot replies with部分中選擇RELAY ON?,F(xiàn)在添加文本,如果用戶說類似的部分。這些文本將有助于觸發(fā)積木。對繼電器關閉按鈕做同樣的操作。
步驟5:-現(xiàn)在我們必須為RELAY ON和RELAY OFF塊添加JSON API,以將chatfuel與IFTTT鏈接起來。您可以通過點擊test your BOT來測試您的聊天框,歡迎文本將發(fā)送到您的信使帳戶。
與IFTTT聊天
步驟1:-現(xiàn)在我們必須為RELAY ON和RELAY OFF按鈕制作兩個url。轉到Chatfuel,選擇Relay ON,然后在添加元素中單擊+號,然后從Chatfuel插件中選擇JSON API。
步驟2:-設置類型為POST,從下面復制URL1,并根據(jù)您的IFTTT帳戶更改事件名稱和密鑰,或者您可以直接從您的IFTTT帳戶獲取URL。對RELAY OFF塊做同樣的操作。
繼電器ON塊:
繼電器關閉塊:
步驟3:這是在RELAY ON和RELAY OFF的JSON API部分復制的兩個url。此URL包含事件名稱和Webhooks觸發(fā)鍵。“Automation”是我們在Webhooks中創(chuàng)建的事件名稱,“jE8LXKI6XocT7u8gX7qwKocf3DAN57MZIXtLmfVbBiG”是觸發(fā)鍵。Value1=1表示繼電器ON, Value1=0表示繼電器OFF塊。
步驟4:-現(xiàn)在Chatfuel已經(jīng)準備好并連接到IFTTT。
步驟5:-按照電路圖進行連接,并將代碼上傳到NodeMCU。等待一段時間,直到它連接到Wi-Fi和MQTT代理。在Chatfuel中點擊“測試你的機器人”,這將引導你進入你的信使網(wǎng)站,在那里你可以通過輸入“打開中繼”或“關閉中繼”來測試你的機器人。你會得到一個回復在信使與值的切換按鈕在實時更改在您的Adafruit儀表板。您還可以看到led以及燈或燈泡的狀態(tài)變化與繼電器的發(fā)癢聲。
代碼的解釋
這個基于ESP8266的Facebook家庭自動化的完整代碼在最后給出了一個演示視頻。但在開始編寫代碼之前,首先我們需要Adafruit的“Adafruit_MQTT.h”庫,用于將NodeMCU與Adafruit IO服務器進行MQTT連接。我們可以直接從Arduino IDE下載這個庫。打開Adruino IDE,進入Sketch -> Include Library -> Manage Libraries。在庫管理器中搜索adafruit_mqtt。安裝紅色框中選擇的最新版本。
安裝此庫附帶了許多內(nèi)置示例。對于這個家庭自動化項目,我們將使用mqtt_esp8266示例。進入文件->示例-> Adrafruit MQTT庫-> mqtt_esp8266。現(xiàn)在我們將編輯mqtt_esp8266中給出的代碼。
現(xiàn)在首先包含所有必需的庫。
將代碼中給出的SSID和密碼替換為Wi-Fi SSID和密碼。
為了將我們的客戶端ESP8266連接到Adafruit服務器,我們需要Adafruit服務器鏈接,Adafruit服務器端口,Adafruit用戶名和Adafruit密鑰。AIO SERVER為“io.adafruit.com”,SSL使用的端口為8883。在Adafruit的安裝部分,我已經(jīng)提到了獲取Adafruit用戶名和密鑰的過程。所有這些變量都傳遞給Adafruit_MQTT_Client mqtt函數(shù),該函數(shù)有助于建立mqtt連接。將Adafruit_MQTT_Subscribe函數(shù)中給出的提要名稱更改為Adafruit中的提要名稱。
在void setup()函數(shù)中,將NodeMCU的D1引腳設置為繼電器的輸出數(shù)據(jù)引腳。串口顯示器顯示數(shù)據(jù)的波特率設置為115200。通過在WiFi.begin()函數(shù)中傳遞Wi-Fi憑據(jù)建立Wi-Fi連接,連接成功后在串口監(jiān)視器上打印IP地址。MQTT訂閱設置為開關提要。
在void loop()中,MQTT_connect()確保MQTT連接保持活動狀態(tài),并在斷開連接時自動連接。while等待傳入的訂閱包,當它接收到任何數(shù)據(jù)字符串響應時,它將響應轉換為1或0,并檢查if-else語句。如果接收到的數(shù)據(jù)是1,那么我們將D1引腳設置為高,否則將其設置為低。
下面是MQTT連接的功能:
最后,將任何家用電器與D1端口的繼電器模塊連接起來,并在NodeMCU中上傳下面給出的代碼。NodeMCU與Wi-Fi連接后,您可以通過在Arduino IO中切換儀表板上的按鈕來打開和關閉家用電器。
本文編譯自iotdesignpro