基于Arduino的亞馬遜Alexa控制家庭自動(dòng)化
在之前的教程中,我們使用NodeMCU構(gòu)建了一個(gè)Alexa控制的家庭自動(dòng)化系統(tǒng)。它很容易構(gòu)建和實(shí)現(xiàn)。但有時(shí)我們需要更多的引腳來控制更多的設(shè)備,在這種情況下,我們可以使用一些具有更多GPIO引腳的微控制器與ESP8266板。在這里,我們將使用Arduino Uno和ESP8266來構(gòu)建基于物聯(lián)網(wǎng)的家庭自動(dòng)化系統(tǒng)。
因此,在本教程中,我們將學(xué)習(xí)如何使用亞馬遜Echo Dot揚(yáng)聲器通過語音命令控制家用電器。這并不是說我們懶得用開關(guān)來切換負(fù)載,而是在物聯(lián)網(wǎng)時(shí)代,一切都變得“智能”,我們也應(yīng)該建立一個(gè)智能家庭自動(dòng)化系統(tǒng)?;谖锫?lián)網(wǎng)的家庭自動(dòng)化現(xiàn)在非常流行,我們以前使用不同的控制器(如樹莓派,ESP8266, Arduino等)完成了許多物聯(lián)網(wǎng)家庭自動(dòng)化項(xiàng)目。
所需的材料
1. Arduino Uno
2. 亞馬遜Alexa點(diǎn)揚(yáng)聲器
3. ESP8266-01
4. 跳線
5. 面包板或零PCB
在之前的教程中已經(jīng)解釋過,使用Alexa控制家用電器的方法有很多種,最流行的方法是使用第三方服務(wù),如ThingSpeak, IFTTT和Webhooks。但是這些方法需要在每個(gè)平臺(tái)上進(jìn)行配置,這使得任務(wù)不那么繁瑣和耗時(shí)。此外,編碼部分需要一些計(jì)算來獲取字符并解碼它們。為了在這個(gè)方法中調(diào)用Alexa需要一些額外的短語,比如打開燈泡,我們不得不說“Alexa, Alexa觸發(fā)打開燈泡”。正如你所看到的,我們必須在每次調(diào)用時(shí)說“Alexa觸發(fā)”,這聽起來很奇怪。因此,由于這么多的復(fù)雜性,我們將使用我們之前的方法,即使用fauxmoESP庫(kù)。
FauxmoESP庫(kù)僅適用于ESP板,不支持Arduino板。現(xiàn)在,如何在Arduino中實(shí)現(xiàn)它呢?別擔(dān)心,我們有實(shí)現(xiàn)這個(gè)的方法。在這里,我們不會(huì)在AT模式下使用ESP8266模塊,而是在編程模式下使用它。因此,我們將在此模塊中上傳fauxmoESP代碼,并在從Alexa接收到的狀態(tài)(0或1)發(fā)生變化時(shí)使用串行通信發(fā)送不同的字符。這些字符將在Arduino板上接收,就像Arduino板與Arduino接口時(shí)接收藍(lán)牙模塊的數(shù)據(jù)一樣。
安裝物聯(lián)網(wǎng)Alexa家庭自動(dòng)化庫(kù)
由于我們將在ESP上創(chuàng)建多個(gè)虛擬連接環(huán)境,因此我們需要安裝fauxmoESP以及異步TCP庫(kù)。
1. 對(duì)于ESP8266,從這個(gè)鏈接下載異步TCP庫(kù),對(duì)于ESP32,從這個(gè)鏈接下載它。
2. 然后從這個(gè)鏈接下載fauxmoESP庫(kù)。
3. 現(xiàn)在,在Arduino目錄的libraries文件夾中解壓縮這些文件,該目錄可以在Documents文件夾中找到。另外,將這些文件夾重命名為oseperez-fauxmoesp-50cbcf3087f至xoseperez_fauxmoesp,將espasynccp -master重命名為ESPAsyncTCP。
4. 在fauxmoESP中有一個(gè)用于控制設(shè)備的示例代碼,我們必須修改這個(gè)示例。打開Arduino IDE并進(jìn)入Examples -> FauxmoESp -> fauxmoESP_Basic。
在開始編碼部分之前,請(qǐng)確保已經(jīng)安裝了ESP板文件。如果你沒有板文件,然后按照我們之前的教程開始使用Arduino IDE的ESP。
代碼及工作說明
在這里我們分別解釋了ESP8266和Arduino的代碼,以了解該項(xiàng)目的工作原理。
ESP8266編程部分
這部分將與我們?cè)谝郧暗慕坛讨兴龅谋3窒嗤?。但是這里有一些修改,因?yàn)檫@里的數(shù)據(jù)將通過串行通信發(fā)送到Arduino。
首先,我們包含了ESP板和fauxmoESP的重要頭文件。
然后定義波特率115200和wi - fi ssid和Password。另外,為fauxmoESP創(chuàng)建一個(gè)實(shí)例fauxmomo,以便我們可以在代碼中使用它。
為Wi-Fi設(shè)置一個(gè)單獨(dú)的函數(shù),以便它可以在void setup函數(shù)中調(diào)用。將WiFi模式設(shè)置為站模式,并在WiFi.begin()函數(shù)中傳遞SSID和Password。等待連接建立。另外,請(qǐng)注意不要使用Serial。print或println()是不必要的,因?yàn)樗鼤?huì)將這些數(shù)據(jù)發(fā)送給Arduino。所以,避免使用它。
在void setup()函數(shù)中,將波特率傳遞給serial。Begin函數(shù)并調(diào)用wifissetup函數(shù)。
現(xiàn)在,fauxmoESP必須創(chuàng)建自己的web服務(wù)器,為此我們?cè)赾reateserver函數(shù)中傳遞true并將端口號(hào)設(shè)置為80。如果你在啟用功能中設(shè)置false,那么它將阻止設(shè)備被發(fā)現(xiàn)和切換。
使用fauxmo.addDevice()函數(shù)添加設(shè)備。參數(shù)將是您的設(shè)備的名稱,您將使用它來要求Alexa打開/關(guān)閉它。
現(xiàn)在,創(chuàng)建一個(gè)函數(shù)來處理從Alexa接收到的命令。在這個(gè)函數(shù)中,我們將比較字符串與設(shè)備名稱,如果匹配,則使用Serial向Arduino發(fā)送一個(gè)字符。打印或串行寫入。
同樣,對(duì)第二個(gè)設(shè)備進(jìn)行相同的操作,但這次向Arduino發(fā)送不同的字符。
在void loop()函數(shù)中,只需使用fauxmo檢查來自Alexa服務(wù)器的傳入數(shù)據(jù)包。handle函數(shù),它將使用onSetstate()函數(shù)執(zhí)行操作。
ESP8266的完整代碼在本教程的末尾給出。使用FTDI模塊或Arduino Uno板對(duì)ESP8266-01進(jìn)行編程。我們將使用Arduino板進(jìn)行編程。在Arduino板上上傳一個(gè)空白草圖或BareMinimum示例代碼,并按照下面的電路圖進(jìn)行連接。在這里了解更多關(guān)于使用FTDI模塊編程ESP8266的信息。
Arduino編程部分
Arduino代碼Alexa家庭自動(dòng)化是非常簡(jiǎn)單的。您必須使用Serial.available()函數(shù)檢查傳入的數(shù)據(jù),當(dāng)該數(shù)據(jù)與if語句中給定的條件匹配時(shí),然后觸發(fā)中繼。
線路圖
首先,使用Arduino板對(duì)ESP8266進(jìn)行編程,進(jìn)行以下連接,選擇“board”為Generic ESP8266,并選擇正確的端口號(hào)。最后,點(diǎn)擊上傳按鈕。
模塊編程完成后,只需從Arduino中移除Rx Tx線并上傳Arduino部分代碼。
然后再做一次連接,但要做一點(diǎn)改動(dòng)。
連接ESP8266的Rx -> Arduino的Tx
連接ESP8266的Tx -> Arduino的Rx
從GND上取下Esp8266的GPIO 0。
除上述更改外,所有連接保持不變。
現(xiàn)在,我們已經(jīng)完成了編碼和硬件部分。是時(shí)候測(cè)試我們的家庭自動(dòng)化系統(tǒng)了。另外,請(qǐng)注意,ESP8266和Amazon echo dot的Wi-Fi網(wǎng)絡(luò)應(yīng)該保持一致,即它們必須共享相同的Wi-Fi。
測(cè)試基于Arduino的Alexa家庭自動(dòng)化系統(tǒng)
現(xiàn)在,試著說Alexa,發(fā)現(xiàn)設(shè)備。Alexa會(huì)回復(fù)說開始發(fā)現(xiàn),我找到了兩個(gè)設(shè)備,試著說“Alexa,打開臥室燈”。
或者,你可以在Alexa應(yīng)用程序中發(fā)現(xiàn)這些設(shè)備。點(diǎn)擊+號(hào),然后發(fā)現(xiàn)設(shè)備。你應(yīng)該看到兩個(gè)裝置,即臥室燈和電視。
現(xiàn)在我們準(zhǔn)備測(cè)試我們的物聯(lián)網(wǎng)Alexa家庭自動(dòng)化系統(tǒng)。所以只要試著說Alexa,打開臥室燈,繼電器應(yīng)該就會(huì)打開。
現(xiàn)在說Alexa,關(guān)掉臥室燈,繼電器一個(gè)要關(guān)掉。試著命令開/關(guān)電視。
您可以在串行監(jiān)視器中看到設(shè)備的響應(yīng)和狀態(tài)。
還需要注意的是,fauxmoESP庫(kù)存在一些bug,目前還處于改進(jìn)階段。所以,有時(shí)Alexa無法發(fā)現(xiàn)設(shè)備。
這就是如何使用Arduino制作基于Alexa的物聯(lián)網(wǎng)控制的家庭自動(dòng)化系統(tǒng)。
本文編譯自iotdesignpro