介紹
谷歌助手是基於 AI(人工智能)的語音命令服務。使用語音,我們可以與穀歌助手進行交互,它可以在互聯網上搜索、安排事件、設置警報、控制設備等。
此服務可在智能手機和 Google Home 設備上使用。
我們可以使用 Google 助理控制智能家居設備,包括燈、開關、風扇和恆溫器。
我們將構建一個可以控製家用電器的應用程序。在這裡,我們將使用 Google Assistant 服務控制一個 60W 的燈泡。
此應用程序包括 Google 助手以及 Adafruit 服務器和 IFTTT 服務。
使用的硬件
- NodeMCU – 帶有 Wi-Fi SoC 的 32 位 ESP8266 開發板。
- 繼電器模塊
- 一個 100 W 燈泡
為了構建一個家庭自動化應用程序,我使用了三個不同的平台
- 谷歌助理
- 阿達果
- IFTTT
要使用上述服務,我們需要對其進行配置。
阿達果
現在,在 Adafruit 創建儀表板。此儀表板是遠程控制事物的用戶界面。
完成上述步驟後,為儀表板提供名稱並保存。我們可以看到我們的儀表板如下,
現在,創建一個提要(用戶界面)來控制燈光開關。要創建它,只需單擊 “+”符號並選擇如下所示的切換提要,
選擇切換提要後,將出現一個彈出窗口,如下所示。
輸入我們的提要的名稱(顯示在紅色框中)並創建它。創建後,選擇創建的提要(這裡我的是light),然後點擊 下一步。
在下一步中配置如下所示的提要,
在這裡,我使用0 (OFF) 和1 (ON) 文本作為按鈕,然後單擊創建。這將在您的儀表板上創建一個切換按鈕,可用於遠程控制事物。
現在,我的儀表板已準備好用於家庭自動化等物聯網應用程序。
IFTTT(如果這樣然後那樣)
If This Then That,也稱為 IFTTT,是一項免費的基於 Web 的服務,用於創建稱為小程序的簡單條件語句鏈。小程序由 Gmail、Facebook、Telegram、Instagram 或 Pinterest 等其他 Web 服務中發生的更改觸發。
例如,如果用戶使用主題標籤發布推文,則小程序可以發送電子郵件消息;如果有人在照片中標記用戶,則可以將 Facebook 上的照片複製到用戶的存檔中。
在這裡,我使用 IFTTT 來使用鏈上的谷歌助手服務和 Adafruit 服務。所以,當我使用谷歌助手通過說 Ok Google 來控制我家的燈時,打開或關閉燈。然後 IFTTT 解釋該消息並將其作為可理解的命令發送到 Adafruit 的儀表板以創建的提要。
配置 IFTTT
第一步是在IFTTT上創建一個賬戶。
注意:使用與 Adafruit 相同的電子郵件 ID在 IFTTT 上創建一個帳戶。
創建帳戶後,單擊我的小程序,然後選擇如下所示的新小程序,
選擇一個新的小程序後,我們會得到一個新頁面,我們應該在其中單擊“ This ”,如下圖所示。
然後搜索Google Assistant並選擇它。
現在,輸入我們將用作谷歌助手命令的語音短語。
我們可以根據我們的應用程序輸入任何短語。如您所見,在上述字段中輸入的短語是為了讓Light ON。為了使Light OFF,我們必須創建另一個具有不同短語的小程序。
現在,我們得到另一個頁面,我們必須在該頁面上單擊用於連接 Google Assistant 和 Adafruit 的選項。
然後搜索Adafruit並選擇它。
選擇Adafruit後,如下圖選擇action,
現在輸入我們需要將哪些數據發送到 Adafruit 儀表板的哪個提要。
單擊創建操作。
因此,當我在手機上使用 Google Assistant 並發出語音命令“Ok Google,打開 LED”時,在 IFTTT 中創建的小程序會收到此命令並將數據“1”發送到 Adafruit 提要。這將觸發由微控制器(此處為 NodeMCU)持續監控的 Adafruit 儀表板上的事件。該微控制器將根據 Adafruit 儀表板上的數據變化採取行動。
接口圖
圖書館
在這裡,我使用 Adafruit MQTT 庫從 Adafruit 服務器接收數據。要安裝此庫,請選擇選項Sketch -> Include Library -> Manage Libraries。
在那個庫中,搜索 Adafruit MQTT 並安裝它。
使用 Google Assistant 和 NodeMCU 控製家中的燈光
我構建了一個基於物聯網的家庭自動化應用程序,在該應用程序中,我使用基於 AI 的 Google Assistant 遠程控制 100 W 燈泡。
在這裡,我使用 NodeMCU 從 Adafruit 服務器讀取數據並採取相應措施。100 W 燈泡通過繼電器連接到 NodeMCU,用於使用谷歌助手控制其語音命令。
程序
#include <ESP8266WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
#define Relay1 D1
#define WLAN_SSID "Enter SSID NAME" // Your SSID
#define WLAN_PASS "SSID Password" // Your password
/************************* Adafruit.io Setup *********************************/
#define AIO_SERVER "io.adafruit.com"
#define AIO_SERVERPORT 1883 // use 8883 for SSL
#define AIO_USERNAME "Enter your UserName" // Replace it with your username
#define AIO_KEY "Enter you AIO_KEY" // Replace with your Project Auth Key
/************ Global State (you don't need to change this!) ******************/
// Create an ESP8266 WiFiClient class to connect to the MQTT server.
WiFiClient client;
// or... use WiFiFlientSecure for SSL
//WiFiClientSecure client;
// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
/****************************** Feeds ***************************************/
// Setup a feed called 'onoff' for subscribing to changes.
Adafruit_MQTT_Subscribe Light1 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME"/feeds/Enter your Feed Name"); // FeedName
void MQTT_connect();
void setup() {
Serial.begin(115200);
pinMode(Relay1, OUTPUT);
// Connect to WiFi access point.
Serial.println(); Serial.println();
Serial.print("Connecting to ");
Serial.println(WLAN_SSID);
WiFi.begin(WLAN_SSID, WLAN_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// Setup MQTT subscription for onoff feed.
mqtt.subscribe(&Light1);
}
void loop() {
MQTT_connect();
Adafruit_MQTT_Subscribe *subscription;
while ((subscription = mqtt.readSubscription(5000))) {
if (subscription == &Light1) {
Serial.print(F("Got: "));
Serial.println((char *)Light1.lastread);
int Light1_State = atoi((char *)Light1.lastread);
digitalWrite(Relay1, !(Light1_State));
}
}
}
void MQTT_connect() {
int8_t ret;
// Stop if already connected.
if (mqtt.connected()) {
return;
}
Serial.print("Connecting to MQTT... ");
uint8_t retries = 3;
while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
Serial.println(mqtt.connectErrorString(ret));
Serial.println("Retrying MQTT connection in 5 seconds...");
mqtt.disconnect();
delay(5000); // wait 5 seconds
retries--;
if (retries == 0) {
// basically die and wait for WDT to reset me
while (1);
}
}
Serial.println("MQTT Connected!");
}
資料來源:https://www.electronicwings.com/nodemcu/control-home-appliances-using-google-assistant
沒有留言:
張貼留言