铁熊玩创客 | 学会掌控板 + Siri 语音控制,只要半小时!

2019-08-192.2万
精华项目
AI 快速预览详细 收起
本教程教你如何使用掌控板和Siri实现语音控制LED灯。首先,你需要准备文本编辑器、掌控板或其他ESP32开发板、Git等工具。接着,安装ESP32工具链和ESP-IDF框架,并下载ESP HomeKit Demo程序。通过修改例程中的GPIO引脚配置和配对密码,你可以实现Siri控制LED灯的亮灭。整个过程大约需要半小时,适合家长与孩子一起动手实践。
铁熊玩创客 | 学会掌控板 + Siri 语音控制,只要半小时!图1


话不多说,先上效果演示视频:




铁熊玩创客 | 学会掌控板 + Siri 语音控制,只要半小时!图2

# 前言 #

前段时间,我在公众号上面发了一篇文章:掌控板 V1.1 语音识别初体验

在这篇文章中,我使用了还处于测试阶段的掌控板 V1.1 写了一篇语音识别的教程。好多老师看了后,都迫不及待想要玩一下掌控板语音识别功能,但无奈掌控板目前在售的最新版本(V1.0.1)还不支持这个功能,只能作罢。而且从我测试的结果来看,目前掌控板语音识别效果不是很理想。

于是我就想,还有没有其他方案可以做到语音识别呢?

看着手里的 iPhone,是时候轮到人工智障 Siri 上场了!



可是怎么做才可以让 Siri 完成智能家居的控制呢?可能很多人会说,加一个 Raspberry Pi (树莓派),在上面运行 Home Assistant 框架,变成智能家居网关,然后再用掌控板(ESP32)做外设,就可以实现了 DIY 的 Siri 语音控制智能家居方案了。

的确,我们可以用这种方法去实现很复杂的智能家居控制系统,而且我之前就利用过 Home Assistant 框架、树莓派和 ESP8266 做过智能家居系统,具体教程可以查看:

  • Hey Siri,打开 HAY 旋转灯:https://mc.dfrobot.com.cn/thread-26865-1-1.html
  • Hey Siri,请告诉我传感器数据:https://mc.dfrobot.com.cn/thread-28859-1-1.html


以下是这个方案的演示视频:



既然掌控板的主控芯片是 ESP32,而 ESP32 又是 ESP8266 的升级版,那么 ESP32 当然也同样可以接入 Home Assistant 系统。随着时间的推移,Home Assistant 系统也有了很多升级,功能也越来越全面,大家可以自行去尝试学习下这种方法。

Home Assistant 虽然是一个很强大的框架,但是如果我们只是做一些简单的灯光控制,而且还要用到树莓派,未免有点大材小用了。

所以这篇教程用的却是另一种方法,我们让掌控板或 ESP32 不用树莓派就可以直连 IPhone 上的 Siri。



具体怎么做呢?请继续往下看。

重要的事情说三遍:

以下教程基于 Windows 系统!
以下教程基于 Windows 系统!
以下教程基于 Windows 系统!

如果你用的是 Linux 系统……你都用 Linux 系统了,这还难得倒你么?
如果你用的是 macOS 系统……土豪,你不需要折腾,直接买买买那些支持 Siri 的设备就行!


铁熊玩创客 | 学会掌控板 + Siri 语音控制,只要半小时!图3

# 准备工作 #


如果你是高手,可以直接看这里:快速入门——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) 应用的默认地址:

[mw_shl_code=bash,true]mkdir -p ~/esp[/mw_shl_code]

输入 `cd ~/esp` 就进入到新创建的目录。如果没有错误信息出现则表明此步骤已完成。

[mw_shl_code=bash,true]cd ~/esp[/mw_shl_code]



请不要关闭这个窗口,后续步骤将会使用这个窗口来为掌控板(ESP32)设置开发环境。

## 下载 ESP-IDF 框架


工具链安装完后,你还需要 ESP32 相关的 API 库。API 库在 [ESP-IDF 仓库](https://github.com/espressif/esp-idf) 中。

继续在 MSYS2 的终端窗口中输入以下命令,使用 `git clone` 命令克隆(下载) ESP-IDF 远程仓库:

[mw_shl_code=bash,true]cd D:\esp
git clone -b v3.2.2 --recursive https://github.com/espressif/esp-idf.git[/mw_shl_code]

该命令首先切换到 `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` 命令:

[mw_shl_code=bash,true]export IDF_PATH="D:/esp/esp-idf"[/mw_shl_code]



然后保存并关闭该文件即可。

至此 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 的终端窗口运行一下命令:

[mw_shl_code=bash,true]cd ~/esp
git clone https://github.com/maximkulkin/esp-homekit-demo.git
cd esp-homekit-demo
git submodule update --init --recursive[/mw_shl_code]

然后进入 `esp-homekit-demo` 目录,复制一份 `wifi.h.sample` 文件,并将其修改为 `wifi.h` 文件。这个文件主要用于设置掌控板联网时的 WiFi 账号密码。



打开 `wifi.h` 文件,修改为你自己的 WiFi 账号密码,如下图所示:



至此,所有的准备工作都完成了,下面正式开始烧写程序。


铁熊玩创客 | 学会掌控板 + Siri 语音控制,只要半小时!图4

# 快速入门:第一个掌控板 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` 路径下

[mw_shl_code=bash,true]cd ~/esp/esp-homekit-demo/[/mw_shl_code]



然后输入以下命令,并回车。`menuconfig` 命令主要用于对项目程序进行编译和上传设置:

[mw_shl_code=bash,true]make -C examples/esp32/led menuconfig[/mw_shl_code]



输入上述命令后,会弹出 `menuconfig` 配置界面。

> menuconfig 使用技巧:
>
> - 使用 up & down 组合键在菜单中上下移动
> - 使用 Enter 键进入一个子菜单,Escape 键退出子菜单或退出整个菜单
> - 输入 `?` 查看帮助信息,Enter 键退出帮助屏幕
> - 使用空格键或 `Y` 和 `N` 键来使能 (Yes) 和禁止 (No) 带有复选框 “``” 的配置项
> - 当光标在某个配置项上面高亮时,输入 `?` 可以直接查看该项的帮助信息
> - 输入 `/` 搜索配置项

我们主要修改其中的 `Serial flasher config` ,也就是上传程序的串口参数,如下图所示:





将其中的 `Default serial port` 修改为掌控板连接电脑的端口号,如下图所示,然后保存退出即可。



然后继续在 MSYS2 的终端窗口输入以下命令,对程序进行编译:

[mw_shl_code=bash,true]make -C examples/esp32/led all[/mw_shl_code]



这个过程时间比较长,约 2 分钟左右,请耐心等待。编译完成后,如果程序没有错误,就会出现类似下图界面:



接着擦除掌控板上原来已有的程序:
[mw_shl_code=bash,true]make -C examples/esp32/led erase_flash[/mw_shl_code]



**擦除程序过程中,出现 Connecting…… 时,注意要按一下掌控板上的 A 键 1 秒左右**。



擦除完成后,如下图所示:



接着正式开始上传刚刚修改的 led 程序,继续输入以下命令:

[mw_shl_code=bash,true]make -C examples/esp32/led flash[/mw_shl_code]



**上传程序过程中,出现 Connecting…… 时,同样也要按一下掌控板上的 A 键 1 秒左右**。



上传完成后,你的程序就已经在掌控板里面了。在 MSYS2 的终端窗口输入以下命令:

[mw_shl_code=bash,true]make -C examples/esp32/led monitor[/mw_shl_code]

这个命令可以让我们类似串口助手一样,查看相应的调试信息,如下图所示:



接下来就可以掏出你的 iPhone 或 iPad 进行配对啦。


铁熊玩创客 | 学会掌控板 + Siri 语音控制,只要半小时!图5

# 配对 iPhone #


首先找到 iPhone 上自带的**家庭 App**,我的手机系统是英文,可能显示稍有不同,大家对照图片即可。



打开**家庭 App**,这是苹果生态系统里的智能家具控制程序,可以用 Siri 去控制接入其中的设备、查看传感器信息等。可以在家庭 App 主页上看到,我已经接入了一个 LED 灯(红灯)设备,下面我将教你如何接入另一个设备。



点击 App 右上角的 “**+**” 号,在弹出的选择按钮中选择 Add Accessory。



点击箭头所指处,选择使用配对密码进行配对。



可以看到有一个 LED-XXXX 的设备等待我们连接,点击选择:



接下来会弹出警告提醒,不用管它,点击 Add Anyway,然后输入配对密码。还记得配对密码吗?忘了的话,回到程序中看看。



输入配对密码之后,系统就会提示你设备添加成功。





为了方便记忆,我们可以修改设备默认的名字和所在房间的名称,比如我将 LED 名称修改为“蓝灯”,房间名称修改为“掌控板”。



回到家庭 App 主页面,看到刚刚添加的“蓝灯”了么?





铁熊玩创客 | 学会掌控板 + Siri 语音控制,只要半小时!图6

# Hey Siri #


接下来就尽情用 Siri 玩耍吧!

Siri 是支持自然语言识别的,如果你像我一样添加了多个设备,比如两盏灯,你就可以用语音命令控制两盏灯同时打开或关闭。比如:

- Hey Siri,打开所有灯;
- Hey Siri,关闭掌控板;
- Hey Siri,打开红灯。



搞定!





# 广告时间 #

最后再打个小广告:欢迎关注我的个人公众号“铁熊玩创客”,不 kan 定 xin 期 qing 更新创客制作、技术教程以及一些胡言乱语。

铁熊玩创客 | 学会掌控板 + Siri 语音控制,只要半小时!图7


# 往期作品 #


## 创客技巧

- 创客项目缺少高颜值电路图?看这里就对了:https://mc.dfrobot.com.cn/thread-289862-1-1.html
- 小白也能学会的激光切割创意盒子设计方法:https://mc.dfrobot.com.cn/thread-276550-1-1.html

## 桌面机器人

- 桌面萌宠 Pando,这个机器人靠卖萌为生好多年:https://mc.dfrobot.com.cn/thread-35162-1-1.html
- 桌面萌宠 Pandy,谁说智能车不能卖萌:https://mc.dfrobot.com.cn/thread-36721-1-1.html
- 吃货战车:谁说泡面只能用来填肚子:https://mc.dfrobot.com.cn/thread-34679-1-1.html
- 纯野生黑科技,分分钟教你自制最skr全向麦熊小车:https://mc.dfrobot.com.cn/thread-268968-1-1.html
- 不会垃圾分类?教你制作一个瓦力机器人来帮你:https://mc.dfrobot.com.cn/thread-296340-1-1.html

## 智能家居

- Hey Siri, 打开 HAY 旋转灯:https://mc.dfrobot.com.cn/thread-26865-1-1.html
- Hey Siri,请告诉我传感器数据:https://mc.dfrobot.com.cn/thread-28859-1-1.html

## 创意生活

- HAY,你好 ── DIY HAY旋转灯:https://mc.dfrobot.com.cn/thread-26212-1-1.html
- DIY 你的专属酷炫照片投影灯:https://mc.dfrobot.com.cn/thread-26900-1-1.html
- 好色灯:你们吸猫,我吸色:https://mc.dfrobot.com.cn/thread-34483-1-1.html
- DIY 你的专属酷炫照片投影灯:https://mc.dfrobot.com.cn/thread-26900-1-1.html
- 没有什么问题是猜拳不能解决的:https://mc.dfrobot.com.cn/thread-38060-1-1.html
- 律动头饰皇冠:每个女孩心中都有一个公主梦:https://mc.dfrobot.com.cn/thread-267927-1-1.html

## 学生作品

- 陈朔:戒烟帽:https://mc.dfrobot.com.cn/thread-280204-1-1.html
- 梁立昊:体感骑行安全帽:https://mc.dfrobot.com.cn/thread-280093-1-1.html

## HCRbot 机器人(SLAM)


- HCRbot 系列 1──HCRbot 机器人简介:https://mc.dfrobot.com.cn/thread-26938-1-1.html
- HCRbot 系列 2──HCRbot 硬件介绍与设置:https://mc.dfrobot.com.cn/thread-26939-1-1.html
- HCRbot 系列 3──HCRbot 上位机 PC 端软件设置:https://mc.dfrobot.com.cn/thread-26975-1-1.html
- HCRbot 系列 4──HCRbot下位机设置(树莓派版):https://mc.dfrobot.com.cn/thread-27020-1-1.html
- HCRbot 系列 5──HCRbot下位机设置(Odroid XU4版):https://mc.dfrobot.com.cn/thread-27161-1-1.html
- HCRbot 系列 6──HCRbot 底层驱动 OpenCR 设置:https://mc.dfrobot.com.cn/thread-27296-1-1.html
- HCRbot 系列 7──启动 HCRbot 机器人:https://mc.dfrobot.com.cn/thread-28248-1-1.html
- HCRbot 系列 8──远程控制 HCRbot 机器人:https://mc.dfrobot.com.cn/thread-29354-1-1.html
- HCRbot 系列 9──控制 HCRbot 机器人绘制平面地图(SLAM):https://mc.dfrobot.com.cn/thread-29936-1-1.html

## 掌控板

- 让掌控板像 Mixly 串口监视器一样绘图:https://mc.dfrobot.com.cn/thread-288929-1-1.html
- 掌控超声波传感器?可能没你想的那么简单:https://mc.dfrobot.com.cn/thread-296500-1-1.html
- 首发测评 | 掌控板 V1.1 测试版语音识别初体验:https://mc.dfrobot.com.cn/thread-296662-1-1.html

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(15)
HatsuneMiku
HatsuneMiku
Mark下来学习学习w
连连
连连
# make -C examples/esp32/led menuconfig
make: 进入目录“/home/Administrator/esp/esp-homekit-demo/examples/esp32/led”
Makefile:9: /make/project.mk: No such file or directory
make: *** 没有规则可制作目标“/make/project.mk”。 停止。
make: 离开目录“/home/Administrator/esp/esp-homekit-demo/examples/esp32/led”
请问这个是怎么回事
270330905
270330905
学习学习。
汤半泛
汤半泛
厉害得不行了
展翼骐骥
展翼骐骥
建议楼主把公众号的二维码贴出来,这样大家加的几率会更大。
铁熊
铁熊
作者
回复展翼骐骥
感谢提醒,遗漏了
天才的青春雨少年
天才的青春雨少年
厉害了,我的耗
Icarus
Icarus
挺好玩的
Icarus
Icarus
挺好玩的
Icarus
Icarus
挺好玩的
gada888
gada888
确实精品
arling
arling
请问一下,为什么会出现这个样子呢?
铁熊
铁熊
作者
回复arling
因为是从github下载的,所以很有可能是网络原因
rzyzzxw
rzyzzxw
铁熊精品
汤果
汤果
看上去好头疼。今天我试着用百度的语音助手写个开关灯的程序。折腾了半天放弃了。目前好像底层的代码没写好,抛出异常我没法解决。期待大神
铁熊
铁熊
作者
回复汤果
我之前试过百度的语音识别,其实就是根据它的API去POST一堆参数就可以了。但是卡在base64那里了。micropython的base64好像有点问题
DI玩
DI玩
markdown的排版果然666,但是图片咋解决?社区和公众号的图片不能互相调用,还是要手动链接?
DI玩
DI玩回复铁熊
学到手艺了,谢谢!
铁熊
铁熊
作者
回复DI玩
用markdown写文档的时候,用第三方图床,比如七牛云、SM.MS图床、聚合图床等。写完之后,在支持markdown的地方直接粘贴就好,每个平台会自动从图床链接下载,然后把图片上传到自己的平台。然后在不同的平台排版时,稍微做一些小调整就行。
我一般都是在本地写好markdown文件,然后就可以在DF社区、微信、知乎、CSDN、简书等平台上粘贴了。不然每个平台都排版一遍,会累死的。
KIKI
KIKI
每次的排版都特别整齐哈哈哈哈哈
铁熊
铁熊
作者
回复KIKI
因为我用了markdown哈哈哈,稍微调整一下就好了
- 没有更多了 -