溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

如何通過(guò)Siri語(yǔ)音識(shí)別獲取傳感器數(shù)據(jù)

發(fā)布時(shí)間:2021-12-30 11:21:10 來(lái)源:億速云 閱讀:229 作者:小新 欄目:互聯(lián)網(wǎng)科技

小編給大家分享一下如何通過(guò)Siri語(yǔ)音識(shí)別獲取傳感器數(shù)據(jù),相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

如何通過(guò) Siri 語(yǔ)音識(shí)別獲取傳感器數(shù)據(jù)。

如何通過(guò)Siri語(yǔ)音識(shí)別獲取傳感器數(shù)據(jù)

項(xiàng)目概述

在上一篇中,我向大家詳細(xì)展示了如何利用 Siri 控制掌控板(ESP32)和 LED 燈,這一篇是上一篇的進(jìn)階,我將繼續(xù)教大家如何用 Siri 去讀取各種傳感器的數(shù)據(jù)。

沒(méi)看過(guò)上一篇的朋友,建議先去看一下第 1 篇的內(nèi)容。

跳轉(zhuǎn)鏈接:掌控板 Siri 語(yǔ)音識(shí)別的第 1 篇:LED 燈控制

這次主控板選擇的仍然是掌控板(ESP32),當(dāng)然正如我前面篇章所說(shuō)的,你也可以選擇其他 ESP32 或者 ESP8266 系列開(kāi)發(fā)板,實(shí)現(xiàn)的方法和效果是類(lèi)似的。讀取的傳感器數(shù)據(jù)包括掌控板自帶的聲音傳感器、光線(xiàn)傳感器、以及外接的 DHT11 溫濕度傳感器,學(xué)習(xí)了本篇章之后,希望你可以學(xué)會(huì)修改相應(yīng)代碼,換成其他傳感器。

在這個(gè)項(xiàng)目中,我們同樣將掌控板 ESP32 設(shè)置為一個(gè) Web 服務(wù)器,當(dāng)用戶(hù)在網(wǎng)頁(yè)上訪(fǎng)問(wèn)這個(gè)服務(wù)器的域名地址(或 IP 地址)的時(shí)候,就會(huì)跳轉(zhuǎn)到如下界面。最終實(shí)現(xiàn)的效果是,不僅可以用 Siri 語(yǔ)音識(shí)別去獲取傳感器數(shù)據(jù),也可以直接在網(wǎng)頁(yè)端查看傳感器數(shù)據(jù)。

如何通過(guò)Siri語(yǔ)音識(shí)別獲取傳感器數(shù)據(jù)

我們可以通過(guò)點(diǎn)擊 LED 的切換開(kāi)關(guān)來(lái)控制掌控板上的 RGB LED 的亮滅,也可以訪(fǎng)問(wèn)這個(gè)切換開(kāi)關(guān)的對(duì)應(yīng)域名地址,來(lái)控制 LED 燈的亮滅。

針對(duì)傳感器,我們可以直接在網(wǎng)頁(yè)上一次性讀取所有傳感器的數(shù)據(jù),也可以單獨(dú)訪(fǎng)問(wèn)每個(gè)傳感器對(duì)應(yīng)的域名地址來(lái)讀取相應(yīng)的數(shù)據(jù)。這樣就完成了基本的通過(guò) Web 頁(yè)面控制掌控板以及讀取數(shù)據(jù)的功能。

如何通過(guò)Siri語(yǔ)音識(shí)別獲取傳感器數(shù)據(jù)

在這基礎(chǔ)之后,我們可以通過(guò)設(shè)置一些語(yǔ)音助手,比如 Siri、天貓語(yǔ)音精靈等,通過(guò)語(yǔ)音命令訪(fǎng)問(wèn)對(duì)應(yīng)的域名地址,從而實(shí)現(xiàn)語(yǔ)音識(shí)別開(kāi)關(guān)燈、讀取傳感器數(shù)據(jù)的功能。

如何通過(guò)Siri語(yǔ)音識(shí)別獲取傳感器數(shù)據(jù)

電路連接

本項(xiàng)目中,我們需要外接一個(gè) DHT11 溫濕度傳感器,通過(guò)擴(kuò)展板將它接在掌控板 P0 引腳,如下圖所示。聲音數(shù)據(jù)和光線(xiàn)數(shù)據(jù),直接通過(guò)掌控板賬面自帶的兩個(gè)傳感器讀取即可。

如何通過(guò)Siri語(yǔ)音識(shí)別獲取傳感器數(shù)據(jù)

庫(kù)文件安裝

這個(gè)項(xiàng)目需要用到 4 個(gè) Arduino 庫(kù):除了上一篇章用到的 Adafruit_NeoPixelESPAsyncWebServer、AsyncTCP 之外,我們還加入了 DHT 函數(shù)庫(kù),它的功能主要是讀取 DHT11 溫濕度傳感器的數(shù)值。。

Arduino 庫(kù)安裝的教程不是本篇的重點(diǎn),這里不再贅述,只給出 4 個(gè)庫(kù)的網(wǎng)址,大家可以自行百度查找 Arduino 怎么安裝庫(kù)。

  • Adafruit_NeoPixel:https://github.com/adafruit/Adafruit_NeoPixel

  • ESPAsyncWebServer:https://github.com/me-no-dev/ESPAsyncWebServer

  • AsyncTCP:https://github.com/me-no-dev/AsyncTCP

  • DHT:https://github.com/adafruit/DHT-sensor-library

Arduino 代碼

這一篇章的代碼是在上一篇章的基礎(chǔ)之上進(jìn)行修改的,所以基礎(chǔ)部分不再贅述,只講解不同與添加部分。

頭文件及初始化定義

在程序的開(kāi)頭,我們首先引入了需要用到的庫(kù)函數(shù):

#include "WiFi.h"
#include "ESPAsyncWebServer.h"
#include "Adafruit_NeoPixel.h"
#include "Adafruit_Sensor.h"
#include "DHT.h"

然后設(shè)置網(wǎng)絡(luò)的賬號(hào)和密碼:

const char *ssid = "wifi_name";
const char *password = "wifi_password";

接著定義一些傳感器與執(zhí)行器引腳,并對(duì)他們進(jìn)行一些初始化設(shè)置:

#define SOUNDPIN 36   // P10
#define LIGHTPIN 39   // P4
#define LEDPIN 17   // P7

#define DHTPIN 33   // P0

接著定義了 DHT 對(duì)象、NeoPixel 對(duì)象(RGB LED 燈)和 WebServer 對(duì)象:

#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

Adafruit_NeoPixel pixels(3, LEDPIN, NEO_GRB + NEO_KHZ800);
AsyncWebServer server(80);

Web 頁(yè)面設(shè)計(jì)

然后是掌控板 Web 服務(wù)器的界面設(shè)計(jì),界面設(shè)計(jì)使用的是 HTML 語(yǔ)言,這里先放一個(gè)最基礎(chǔ)的界面設(shè)計(jì)。HTML 相關(guān)的代碼存儲(chǔ)在 index_html 變量中。

const char index_html[] PROGMEM = R"rawliteral(
    // HTML code here
)rawliteral";

基礎(chǔ)的 HTML 頁(yè)面設(shè)計(jì)代碼如下:

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <style>
      html {
        font-family: "Microsoft Yahei";
        text-align: center;
      }
    </style>
  </head>
  <body>
    <h3>掌控板家庭數(shù)據(jù)中心</h3>
    <a href="/led=on">Light On</a>
    <p></p>
    <a href="/led=off">Light Off</a>
    <p>
      <span>聲音:</span>
      <span>%SOUND%</span>
    </p>
    <p>
      <span>光線(xiàn):</span>
      <span>%LIGHT%</span>
    </p>
    <p>
      <span>溫度:</span>
      <span>%TEMPERATURE%</span>
      <span>℃</span>
    </p>
    <p>
      <span>濕度:</span>
      <span>%HUMIDITY%</span>
      <span>%</span>
    </p>
  </body>
</html>

這段代碼在網(wǎng)頁(yè)中顯示的效果如下。我們可以看到很多數(shù)據(jù)是在兩個(gè)百分號(hào)(%)之間的,比如 %SOUND%,這個(gè)是占位符,我們?cè)诔绦蛑凶x取相應(yīng)傳感器的數(shù)據(jù)之后,就可以自動(dòng)替換了,程序中會(huì)有專(zhuān)門(mén)的函數(shù)程序去進(jìn)行替換,這部分下面會(huì)講。

如何通過(guò)Siri語(yǔ)音識(shí)別獲取傳感器數(shù)據(jù)

傳感器數(shù)據(jù)讀取函數(shù)

首先是讀取 DHT11 溫濕度傳感器的函數(shù),這部分比較簡(jiǎn)單,直接參考 DHT 函數(shù)庫(kù)例程就好:

String readDHTTemperature() {
  float temperature = dht.readTemperature();
  if (isnan(temperature)) {
    Serial.println("Failed to read from DHT sensor!");
    return "--";
  }
  else {
    Serial.println(temperature);
    return String(temperature);
  }
}

String readDHTHumidity() {
  float humidity = dht.readHumidity();
  if (isnan(humidity)) {
    Serial.println("Failed to read from DHT sensor!");
    return "--";
  }
  else {
    Serial.println(humidity);
    return String(humidity);
  }
}

然后是 processor() 函數(shù),這個(gè)函數(shù)的功能主要就是將網(wǎng)頁(yè)部分的所有占位符替換為相應(yīng)的傳感器數(shù)值。它可以根據(jù)占位符的名稱(chēng),返回對(duì)應(yīng)的數(shù)據(jù)。

// Replaces placeholder with sensor values
String processor(const String& var) {
  if (var == "SOUND") {
    return String(analogRead(SOUNDPIN));
  }
  if (var == "LIGHT") {
    return String(analogRead(LIGHTPIN));
  }
  if (var == "TEMPERATURE") {
    return readDHTTemperature();
  }
  if (var == "HUMIDITY") {
    return readDHTHumidity();
  }
  return String();
}

setup()

在初始化函數(shù) setup() 中,我們首先對(duì)串口、RGB 燈和 DHT11 傳感器進(jìn)行了初始化:

Serial.begin(9600);
pixels.begin();
dht.begin();

然后將掌控板連接到網(wǎng)絡(luò),并把 IP 地址在串口中打印出來(lái):

// Connect to Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
    delay(1000);
    Serial.println("Connecting to WiFi..");
}
Serial.println("WiFi connected");

// Print ESP32 Local IP Address and Some Tips
Serial.print("Open your brower, and visit: http://");
Serial.println(WiFi.localIP());
Serial.println();

最后就是最重要的 Web 服務(wù)器設(shè)置。關(guān)于 Web 服務(wù)器設(shè)置的詳細(xì)教程,可以查看官網(wǎng):https://github.com/me-no-dev/ESPAsyncWebServer

這里只放出本文需要的代碼。當(dāng)訪(fǎng)問(wèn)根目錄“/”時(shí),會(huì)顯示所有的數(shù)據(jù)以及相關(guān)的控制按鈕。這里顯示數(shù)據(jù)調(diào)用的就是上面講到的 processor 函數(shù)。

// Root / Webpage
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
    request->send_P(200, "text/html", index_html, processor);
});

當(dāng)訪(fǎng)問(wèn)“/led=on”路徑時(shí),設(shè)置 LED 燈為亮;當(dāng)訪(fǎng)問(wèn)“/led=off”路徑時(shí),設(shè)置 LED 燈為滅。

// Webpage to turn on light
server.on("/led=on", HTTP_GET, [](AsyncWebServerRequest *request) {
    pixels.setPixelColor(0, 0xFF0000);
    pixels.setPixelColor(1, 0xFF0000);
    pixels.setPixelColor(2, 0xFF0000);
    pixels.show();
    Serial.println("LED is on");
    request->send_P(200, "text/plain", "led on");
});

// Webpage to turn off light
server.on("/led=off", HTTP_GET, [](AsyncWebServerRequest *request) {
    pixels.setPixelColor(0, 0x000000);
    pixels.setPixelColor(1, 0x000000);
    pixels.setPixelColor(2, 0x000000);
    pixels.show();
    pixels.clear();
    Serial.println("LED is off");
    request->send_P(200, "text/plain", "led off");
});

然后當(dāng)訪(fǎng)問(wèn)每個(gè)傳感器相應(yīng)路徑時(shí),比如"/temperature"、"/humidity"、"/sound"、"/light"這些路徑,程序會(huì)調(diào)用相應(yīng)的函數(shù)讀取傳感器數(shù)據(jù),通過(guò)串口將數(shù)據(jù)打印出來(lái),然后將它們轉(zhuǎn)化成文本 String 類(lèi)型,并顯示在網(wǎng)頁(yè)上:

  // Webpage to get the temperature value
  server.on("/temperature", HTTP_GET, [](AsyncWebServerRequest *request) {
    Serial.print("Temperature: ");
    Serial.println(readDHTTemperature());
    request->send_P(200, "text/plain", readDHTTemperature().c_str());
  });

  // Webpage to get the humidity value
  server.on("/humidity", HTTP_GET, [](AsyncWebServerRequest *request) {
    Serial.print("Humidity: ");
    Serial.println(readDHTHumidity());
    request->send_P(200, "text/plain", readDHTHumidity().c_str());
  });

  // Webpage to get the sound value
  server.on("/sound", HTTP_GET, [](AsyncWebServerRequest *request) {
    Serial.print("Sound: ");
    Serial.println(analogRead(SOUNDPIN));
    request->send_P(200, "text/plain", String(analogRead(SOUNDPIN)).c_str());
  });

  // Webpage to get the light value
  server.on("/light", HTTP_GET, [](AsyncWebServerRequest *request) {
    Serial.print("Light: ");
    Serial.println(analogRead(LIGHTPIN));
    request->send_P(200, "text/plain", String(analogRead(LIGHTPIN)).c_str());
  });

在 setup() 函數(shù)的最后,運(yùn)行 Web 服務(wù)器:

server.begin();

至此,整個(gè)程序就編寫(xiě)完成了,在 loop() 函數(shù)中,不需要做任何事,當(dāng)然你也可以運(yùn)行其他你想要的代碼。

程序上傳

在 Arduino 中選擇掌控板或者 ESP32 相關(guān)的芯片,然后將程序上傳,打開(kāi)串口監(jiān)視器,我們可以看到串口監(jiān)視器中提示我們?cè)L問(wèn)相應(yīng)的網(wǎng)址。(如果沒(méi)看到相應(yīng)信息,可以按一下掌控板后面的 RST 按鍵,重啟程序)

如何通過(guò)Siri語(yǔ)音識(shí)別獲取傳感器數(shù)據(jù)

打開(kāi)電腦瀏覽器或者手機(jī)瀏覽器,訪(fǎng)問(wèn)相應(yīng)的 IP 地址,這里是:192.168.10.202,我們可以看到網(wǎng)頁(yè)上顯示了相應(yīng)的信息。

如何通過(guò)Siri語(yǔ)音識(shí)別獲取傳感器數(shù)據(jù)

嘗試訪(fǎng)問(wèn)對(duì)應(yīng)的地址,當(dāng)訪(fǎng)問(wèn) 192.168.10.202/led=on 時(shí),瀏覽器和串口監(jiān)視器中,都輸出了相應(yīng)的提示信息,同時(shí)我們也可以看到掌控板上的 RGB 燈也亮了起來(lái)。當(dāng)訪(fǎng)問(wèn) 192.168.10.202/led=off 時(shí),瀏覽器和串口監(jiān)視器中,也都輸出了相應(yīng)的提示信息,同時(shí)掌控板上的 RGB 燈也熄滅了。

如何通過(guò)Siri語(yǔ)音識(shí)別獲取傳感器數(shù)據(jù)

當(dāng)訪(fǎng)問(wèn) 192.168.10.202/sound 以及其他傳感器對(duì)應(yīng)的網(wǎng)址是,瀏覽器和串口監(jiān)視器中,也都輸出了相應(yīng)的提示信息,如下圖所示。

如何通過(guò)Siri語(yǔ)音識(shí)別獲取傳感器數(shù)據(jù)

如何通過(guò)Siri語(yǔ)音識(shí)別獲取傳感器數(shù)據(jù)

如何通過(guò)Siri語(yǔ)音識(shí)別獲取傳感器數(shù)據(jù)

網(wǎng)頁(yè)設(shè)計(jì)

這部分不是本文的重點(diǎn),也不會(huì)影響最終語(yǔ)音控制的效果,所以如果您對(duì)網(wǎng)頁(yè)設(shè)計(jì)不感興趣,也可以略過(guò),直接跳轉(zhuǎn)到下一節(jié)。

在上文中,我們已經(jīng)基本完成了通過(guò)網(wǎng)頁(yè)來(lái)控制 LED 燈、以及讀取傳感器數(shù)據(jù)的相關(guān)功能,但是這個(gè)網(wǎng)頁(yè)畢竟還是太簡(jiǎn)陋了。所以我們對(duì)網(wǎng)頁(yè)稍微進(jìn)行一些優(yōu)化。

具體 HTML 優(yōu)化代碼請(qǐng)下載附件,這部分參考了國(guó)外大神的網(wǎng)站:https://randomnerdtutorials.com/

上述代碼最終形成的效果如下。

如何通過(guò)Siri語(yǔ)音識(shí)別獲取傳感器數(shù)據(jù)

語(yǔ)音助手設(shè)置

接下來(lái)就是語(yǔ)音識(shí)別的設(shè)置,原理與上一篇 Siri 教程類(lèi)似。由于筆者手上沒(méi)有其他語(yǔ)音助手或者智能音箱類(lèi)產(chǎn)品,所以這里還是以 Siri 為例。

打開(kāi) iOS 系統(tǒng)自帶的捷徑 App(英文名稱(chēng) Shortcuts),沒(méi)有沒(méi)有的話(huà),也可以去 App Store 免費(fèi)下載:

如何通過(guò)Siri語(yǔ)音識(shí)別獲取傳感器數(shù)據(jù)

快捷指令設(shè)置如下圖所示。捷徑的設(shè)置原理很簡(jiǎn)單,就是訪(fǎng)問(wèn)給定的 URL 地址。

如何通過(guò)Siri語(yǔ)音識(shí)別獲取傳感器數(shù)據(jù)

由于 iPhone 中的捷徑是支持 Siri 語(yǔ)音識(shí)別調(diào)用的,所以我們可以直接通過(guò) Siri 來(lái)運(yùn)行這個(gè)捷徑,從而達(dá)到語(yǔ)音識(shí)別獲取傳感器數(shù)據(jù)的效果。

如果不知道怎么設(shè)置快捷指令的話(huà),也可以直接下載筆者的指令。復(fù)制下面的鏈接到 iPhone 瀏覽器中,就會(huì)提示你將這個(gè)指令添加到手機(jī)中。

https://www.icloud.com/shortcuts/4e20f185da76479a90f0716c9521cc7a

如何通過(guò)Siri語(yǔ)音識(shí)別獲取傳感器數(shù)據(jù)

效果演示

喚醒你的 Siri 看看效果吧。不過(guò)這里需要注意的是,你的 iPhone 和掌控板,必須處于同一局域網(wǎng)中。

如何通過(guò)Siri語(yǔ)音識(shí)別獲取傳感器數(shù)據(jù)

以上是“如何通過(guò)Siri語(yǔ)音識(shí)別獲取傳感器數(shù)據(jù)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI