話不多說,先看效果演示視頻:
B 站視頻鏈接:https://www.bilibili.com/video/av63856715/
騰訊視頻鏈接:https://v.qq.com/x/page/i0914dgim06.html
前言
前段時間,我在公衆號上面發了一篇文章:掌控板 V1.1 語音識別初體驗
在這篇文章中,我使用了還處於測試階段的掌控板 V1.1 寫了一篇語音識別的教程。好多老師看了後,都迫不及待想要玩一下掌控板語音識別功能,但無奈掌控板目前在售的最新版本(V1.0.1)還不支持這個功能,只能作罷。而且從我測試的結果來看,目前掌控板語音識別效果不是很理想。
於是我就想,還有沒有其他方案可以做到語音識別呢?
看着手裏的 iPhone,是時候輪到人工智障 Siri 上場了!
可是怎麼做纔可以讓 Siri 完成智能家居的控制呢?可能很多人會說,加一個 Raspberry Pi (樹莓派),在上面運行 Home Assistant 框架,變成智能家居網關,然後再用掌控板(ESP32)做外設,就可以實現了 DIY 的 Siri 語音控制智能家居方案了。
的確,我們可以用這種方法去實現很複雜的智能家居控制系統,而且我之前就利用過 Home Assistant 框架、樹莓派和 ESP8266 做過智能家居系統,具體教程可以查看:
- Hey Siri,打開 HAY 旋轉燈:http://mc.dfrobot.com.cn/thread-26865-1-1.html
- Hey Siri,請告訴我傳感器數據:http://mc.dfrobot.com.cn/thread-28859-1-1.html
以下是這個方案的演示視頻:
B 站視頻鏈接:https://www.bilibili.com/video/av14986294/
騰訊視頻鏈接:https://v.qq.com/x/page/h0538fbcd4d.html
既然掌控板的主控芯片是 ESP32,而 ESP32 又是 ESP8266 的升級版,那麼 ESP32 當然也同樣可以接入 Home Assistant 系統。隨着時間的推移,Home Assistant 系統也有了很多升級,功能也越來越全面,大家可以自行去嘗試學習下這種方法。
Home Assistant 雖然是一個很強大的框架,但是如果我們只是做一些簡單的燈光控制,而且還要用到樹莓派,未免有點大材小用了。
所以這篇教程用的卻是另一種方法,我們讓掌控板或 ESP32 不用樹莓派就可以直連 IPhone 上的 Siri。
具體怎麼做呢?請繼續往下看。
重要的事情說三遍:
以下教程基於 Windows 系統!
以下教程基於 Windows 系統!
以下教程基於 Windows 系統!
如果你用的是 Linux 系統……你都用 Linux 系統了,這還難得倒你麼?
如果你用的是 macOS 系統……土豪,你不需要折騰,直接買買買那些支持 Siri 的設備就行!
準備工作
如果你是高手,可以直接看這裏:快速入門——ESP-IDF 編程指南:https://docs.espressif.com/projects/esp-idf/zh_CN/stable/get-started/index.html
ESP-IDF 是 Espressif IoT Development Framework 的縮寫,是樂鑫 ESP32 開發的一套框架,樂鑫所研發的軟件開發環境 ESP-IDF 能夠幫助用戶快速開發物聯網 (IoT) 應用,滿足用戶對於 Wi-Fi、藍牙、低功耗等性能的需求。框架裏面包含很多例程,是入門和進階ESP32的優秀參考。
如果你只想看精簡版的,請繼續往下看。你需要準備:
- 文本編輯器:編寫 C 語言程序,例如 VS Code、Eclipse、Notepad++等;
- 掌控板或其他 ESP32 開發板;
- Git:用於後續安裝 ESP32 編譯工具鏈、ESP-IDF 以及示例代碼;
- 工具鏈:用於編譯下載調試 ESP32 程序;
- ESP-IDF:包含 ESP32 API 和用於操作 工具鏈 的腳本;
- ESP HomeKit Demo 程序:包含蘋果智能家居 HomeKit 的 API 框架和適用於 ESP 系列芯片的例程 。
安裝 Git 環境
首先你需要安裝 Git 環境。Git 是做什麼的呢?說的簡單點,就是快速從 GitHub 下載代碼的工具。安裝方案很簡單,從 Git 官網(https://git-scm.com/)下載最新的安裝包,然後雙擊打開 exe 安裝文件,一路 Next 就行。
設置 ESP32 工具鏈
快速設置的方法是從 dl.espressif.com 下載集成在一起的工具鏈和 MSYS2 壓縮文件。下載鏈接爲:
https://dl.espressif.com/dl/esp32_win32_msys2_environment_and_toolchain-20181001.zip
將 zip 壓縮文件解壓到 C:\
(或其它路徑,我邊邊是 D:\esp
),它會使用預先準備的環境創建一個 msys32
目錄,如下圖所示:
然後打開 D:\esp\msys32\mingw32.exe
程序,這將會打開一個 MSYS2 的終端窗口,該窗口的環境是一個 bash shell。後面會多次用到這個程序,請一定要記住!後面會多次用到這個程序,請一定要記住!後面會多次用到這個程序,請一定要記住!
運行如下命令,創建一個 esp
目錄作爲開發掌控板(ESP32) 應用的默認地址:
mkdir -p ~/esp
輸入 cd ~/esp
就進入到新創建的目錄。如果沒有錯誤信息出現則表明此步驟已完成。
cd ~/esp
請不要關閉這個窗口,後續步驟將會使用這個窗口來爲掌控板(ESP32)設置開發環境。
下載 ESP-IDF 框架
工具鏈安裝完後,你還需要 ESP32 相關的 API 庫。API 庫在 ESP-IDF 倉庫 中。
繼續在 MSYS2 的終端窗口中輸入以下命令,使用 git clone
命令克隆(下載) ESP-IDF 遠程倉庫:
cd D:\esp
git clone -b v3.2.2 --recursive https://github.com/espressif/esp-idf.git
該命令首先切換到 D:\esp
目錄下,然後將 ESP-IDF 被下載到 D:\esp
目錄下。
git clone
命令的-b v3.2.2
選項告訴 git 從 ESP-IDF 倉庫中克隆與此版本的文檔對應的分支版本,目前最新的穩定版本爲v3.2.2
。
下載需要一段時間,請耐心等待。我這邊大概下載了 20 分鐘。
接着開始設置 ESP-IDF 路徑。工具鏈程序使用環境變量 IDF_PATH
來訪問 ESP-IDF。這個變量應該設置在你的 PC 中,否則工程將不能編譯。用戶配置文件腳本存放在 D:/esp/msys32/etc/profile.d/
目錄中。每次打開 MSYS2 窗口時,系統都執行這些腳本。
在 D:/esp/msys32/etc/profile.d/
目錄下創建一個新的腳本文件。將其命名爲 export_idf_path.sh
。
然後確定 ESP-IDF 目錄的路徑,也就是我們剛纔安裝 ESP-IDF 的路徑,此處爲 D:\esp\esp-idf
。在 export_idf_path.sh
腳本中加入 export
命令:
export IDF_PATH="D:/esp/esp-idf"
然後保存並關閉該文件即可。
至此 ESP-IDF 所有準備工作就完成了。
下載 ESP HomeKit Demo 程序
ESP HomeKit Demo 程序是 GitHub 上的一位大神開源的,原地址爲:https://github.com/maximkulkin/esp-homekit-demo
但是上面的教程寫的比較簡單,所以我就做了一下搬運。
還記得前文在 MSYS2 的終端窗口下創建了一個 ~\esp
路徑麼?這個路徑是一個相對路徑,它是相對 msys2
目錄而言的,這個目錄的具體位置爲:D:\esp\msys32\home\ironpanda\esp
,其中 ironpanda
是我的電腦用戶名,每個人電腦用戶名不一樣。
我們將把 ESP HomeKit Demo 例程下載到 ~\esp
這個目錄中,在 MSYS2 的終端窗口運行一下命令:
cd ~/esp
git clone https://github.com/maximkulkin/esp-homekit-demo.git
cd esp-homekit-demo
git submodule update --init --recursive
然後進入 esp-homekit-demo
目錄,複製一份 wifi.h.sample
文件,並將其修改爲 wifi.h
文件。這個文件主要用於設置掌控板聯網時的 WiFi 賬號密碼。
打開 wifi.h
文件,修改爲你自己的 WiFi 賬號密碼,如下圖所示:
至此,所有的準備工作都完成了,下面正式開始燒寫程序。
快速入門:第一個掌控板 Siri 項目
在快速入門的第一個項目中,我們主要希望實現 Siri 可以控制掌控板上外接的 LED 燈模塊。
硬件連接
這裏我通過掌控擴展板連接外部的 LED 燈模塊,擴展板隨便選,可以用 DF 出的擴展板,也可以用掌控寶,此處繪製電路圖時使用了 DF 出品的擴展板,如下圖所示,我們將 LED 模塊連接到擴展板的 P13 引腳。
修改例程
在剛剛下載的 esp-homekit-demo
文件夾下,有一個 examples
文件,裏面提供了非常多的可以與蘋果 Homekit 交互的案例(也就是可以用 Siri 控制),我們在裏面找到 esp32
文件夾,這個文件夾裏面提供了 ESP32 相關的例程,可以適用於掌控板。
我們打開 esp32
文件夾,注意到裏面的 led
文件了麼?這篇教程,我就將教大家上傳這個程序,實現 Siri 控制 LED 燈亮滅的程序。當然學會這個後,控制家裏的電燈也是一樣的道理,加個繼電器開關即可。
我們進入這個文件夾,找到 led.c
文件,這裏面編寫的就是主要程序,用你熟練的文本編輯器或 IDE 打開它。具體的程序原理,這篇文章暫時就不講了,涉及到比較多的內容,後面有時間慢慢講,我們主要關注下面幾個地方。
第一個地方是連接 LED 的 GPIO 引腳設置。注意這裏是 GPIO 引腳編號,而不是掌控板上的 Px 引腳編號。
由於我們前面電路連接的是掌控板 P13 引腳,查看掌控板 ESP32 的引腳定義,發現 P13 對應的 GPIO 編號是 IO18,所以修改程序中的 led_gpio = 18
。
然後再來看一下設備設置信息。如下圖所示,其中 1 和 2 是用於設置 HomeKit 外設參數的,包括名字、廠商、序列號、型號、固件號等,可以不用修改。3 是用來設置配對密碼的,待會要將這個外設加入 iPhone 的“家庭”軟件時會用到, 請記住配對密碼!這兩個地方修改完之後,程序就完成了。
下面我們將進入程序編譯以及上傳環節。
上傳程序
先用 USB 線將掌控板連上電腦,然後打開 MSYS2 的終端窗口,還記得在哪裏打開麼?忘了的話,往前翻一下。然後切換到 esp-homekit-demo
路徑下
cd ~/esp/esp-homekit-demo/
然後輸入以下命令,並回車。menuconfig
命令主要用於對項目程序進行編譯和上傳設置:
make -C examples/esp32/led menuconfig
輸入上述命令後,會彈出 menuconfig
配置界面。
menuconfig 使用技巧:
- 使用 up & down 組合鍵在菜單中上下移動
- 使用 Enter 鍵進入一個子菜單,Escape 鍵退出子菜單或退出整個菜單
- 輸入
?
查看幫助信息,Enter 鍵退出幫助屏幕- 使用空格鍵或
Y
和N
鍵來使能 (Yes) 和禁止 (No) 帶有複選框 “[*]
” 的配置項- 當光標在某個配置項上面高亮時,輸入
?
可以直接查看該項的幫助信息- 輸入
/
搜索配置項
我們主要修改其中的 Serial flasher config
,也就是上傳程序的串口參數,如下圖所示:
將其中的 Default serial port
修改爲掌控板連接電腦的端口號,如下圖所示,然後保存退出即可。
然後繼續在 MSYS2 的終端窗口輸入以下命令,對程序進行編譯:
make -C examples/esp32/led all
這個過程時間比較長,約 2 分鐘左右,請耐心等待。編譯完成後,如果程序沒有錯誤,就會出現類似下圖界面:
接着擦除掌控板上原來已有的程序:
make -C examples/esp32/led erase_flash
擦除程序過程中,出現 Connecting…… 時,注意要按一下掌控板上的 A 鍵 1 秒左右。
擦除完成後,如下圖所示:
接着正式開始上傳剛剛修改的 led 程序,繼續輸入以下命令:
make -C examples/esp32/led flash
上傳程序過程中,出現 Connecting…… 時,同樣也要按一下掌控板上的 A 鍵 1 秒左右。
上傳完成後,你的程序就已經在掌控板裏面了。在 MSYS2 的終端窗口輸入以下命令:
make -C examples/esp32/led monitor
這個命令可以讓我們類似串口助手一樣,查看相應的調試信息,如下圖所示:
接下來就可以掏出你的 iPhone 或 iPad 進行配對啦。
配對 iPhone
首先找到 iPhone 上自帶的家庭 App,我的手機系統是英文,可能顯示稍有不同,大家對照圖片即可。
打開家庭 App,這是蘋果生態系統裏的智能傢俱控制程序,可以用 Siri 去控制接入其中的設備、查看傳感器信息等。可以在家庭 App 主頁上看到,我已經接入了一個 LED 燈(紅燈)設備,下面我將教你如何接入另一個設備。
點擊 App 右上角的 “+” 號,在彈出的選擇按鈕中選擇 Add Accessory。
點擊箭頭所指處,選擇使用配對密碼進行配對。
可以看到有一個 LED-XXXX 的設備等待我們連接,點擊選擇:
接下來會彈出警告提醒,不用管它,點擊 Add Anyway,然後輸入配對密碼。還記得配對密碼嗎?忘了的話,回到程序中看看。
輸入配對密碼之後,系統就會提示你設備添加成功。
爲了方便記憶,我們可以修改設備默認的名字和所在房間的名稱,比如我將 LED 名稱修改爲“藍燈”,房間名稱修改爲“掌控板”。
回到家庭 App 主頁面,看到剛剛添加的“藍燈”了麼?
Hey Siri
接下來就盡情用 Siri 玩耍吧!
Siri 是支持自然語言識別的,如果你像我一樣添加了多個設備,比如兩盞燈,你就可以用語音命令控制兩盞燈同時打開或關閉。比如:
- Hey Siri,打開所有燈;
- Hey Siri,關閉掌控板;
- Hey Siri,打開紅燈。
搞定!