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