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 做过智能家居系统,具体教程可以查看:
以下是这个方案的演示视频:
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的优秀参考。
如果你只想看精简版的,请继续往下看。你需要准备:
首先你需要安装 Git 环境。Git 是做什么的呢?说的简单点,就是快速从 GitHub 下载代码的工具。安装方案很简单,从 Git 官网(https://git-scm.com/)下载最新的安装包,然后双击打开 exe 安装文件,一路 Next 就行。
快速设置的方法是从 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)设置开发环境。
工具链安装完后,你还需要 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 程序是 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 可以控制掌控板上外接的 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 上自带的家庭 App,我的手机系统是英文,可能显示稍有不同,大家对照图片即可。
打开家庭 App,这是苹果生态系统里的智能家具控制程序,可以用 Siri 去控制接入其中的设备、查看传感器信息等。可以在家庭 App 主页上看到,我已经接入了一个 LED 灯(红灯)设备,下面我将教你如何接入另一个设备。
点击 App 右上角的 “+” 号,在弹出的选择按钮中选择 Add Accessory。
点击箭头所指处,选择使用配对密码进行配对。
可以看到有一个 LED-XXXX 的设备等待我们连接,点击选择:
接下来会弹出警告提醒,不用管它,点击 Add Anyway,然后输入配对密码。还记得配对密码吗?忘了的话,回到程序中看看。
输入配对密码之后,系统就会提示你设备添加成功。
为了方便记忆,我们可以修改设备默认的名字和所在房间的名称,比如我将 LED 名称修改为“蓝灯”,房间名称修改为“掌控板”。
回到家庭 App 主页面,看到刚刚添加的“蓝灯”了么?
接下来就尽情用 Siri 玩耍吧!
Siri 是支持自然语言识别的,如果你像我一样添加了多个设备,比如两盏灯,你就可以用语音命令控制两盏灯同时打开或关闭。比如:
搞定!