2022年8月23日 星期二

使用 Google 助理控製家電

 

介紹

谷歌助手是基於 AI(人工智能)的語音命令服務。使用語音,我們可以與穀歌助手進行交互,它可以在互聯網上搜索、安排事件、設置警報、控制設備等。

此服務可在智能手機和 Google Home 設備上使用。

我們可以使用 Google 助理控制智能家居設備,包括燈、開關、風扇和恆溫器。

 使用 Google Assistant 實現家庭自動化

我們將構建一個可以控製家用電器的應用程序。在這裡,我們將使用 Google Assistant 服務控制一個 60W 的燈泡。

此應用程序包括 Google 助手以及 Adafruit 服務器和 IFTTT 服務。

使用的硬件

  • NodeMCU – 帶有 Wi-Fi SoC 的 32 位 ESP8266 開發板。
  •  繼電器模塊
  • 一個 100 W 燈泡

為了構建一個家庭自動化應用程序,我使用了三個不同的平台

  • 谷歌助理
  • 阿達果
  • IFTTT

要使用上述服務,我們需要對其進行配置。

阿達果

首先,在www.Adafruit.io創建一個帳戶

 

現在,在 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並選擇它。

IFTTT 谷歌助手小程序

 

​​​​​​​​現在,輸入我們將用作谷歌助手命令的語音短語

 

我們可以根據我們的應用程序輸入任何短語。如您所見,在上述字段中輸入的短語是為了讓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

沒有留言: