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