11623浏览
查看: 11623|回复: 21

[高级教程] 铁熊玩创客 | 学会掌控板 + Siri 语音控制,只要半小时!

[复制链接]
铁熊玩创客 | 学会掌控板 + 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

KIKIYA  管理员

发表于 2019-8-20 10:10:51

每次的排版都特别整齐哈哈哈哈哈
回复

使用道具 举报

digi_cow  高级技匠

发表于 2019-8-20 10:45:50

markdown的排版果然666,但是图片咋解决?社区和公众号的图片不能互相调用,还是要手动链接?
回复

使用道具 举报

铁熊  初级技神
 楼主|

发表于 2019-8-20 11:16:30

digi_cow 发表于 2019-8-20 10:45
markdown的排版果然666,但是图片咋解决?社区和公众号的图片不能互相调用,还是要手动链接? ...

用markdown写文档的时候,用第三方图床,比如七牛云、SM.MS图床、聚合图床等。写完之后,在支持markdown的地方直接粘贴就好,每个平台会自动从图床链接下载,然后把图片上传到自己的平台。然后在不同的平台排版时,稍微做一些小调整就行。

我一般都是在本地写好markdown文件,然后就可以在DF社区、微信、知乎、CSDN、简书等平台上粘贴了。不然每个平台都排版一遍,会累死的。
回复

使用道具 举报

铁熊  初级技神
 楼主|

发表于 2019-8-20 11:16:58

KIKIYA 发表于 2019-8-20 10:10
每次的排版都特别整齐哈哈哈哈哈

因为我用了markdown哈哈哈,稍微调整一下就好了
回复

使用道具 举报

汤果  初级技神

发表于 2019-8-20 15:38:05

看上去好头疼。今天我试着用百度的语音助手写个开关灯的程序。折腾了半天放弃了。目前好像底层的代码没写好,抛出异常我没法解决。期待大神
回复

使用道具 举报

rzyzzxw  版主

发表于 2019-8-21 09:19:44

铁熊精品
回复

使用道具 举报

铁熊  初级技神
 楼主|

发表于 2019-8-21 17:13:09

汤果 发表于 2019-8-20 15:38
看上去好头疼。今天我试着用百度的语音助手写个开关灯的程序。折腾了半天放弃了。目前好像底层的代码没写好 ...

我之前试过百度的语音识别,其实就是根据它的API去POST一堆参数就可以了。但是卡在base64那里了。micropython的base64好像有点问题
回复

使用道具 举报

digi_cow  高级技匠

发表于 2019-8-22 19:43:37

铁熊 发表于 2019-8-20 11:16
用markdown写文档的时候,用第三方图床,比如七牛云、SM.MS图床、聚合图床等。写完之后,在支持markdown ...

学到手艺了,谢谢!
回复

使用道具 举报

阿凌  见习技师

发表于 2019-8-24 01:56:13

请问一下,为什么会出现这个样子呢?
201908240155534685.png
回复

使用道具 举报

gada888  版主

发表于 2019-8-25 09:05:28

确实精品
回复

使用道具 举报

铁熊  初级技神
 楼主|

发表于 2019-8-25 16:12:37

阿凌 发表于 2019-8-24 01:56
请问一下,为什么会出现这个样子呢?

因为是从github下载的,所以很有可能是网络原因
回复

使用道具 举报

Icarus  见习技师

发表于 2019-8-25 18:27:15

挺好玩的
回复

使用道具 举报

Icarus  见习技师

发表于 2019-8-25 18:27:29

挺好玩的
回复

使用道具 举报

Icarus  见习技师

发表于 2019-8-25 18:45:03

挺好玩的
回复

使用道具 举报

天才的青春雨少年  学徒

发表于 2019-8-29 10:27:07

厉害了,我的耗
回复

使用道具 举报

展翼骐骥  见习技师

发表于 2019-8-30 11:54:21

建议楼主把公众号的二维码贴出来,这样大家加的几率会更大。
回复

使用道具 举报

铁熊  初级技神
 楼主|

发表于 2019-9-3 18:08:00

展翼骐骥 发表于 2019-8-30 11:54
建议楼主把公众号的二维码贴出来,这样大家加的几率会更大。

感谢提醒,遗漏了
回复

使用道具 举报

岑剑伟  初级技师

发表于 2019-9-9 15:06:52

厉害得不行了
回复

使用道具 举报

270330905  见习技师

发表于 2019-9-23 08:33:02

学习学习。
回复

使用道具 举报

连连  学徒

发表于 2019-10-21 10:27:44

# 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”

请问这个是怎么回事
回复

使用道具 举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail