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產品應用如智慧音箱、智慧家電

Leave a Reply

Your email address will not be published. Required fields are marked *