像 Amazon Echo 或 Google home 這樣的智能揚(yáng)聲器現(xiàn)在越來越流行,它們都能夠集成自定義技能或動(dòng)作來控制使用這些智能揚(yáng)聲器的任何設(shè)備。
如今,家庭自動(dòng)化已經(jīng)變得非常普遍,人們正在使用物聯(lián)網(wǎng)來自動(dòng)化他們家中的一切。在本教程中,我們將使用真正的 Amazon Echo dot 揚(yáng)聲器并創(chuàng)建自定義技能來使用 Amazon Echo dot 揚(yáng)聲器來控制電燈、風(fēng)扇、電視、插座等交流家用電器。在這里,我們將使用 Arduino UNO 和 ESP8266-01 Wi-Fi 模塊將 Echo dot 揚(yáng)聲器與 AC 設(shè)備連接起來。在本教程之后,您將能夠通過Alexa控制任何設(shè)備。
使用的硬件組件:
Arduino UNO
ESP-01 模塊
亞馬遜 Alexa 回聲點(diǎn)
CP2102 USB-TTL 轉(zhuǎn)換器
面包板
5V繼電器模塊
交流電器
跳線
使用 CP2102 USB-TTL 轉(zhuǎn)換器對(duì) ESP-01 模塊進(jìn)行編程:
這里 ESP-01 使用 CP2102 USB-TTL 轉(zhuǎn)換器進(jìn)行編程;它也可以使用 Arduino UNO 板進(jìn)行編程。在我的例子中,我使用了 CP2102 模塊,執(zhí)行此操作的步驟如下所述。
ESP-01 模塊
ESP8266 ESP-01 是一款在物聯(lián)網(wǎng)應(yīng)用設(shè)計(jì)中非常流行的 Wi-Fi 模塊,用于讓 Arduino UNO 等微控制器連接互聯(lián)網(wǎng)。該模塊是一個(gè)獨(dú)立的片上系統(tǒng) (SOC),可以像小型計(jì)算機(jī)一樣工作。它帶有預(yù)裝的 AT 固件,因此我們可以使用 Arduino IDE 對(duì)其進(jìn)行編程。您可以通過以下鏈接了解有關(guān) ESP-01 Wi-Fi 收發(fā)器及其使用 Arduino IDE 編程的更多信息。
引腳說明:
GND: ESP-01 的接地參考引腳
TXD:用作 UART 發(fā)送器引腳
RXD:用作 UART 接收器引腳
RESET:用于復(fù)位模塊,低電平有效。
CH_PD:芯片使能管腳,高電平有效。
GPIO0:此引腳有兩個(gè)用途。一個(gè)是通用輸入/輸出,另一個(gè)是啟用 ESP-01 的編程模式
GPIO2:這是一個(gè)通用輸入/輸出引腳。
ESP-01 與 CP2102 模塊的連接:
下圖為CP2102 USB-TTL 轉(zhuǎn)換器的引腳圖。按照下表將 ESP-01 模塊與 CP2102 USB-TTL 轉(zhuǎn)換器模塊連接。
成功完成上述連接后,電路應(yīng)如下所示:
然后將CP2102模塊連接到我們的PC進(jìn)行編程。在將代碼上傳到 ESP-01 之前,首先檢查通信端口。為此,請(qǐng)轉(zhuǎn)到開始-》 并搜索設(shè)備管理器。然后單擊 COM 和端口。在這個(gè)選項(xiàng)下,我們應(yīng)該得到一個(gè)帶有 USB-TTL 轉(zhuǎn)換器名稱的 COM 端口,如“ Silicon labs CP21xx USB-UART Bridge ”,如下圖所示:
成功完成上述步驟后,打開 Arduino IDE 并從Tools菜單中選擇板為“ Generic ESP8266 Module ”,并選擇我們?cè)谏弦浑A段獲得的 COM 端口。
用于 Alexa 家庭自動(dòng)化的 ESP-01 模塊的編程
完整的代碼在這個(gè)項(xiàng)目的最后給出。這是要上傳到 ESP-01 模塊的代碼的逐步說明。第一步是包含所有必要的庫。您可以從此處的鏈接下載“fauxmoESP.h”庫。
?
#include#include #include “fauxmoESP.h”
?
在這一步中,我們必須定義將 ESP-01 連接到互聯(lián)網(wǎng)所需的所有憑據(jù)。在程序中更新您的網(wǎng)絡(luò) SSID 和密碼數(shù)據(jù)。
?
#define SSID "*******" #define pass "*******"
?
接下來定義我們需要從 Alexa 控制的設(shè)備的名稱。就我而言,我將我的設(shè)備名稱命名為“臥室燈”、“臥室風(fēng)扇”和“智能插座” 。
?
#define device1 "臥室燈" #define device2 "臥室風(fēng)扇" #define device3 "智能插座"
?
函數(shù)WiFi.mode用于將 ESP-01 模塊設(shè)置為 Station 模式,函數(shù)WiFi.begin用于將 ESP-01 模塊連接到互聯(lián)網(wǎng),它以網(wǎng)絡(luò)的 SSID 和密碼為參數(shù)。
?
WiFi.mode(WIFI_STA); WiFi.begin(ssid,pass);
?
下一部分是初始化?Fauxmo類的所有功能,例如創(chuàng)建服務(wù)器、啟用 Alexa 設(shè)備的端口號(hào)、啟用設(shè)備等。然后使用我們之前創(chuàng)建的fauxmo.addDevice添加所有設(shè)備。
?
fauxmo.createServer(true); fauxmo.setPort(80); fauxmo.enable(true); fauxmo.addDevice(device1); fauxmo.addDevice(device2); fauxmo.addDevice(device3);
?
接下來,編寫一個(gè)函數(shù)來將我們的語音命令與預(yù)定義的設(shè)備名稱進(jìn)行比較。如果命令匹配,則使用Serial.print 向 Arduino 串行終端發(fā)送一個(gè)字符。
?
fauxmo.onSetState([](unsigned char device_id, const char * device_name, bool state, unsigned char value) { if (strcmp(device_name, device1) == 0) { 如果(狀態(tài)) 序列號(hào).print("1"); 別的 序列號(hào).print("2"); } }
?
在void loop()函數(shù)中,fauxmo.handle函數(shù)將只檢查來自 Alexa 的傳入數(shù)據(jù),并將使用onSetstate()函數(shù)執(zhí)行操作。
?
無效循環(huán)() { fauxmo.handle(); }
?
現(xiàn)在將最后給出的完整代碼上傳到ESP-01模塊并確保上傳成功。
Arduino代碼:?
之后,是時(shí)候在 Arduino 中上傳代碼了。Arduino 的代碼非常簡單。它僅通過其 UART 端子接收從 ESP-01 模塊發(fā)送的字符,并對(duì)其進(jìn)行比較以向 Relay 發(fā)送打開/關(guān)閉信號(hào)。Arduino的完整程序如下所示:
?
字符數(shù)據(jù); 無效設(shè)置() { 序列號(hào).開始(115200); pinMode(7,輸出); pinMode(6,輸出); pinMode(5,輸出); 數(shù)字寫入(7,低); 數(shù)字寫入(6,低); 數(shù)字寫入(5,低); } 無效循環(huán)() { 如果(串行。可用()> 0) { 數(shù)據(jù) = Serial.read(); 串行打印(數(shù)據(jù)); 序列號(hào).print("\n"); 如果(數(shù)據(jù) == '1') 數(shù)字寫入(7,高); 否則如果(數(shù)據(jù) == '2') 數(shù)字寫入(7,低); 否則如果(數(shù)據(jù) == '3') 數(shù)字寫入(6,高); 否則如果(數(shù)據(jù) == '4') 數(shù)字寫入(6,低); 否則如果(數(shù)據(jù) == '5') 數(shù)字寫入(5,高); 否則如果(數(shù)據(jù) == '6') 數(shù)字寫入(5,低); } ?
?
}碼到Arduino,接下來根據(jù)下面給出的原理圖連接硬件。
電路原理圖
使用 Alexa 的家庭自動(dòng)化電路圖如下所示:
在這里,我們將所有組件焊接在 Perfboard 上,使其充當(dāng)Arduino 盾牌。
同樣,我們還在 Perfboard 上構(gòu)建了一個(gè)繼電器模塊:
為家庭自動(dòng)化設(shè)置 Amazon Alexa 應(yīng)用程序
成功完成硬件設(shè)置和編碼后,現(xiàn)在是時(shí)候設(shè)置 Alexa Android 應(yīng)用程序了。首先,我們需要通過這個(gè)應(yīng)用搜索附近的任何智能設(shè)備。為此,請(qǐng)打開您的 Alexa 設(shè)備,然后打開您的 Alexa 應(yīng)用程序并單擊選項(xiàng)“設(shè)備”,然后單擊要求您“添加設(shè)備”的“+”號(hào)。然后點(diǎn)擊“添加設(shè)備”,在設(shè)備類型中點(diǎn)擊“其他”,然后選擇發(fā)現(xiàn)設(shè)備。然后您的 Alexa 應(yīng)用程序應(yīng)該搜索可能需要 45 秒的設(shè)備。
注意:或者我們也可以使用語音命令“ Alexa,發(fā)現(xiàn)設(shè)備”發(fā)現(xiàn)設(shè)備
完成設(shè)備發(fā)現(xiàn)后,您應(yīng)該會(huì)按我們?cè)诖a中給出的名稱獲得 3 個(gè)新設(shè)備。就我而言,這些是臥室燈、臥室風(fēng)扇 和智能插座。現(xiàn)在設(shè)置已準(zhǔn)備好進(jìn)行測試,只需通過說“ Alexa,打開臥室燈”進(jìn)行測試,它應(yīng)該會(huì)返回您的反饋說“好的”,并且燈應(yīng)該打開。同樣,我們可以測試所有其他命令。
這是Amazon Echo dot 控制的家用電器的完整設(shè)置的外觀:
#include
#include
#include "fauxmoESP.h"
#define ssid "admin"
#define pass "12345678"
#define device1 "臥室燈"
#define device2 "臥室風(fēng)扇"
#define device3 "智能插座"
fauxmoESP fauxmo;
無效 wifi()
{
WiFi.mode(WIFI_STA);
WiFi.begin(ssid,pass);
而(WiFi.status()!= WL_CONNECTED)
{
延遲(100);
}
}
無效設(shè)置()
{
Serial.begin(115200);
無線上網(wǎng)();
fauxmo.createServer(true);
fauxmo.setPort(80);
fauxmo.enable(true);
fauxmo.addDevice(device1);
fauxmo.addDevice(device2);
fauxmo.addDevice(device3);
fauxmo.onSetState([](unsigned char device_id, const char * device_name, bool state, unsigned char value) {
Serial.printf("[MAIN](%s) state: %s\n",device_name, state ? "ON " : "OFF");
if (strcmp(device_name, device1) == 0)
{
if (state)
Serial.print("1");
else
Serial.print("2");
}
if (strcmp(device_name, device2) == 0)
{
if (state)
Serial.print("3");
else
Serial.print("4");
}
if (strcmp(device_name, device3) == 0)
{
if (state)
Serial.print("5");
否則
Serial.print("6");
}
});
}
無效循環(huán)()
{
fauxmo.handle();
}
?
評(píng)論
查看更多