ESP8266 (NodeMCU) 與 App Inventor的語音辨識和開關控制~ 3 hr AIoT的建議課程

本文是利用Arduino系列的NodeMCU Lua (Esp8266) wifi 模組來製作簡單的App Inventor 手機程式,並用按鈕(Button)和語音辨識的方式來控制LED或電燈開關。 更令人興奮的是硬體材料費不到 NT200 !! 以下整理3 hr上課內容給各位參考,以搭配您的課程需要。

This image has an empty alt attribute; its file name is 1112.jpg
(for 3 hr in class only)
This image has an empty alt attribute; its file name is image-15-1024x768.png
成果展示 (智慧語音小禮盒)

1. 步驟說明

課程規劃如下 :

  1. 第一小時 : AIoT、Arduino與App Inventor 簡介與程式環境設定
  2. 第二小時 : 快速瀏覽Arduino程式並進入App Inventor開發
  3. 第三小時 : App Inventor程式編輯與上傳自己製作的App

第一小時課程 : AIoT介紹

AIoT 即AI (Artificial Intelligence)+ IoT (Internet of Things) 的簡稱,指人工智慧技術(AI)與物聯網(IoT)在實際應用中的落地融合 。本課程是將AIoT實際應用在智慧家庭(Smart Home)的情境中,如下圖

智慧家庭應用系列

以下影帶看完後,會對智慧家庭的應用有很清楚的概念

AI (人工智慧)則是現今科技界的響叮噹的學習標的,目前應用在生活中常見的AI應用 包括影像辨識 (人臉辨識)和語音辨識,本課程以語音辨識的開發應用作為主題之一。

相關圖片
人臉辨識案例

以上學習體驗可參考微軟(Microsoft face API)人臉辨識A應用網站

至於語音辨識的應用,我們是連結google 雲端的免費語音服務系統,結合App Invemtor的程式去開發自己的功能。

常用的google 雲端語音服務
「google voice recognition api」的圖片搜尋結果
google 語音服務與程式開發的介面 vs 本文最上方的系統架構圖

Arduino 簡介

發展至今約10年的時間,已是現今所有領域的研究者、開發者和學習者的最常用工具之一,可以快速地開發物聯網、感測器、馬達控制、生醫訊號等等。 本文選用的是Arduino + Wifi 的非常廣泛的ESP8266系列之NodeMCU控制器。

Arduino Board
標準Arduino UNO板
「nodemcu」的圖片搜尋結果
NodeMCU (Esp8266)晶片控制器

Arduino 環境 安裝與設定,請參考前一篇文章,但是本次課程僅3Hr 所以學習目標先放在App Inventor的編輯與製作。既然時間有限,我們採用倒吃甘蔗的作法,先體驗一下程式執

第二小時課程 : 安裝與設定

  1. 接上LED與確認NodeMCU連上電腦 : 請用雙母頭的杜邦線,一端接在NodeMCU的G (接地)角,另一端接在D1 腳位。LED接角要特別注意長腳接(D1),短腳接 (G)
LED長腳接(D1),短腳接 (G) ; 我們省略了電阻串接在長腳端

上述接線仔細檢查無誤後,取出 micro USB傳輸線,一端接上電腦,一端接上NodeMCU控制器。

2. 燒錄Arduino程式 : 這個步驟這裡先不做,開課必須先將程式燒錄進去Arduino。 燒錄方法可參考

3. 設定 NodeMCU wifi : 這個步驟這裡先不做我們的目的是讓每位學員的NodeMCU都能正確連上自己的手機熱點。開課前須先將每一個NodeMCU設定好wifi 的內容,包括欲連線的SSID和密碼。詳細動作可參閱

4. 安卓手機程式APK(安裝執行檔, 下載連結),或用以下QR code得到網址並下載

下載後請打開手機的外部應用程式安裝的權限,進行安裝。成功後會得到以下畫面。

手機App 截圖

5. 連線使用 : 當手機熱點打開後(熱點設定需同前面步驟3. ),按下APP的 “掃瞄”按鈕,若是在 “遠端IP”有出現另一組 192.168.xx.xx 的IP,那麼代表設定都正確,NodeMCU連上你自己的手機熱點了。

6. 操作說明 : 按下 “廚房燈開”, “廚房燈關” 等按鈕,會看到LED亮或滅。此外,按下”語音辨識”按鈕後,說出與上面 “廚房燈開”, “廚房燈關” 等按鈕一樣的文字,也可達到同樣的效果。

第三小時課程 : App Inventor程式講解

  1. 註冊google
  2. 進入App Inventor 2 編輯環境 。 文字閱讀不如看影帶教學,可參考 YouTube “MIT App Inventor 入門教學 – 按鈕文字及安裝執行” 。
  3. 如何手機安裝MIT AI2 Companion程式 ,進行編譯與APK製作,可參考YouTube “手機安裝MIT AI2 Companion程式
  4. 下載並匯入範例專案。
點選右上角的全部下載符號
再到自己的硬碟選取剛剛下載的 .aia檔案並匯入

5. 程式編輯、編譯與打包apk的體驗

5-1. 畫面編排練習 – 底圖更新和應用程式名稱修改

設計自己的背景圖片並更換,同時,選擇 “標題”修改App的名稱

5-2. 修改好後,準備編譯你的程式 :

選擇,連線 – AI Companion
畫面會出現QR code,準備用手機的App來掃描

打開手機的 “MIT AI2 Companion” app應用程式

相關圖片
選取 “scan QR code” ,並進入程式編譯與載入手機的階段

5-3. 程式設計練習 – 修改按鈕、語音辨識命令更動

更改上述按鈕的名稱與語音辨識指令,例如改成 “客廳開燈”
進入 “程式設計”,修改圖示圈選的對應文字

重複 5-2動作,編譯體的程式看看結果如何 ?

5-4. 製作一個新的開關按鈕 (這部分依據時間保留是否進行)

首先修改畫面新增按鈕

在畫面編排中,先安插新的一行,以便放入新的按鈕功能

進入程式設計,複製積木 ,然後修改傳送到Arduino程式的命令

進入Arduino程式,新增對應的程式碼,並燒入新的程式

以上動作,Happy Ending ~ 。

ESP8266 (NodeMCU) 與 App Inventor的語音辨識和開關控制

本文是利用Arduino系列的NodeMCU Lua (Esp8266) wifi 模組來製作簡單的App Inventor 手機程式,並用按鈕(Button)和語音辨識的方式來控制LED或電燈開關。 更令人興奮的是硬體材料費不到 NT200 !!

課程模組架構
外加手工紙盒後,可完成如上的作品

1. 步驟說明

STEP 1 NodeMCU 介紹與環境設定

NodeMCU 是以 ESP8266 (ESP12) 晶片為基礎,包含了 WiFi、GPIO、PWM、ADC、I2C 等功能的主控板,執行效率高,非常適合物聯網應用開發,因為它內建了 WiFi 功能,並且完全相容Arduino。
NodeMCU 具有下列優點:
價格便宜:一片 nodemcu 大約新台幣一百多 (不含藍芽)至兩百多元 (含藍芽)。
提供 micro USB 介面:一般手機或行動電,源都可方便、穩定的提供電源。
與 Arduino 相容:幾乎可用於 Arduino 的感測器,皆可用於 nodemcu。
文件資料齊全且免費:可輕易得到各種輔助文件。

本次專輯使用

NodeMcu Lua WIFI V3 ESP8266 串口wifi模組

NodeMCU安裝說明

安裝NodeMCU驅動程式 • 對於Windows使用者,若無法自動偵測nodeMCU驅 動程式,需要自行下載安裝COM埠驅動程式。 • nodeMCU V3 使用CH340G USB-to-UART橋接晶片組。 – USB-SERIAL CH340G 驅動程式下載 – http://www.arduined.eu/files/CH341SER.zip • nodeMCU V2 使用CP2102 USB-to-UART橋接晶片組。 – USB-SERIAL CP2102 驅動程式下載 – https://www.silabs.com/documents/public/software/CP21 0x_Windows_Drivers.zip

或參考 NodeMCU使用介紹 有圖文詳細說明

Arduino環境設定

設定開發板及序列埠在 Arduino 整合環境必須設定正確的開發板及序列埠,才能燒錄及執行程式。將 NodeMCU 以 micro USB 線連接到電腦,開啟 Arduino 整合環境,點按 工具 / 開發板,再點選 「NodeMCU 1.0 (ESP-12E Module)」

再點按 工具 / 序列埠,再點選 nodemcu 連接的序列埠,此處為「COM12」 (如果忘記序列埠的位置,可到裝置管理員中查看)

小編: 網路上有許多文章介紹此類步驟, 可多參考。 如 http://hammer1007.blogspot.com/2017/11/esp82662-1-nodemcu.html

第一個測試程式 – LED閃爍

安裝Esp8266套件時,會自動替Arduino加上許多範例,我們先從Arduino IDE選單中,挑選Blink來測試,位置在 範例-ESP8266-Blink

第 13 列「LED_BUILTIN」為內建 LED 燈接腳常數,此列設定 LED_BUILTIN 可改為D0 或 D1 等輸出接腳來測試。 接線如下

點按上方工具列向右箭頭圖示將程式燒錄到 NodeMCU 板,一段時間後下方視窗顯示「上傳完畢」表示已燒錄完成,見下圖

此時可見到 NodeMCU 板上 LED 燈不斷閃爍

STEP 2 本專輯接線說明

STEP 3 NodeMCU Arduino程式講解與wifi設定

首先,手機開wifi功能,搜尋範圍內的無線裝置,您會看到一個叫 AutoConnectAP的名稱,這就是你身邊的NodeMCU,對其連線。 其次,打開手機的網頁,輸入網址 192.168.4.1 ,選擇” Configure WiFi (No Scan)” 。最後SSID 請設定(不可用中文)好,密碼可以不用。注意,這裡的SSID名稱需與待會手機開的熱點名稱一致。

本程式設計重點在,使用ESP8266的wifi連線自己手機的4G熱點 (hot spot),透過手機APP (App Inventor開發)設計按鈕控制 (button)LED或家電,並且連線google 雲端透過語音辨識(speech recognition)的方式控制LED或家電。

相關圖片

來看看Arduino程式如何寫的 :

第一部分 : ESP8266 設定

WiFiManager wifiManager;
ESP8266WebServer server(80);
//Static IP address configuration
IPAddress ip(192, 168, 1, 6); //ESP static ip
IPAddress gateway(192, 168, 1, 1); //IP Address of your WiFi Router (Gateway)
IPAddress subnet(255, 255, 255, 0); //Subnet mask
IPAddress dns(8, 8, 8, 8); //DNS
const char *ssid = “xxxxxxxx”; //網絡名稱
const char *password = “xxxxxxxxxxxx”; //網絡密碼
WiFiUDP Udp;
IPAddress apip;
unsigned int localUdpPort = 4567; // local port to listen on
char incomingPacket[255]; // buffer for incoming packets

第二部分 : 副程式呼叫與手機App通訊

void handleLed1On() {
stateLED1 = HIGH;
digitalWrite(D1,HIGH);
response();
}

void handleLed1Off() {
stateLED1 = LOW;
digitalWrite(D1,LOW);
response();

}

第三部分 : wifi 設定、回傳訊息定義、udp通訊

void setup() {
Serial.begin(115200);
pinMode(D1,OUTPUT);
digitalWrite(D1,LOW);
wifiManager.setBreakAfterConfig(true);
if(!wifiManager.autoConnect(“AutoConnectAP”, “password”)) {
Serial.println(“failed to connect and hit timeout”);
//reset and try again, or maybe put it to deep sleep
ESP.reset();
delay(1000);
}
Serial.println(WiFi.localIP());
Serial.println(“server started”);
server.on(“/LED1On”, handleLed1On); //與手機通訊定義
server.on(“/LED1Off”, handleLed1Off);
server.begin();
Udp.begin(localUdpPort);
}

void udpprocess(){ //UDP 通訊
if (packetSize){
// receive incoming UDP packets
Serial.printf(“Received %d bytes from %s, port %d\n”, packetSize, Udp.remoteIP().toString().c_str(), Udp.remotePort());
int len = Udp.read(incomingPacket, 255);
Serial.printf(“UDP packet contents: %s\n”, incomingPacket);
if(strcmp(incomingPacket,”SCAN”)==0){
// send back a reply, to the IP address and port we got the packet from
Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
Udp.print(WiFi.localIP());
Udp.endPacket();
Serial.println(WiFi.localIP());
}
}
}
void loop() {
server.handleClient();
udpprocess();
}

STEP 4 App Inventor 程式說明

App Inventor 基礎學習資訊 : 建議可參考網站,有相當多的有經驗與有用的入門學習資訊。 如 第一堂:認識App Inventor 2 的基本操作(上) 課堂練習 | 範例教學 – App Inventor 中文學習網 等等。 以下我們直接切入本專輯的程式設計

App Inventor 畫面編排
按鈕的程式設計 ~ 這幾個程式可以自行修改
UDP wifi 的程式設計
上圖 : 左邊是語音辨識的程式 , 右邊則是App透過網頁方式接收Arduino傳來的指令

STEP 5 測試影帶

稍後提供

2. 程式碼下載

安卓手機程式APK(安裝執行檔, 下載連結),或用以下QR code

目前只開放來信索取, 可參考聯絡我們

3. 推廣應用

  • 應用在智能居家控制,透過語音和行動裝置控制家中的設備
  • 醫療照護應用,可讓長者透過語音控制裝置,也可以透過手機遠端監控
  • 智能3C產品應用如智慧音箱、智慧家電