小編給大家分享一下如何通過Siri語音識別獲取傳感器數(shù)據(jù),相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
在南鄭等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計 網(wǎng)站設(shè)計制作定制網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都營銷網(wǎng)站建設(shè),外貿(mào)網(wǎng)站建設(shè),南鄭網(wǎng)站建設(shè)費(fèi)用合理。
如何通過 Siri 語音識別獲取傳感器數(shù)據(jù)。
在上一篇中,我向大家詳細(xì)展示了如何利用 Siri 控制掌控板(ESP32)和 LED 燈,這一篇是上一篇的進(jìn)階,我將繼續(xù)教大家如何用 Siri 去讀取各種傳感器的數(shù)據(jù)。
沒看過上一篇的朋友,建議先去看一下第 1 篇的內(nèi)容。
跳轉(zhuǎn)鏈接:掌控板 Siri 語音識別的第 1 篇:LED 燈控制
這次主控板選擇的仍然是掌控板(ESP32),當(dāng)然正如我前面篇章所說的,你也可以選擇其他 ESP32 或者 ESP8266 系列開發(fā)板,實現(xiàn)的方法和效果是類似的。讀取的傳感器數(shù)據(jù)包括掌控板自帶的聲音傳感器、光線傳感器、以及外接的 DHT11 溫濕度傳感器,學(xué)習(xí)了本篇章之后,希望你可以學(xué)會修改相應(yīng)代碼,換成其他傳感器。
在這個項目中,我們同樣將掌控板 ESP32 設(shè)置為一個 Web 服務(wù)器,當(dāng)用戶在網(wǎng)頁上訪問這個服務(wù)器的域名地址(或 IP 地址)的時候,就會跳轉(zhuǎn)到如下界面。最終實現(xiàn)的效果是,不僅可以用 Siri 語音識別去獲取傳感器數(shù)據(jù),也可以直接在網(wǎng)頁端查看傳感器數(shù)據(jù)。
我們可以通過點擊 LED的切換開關(guān)來控制掌控板上的 RGB LED 的亮滅,也可以訪問這個切換開關(guān)的對應(yīng)域名地址,來控制 LED 燈的亮滅。
針對傳感器,我們可以直接在網(wǎng)頁上一次性讀取所有傳感器的數(shù)據(jù),也可以單獨(dú)訪問每個傳感器對應(yīng)的域名地址來讀取相應(yīng)的數(shù)據(jù)。這樣就完成了基本的通過 Web 頁面控制掌控板以及讀取數(shù)據(jù)的功能。
在這基礎(chǔ)之后,我們可以通過設(shè)置一些語音助手,比如 Siri、天貓語音精靈等,通過語音命令訪問對應(yīng)的域名地址,從而實現(xiàn)語音識別開關(guān)燈、讀取傳感器數(shù)據(jù)的功能。
本項目中,我們需要外接一個 DHT11 溫濕度傳感器,通過擴(kuò)展板將它接在掌控板 P0 引腳,如下圖所示。聲音數(shù)據(jù)和光線數(shù)據(jù),直接通過掌控板賬面自帶的兩個傳感器讀取即可。
這個項目需要用到 4 個 Arduino 庫:除了上一篇章用到的 Adafruit_NeoPixel、ESPAsyncWebServer、AsyncTCP之外,我們還加入了 DHT函數(shù)庫,它的功能主要是讀取 DHT11 溫濕度傳感器的數(shù)值。。
Arduino 庫安裝的教程不是本篇的重點,這里不再贅述,只給出 4 個庫的網(wǎng)址,大家可以自行百度查找 Arduino 怎么安裝庫。
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
這一篇章的代碼是在上一篇章的基礎(chǔ)之上進(jìn)行修改的,所以基礎(chǔ)部分不再贅述,只講解不同與添加部分。
在程序的開頭,我們首先引入了需要用到的庫函數(shù):
#include "WiFi.h" #include "ESPAsyncWebServer.h" #include "Adafruit_NeoPixel.h" #include "Adafruit_Sensor.h" #include "DHT.h"
然后設(shè)置網(wǎng)絡(luò)的賬號和密碼:
const char *ssid = "wifi_name"; const char *password = "wifi_password";
接著定義一些傳感器與執(zhí)行器引腳,并對他們進(jìn)行一些初始化設(shè)置:
#define SOUNDPIN 36 // P10 #define LIGHTPIN 39 // P4 #define LEDPIN 17 // P7 #define DHTPIN 33 // P0
接著定義了 DHT 對象、NeoPixel 對象(RGB LED 燈)和 WebServer 對象:
#define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); Adafruit_NeoPixel pixels(3, LEDPIN, NEO_GRB + NEO_KHZ800); AsyncWebServer server(80);
然后是掌控板 Web 服務(wù)器的界面設(shè)計,界面設(shè)計使用的是 HTML 語言,這里先放一個最基礎(chǔ)的界面設(shè)計。HTML 相關(guān)的代碼存儲在 index_html變量中。
const char index_html[] PROGMEM = R"rawliteral( // HTML code here )rawliteral";
基礎(chǔ)的 HTML 頁面設(shè)計代碼如下:
<!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>光線:</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)頁中顯示的效果如下。我們可以看到很多數(shù)據(jù)是在兩個百分號(%)之間的,比如 %SOUND%,這個是占位符,我們在程序中讀取相應(yīng)傳感器的數(shù)據(jù)之后,就可以自動替換了,程序中會有專門的函數(shù)程序去進(jìn)行替換,這部分下面會講。
首先是讀取 DHT11 溫濕度傳感器的函數(shù),這部分比較簡單,直接參考 DHT 函數(shù)庫例程就好:
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ù),這個函數(shù)的功能主要就是將網(wǎng)頁部分的所有占位符替換為相應(yīng)的傳感器數(shù)值。它可以根據(jù)占位符的名稱,返回對應(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(); }
在初始化函數(shù) setup()中,我們首先對串口、RGB 燈和 DHT11 傳感器進(jìn)行了初始化:
Serial.begin(9600); pixels.begin(); dht.begin();
然后將掌控板連接到網(wǎng)絡(luò),并把 IP 地址在串口中打印出來:
// 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)訪問根目錄“/”時,會顯示所有的數(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)訪問“/led=on”路徑時,設(shè)置 LED 燈為亮;當(dāng)訪問“/led=off”路徑時,設(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)訪問每個傳感器相應(yīng)路徑時,比如"/temperature"、"/humidity"、"/sound"、"/light"這些路徑,程序會調(diào)用相應(yīng)的函數(shù)讀取傳感器數(shù)據(jù),通過串口將數(shù)據(jù)打印出來,然后將它們轉(zhuǎn)化成文本 String 類型,并顯示在網(wǎng)頁上:
// 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();
至此,整個程序就編寫完成了,在 loop() 函數(shù)中,不需要做任何事,當(dāng)然你也可以運(yùn)行其他你想要的代碼。
在 Arduino 中選擇掌控板或者 ESP32 相關(guān)的芯片,然后將程序上傳,打開串口監(jiān)視器,我們可以看到串口監(jiān)視器中提示我們訪問相應(yīng)的網(wǎng)址。(如果沒看到相應(yīng)信息,可以按一下掌控板后面的 RST 按鍵,重啟程序)
打開電腦瀏覽器或者手機(jī)瀏覽器,訪問相應(yīng)的 IP 地址,這里是:192.168.10.202,我們可以看到網(wǎng)頁上顯示了相應(yīng)的信息。
嘗試訪問對應(yīng)的地址,當(dāng)訪問 192.168.10.202/led=on時,瀏覽器和串口監(jiān)視器中,都輸出了相應(yīng)的提示信息,同時我們也可以看到掌控板上的 RGB 燈也亮了起來。當(dāng)訪問 192.168.10.202/led=off時,瀏覽器和串口監(jiān)視器中,也都輸出了相應(yīng)的提示信息,同時掌控板上的 RGB 燈也熄滅了。
當(dāng)訪問 192.168.10.202/sound以及其他傳感器對應(yīng)的網(wǎng)址是,瀏覽器和串口監(jiān)視器中,也都輸出了相應(yīng)的提示信息,如下圖所示。
這部分不是本文的重點,也不會影響最終語音控制的效果,所以如果您對網(wǎng)頁設(shè)計不感興趣,也可以略過,直接跳轉(zhuǎn)到下一節(jié)。
在上文中,我們已經(jīng)基本完成了通過網(wǎng)頁來控制 LED 燈、以及讀取傳感器數(shù)據(jù)的相關(guān)功能,但是這個網(wǎng)頁畢竟還是太簡陋了。所以我們對網(wǎng)頁稍微進(jìn)行一些優(yōu)化。
具體 HTML 優(yōu)化代碼請下載附件,這部分參考了國外大神的網(wǎng)站:https://randomnerdtutorials.com/
上述代碼最終形成的效果如下。
接下來就是語音識別的設(shè)置,原理與上一篇 Siri 教程類似。由于筆者手上沒有其他語音助手或者智能音箱類產(chǎn)品,所以這里還是以 Siri 為例。
打開 iOS 系統(tǒng)自帶的捷徑App(英文名稱 Shortcuts),沒有沒有的話,也可以去 App Store 免費(fèi)下載:
快捷指令設(shè)置如下圖所示。捷徑的設(shè)置原理很簡單,就是訪問給定的 URL 地址。
由于 iPhone 中的捷徑是支持 Siri 語音識別調(diào)用的,所以我們可以直接通過 Siri 來運(yùn)行這個捷徑,從而達(dá)到語音識別獲取傳感器數(shù)據(jù)的效果。
如果不知道怎么設(shè)置快捷指令的話,也可以直接下載筆者的指令。復(fù)制下面的鏈接到 iPhone 瀏覽器中,就會提示你將這個指令添加到手機(jī)中。
https://www.icloud.com/shortcuts/4e20f185da76479a90f0716c9521cc7a
喚醒你的 Siri 看看效果吧。不過這里需要注意的是,你的 iPhone 和掌控板,必須處于同一局域網(wǎng)中。
以上是“如何通過Siri語音識別獲取傳感器數(shù)據(jù)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
文章名稱:如何通過Siri語音識別獲取傳感器數(shù)據(jù)
文章位置:http://aaarwkj.com/article6/jjjgog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、微信公眾號、Google、網(wǎng)站營銷、ChatGPT、用戶體驗
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)