Skip to content

Commit e2c7e3d

Browse files
committed
new file: _posts/2018-01-29-aiy-voice-kit.md
1 parent c74b54f commit e2c7e3d

11 files changed

+112
-5
lines changed

_posts/2015-10-05-cpp-variable-init.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ CPerson person; // 初始化:以空的参数列表调用构造函数
3737

3838
# 默认初始化规则
3939

40-
定义基本数据类型变量(单个值、数组)的同时可以指定初始值,如果未指定C++回去执行**默认初始化**(default-initialization)。
40+
定义基本数据类型变量(单个值、数组)的同时可以指定初始值,如果未指定C++会去执行**默认初始化**(default-initialization)。
4141
那么什么是"默认初始化"呢?
4242

4343
* 栈中的变量(函数体中的自动变量)和堆中的变量(动态内存)会保有不确定的值;
@@ -163,7 +163,7 @@ int main(){
163163
```
164164

165165
规则还是是一样的,默认初始化行为取决于它所属对象的存储类型。
166-
**封闭类中成员对象的内置类型成员变量的"默认初始化"行为取决于当前封闭类对象的存储类型,而存储类型对应的默认初始化规则仍然是不变的**
166+
**封闭类(Enclosing)中成员对象的内置类型成员变量的"默认初始化"行为取决于当前封闭类对象的存储类型,而存储类型对应的默认初始化规则仍然是不变的**
167167

168168

169169
[item4]: /2015/07/22/effective-cpp-4.html

_posts/2017-01-14-raspberrypi-uart.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
2-
title: Raspbian Jessie 的 GPIO 串口配置
3-
tags: Raspbian GPIO UART
2+
title: Raspberry Pi 3 的 GPIO 串口配置
3+
tags: Raspberry GPIO UART
44
---
55

66
[Raspberry Pi][rasp] 开源硬件提供了 [GPIO][gpio] (General Purpose Input/Output) 接口,

_posts/2017-01-28-pwa-explore.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ Web App 也可以启用一些像 Native App 一样的特性:
211211
* PWA (by Google Developers): <https://developers.google.com/web/progressive-web-apps/>
212212
* PWA (by Alex Russell) <https://infrequently.org/2015/06/progressive-apps-escaping-tabs-without-losing-our-soul/>
213213
* AppCache: <https://developer.mozilla.org/zh-CN/docs/Web/HTML/Using_the_application_cache>
214-
* Push Api: https://www.w3.org/TR/push-api/
214+
* Push Api: <https://www.w3.org/TR/push-api/>
215215
* Fetch Api: <https://fetch.spec.whatwg.org/>
216216
* Web Push Protocol: <https://tools.ietf.org/html/draft-ietf-webpush-protocol-12>
217217
* Notification: <https://www.w3.org/TR/notifications/>

_posts/2018-01-29-aiy-voice-kit.md

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
---
2+
title: AIY Voice Kit 初体验
3+
tags: Raspberry GPIO UART
4+
---
5+
6+
[AIY Voice Kit][voice] 是 Google 自然语言识别的一个 Demo 项目,是一个由小纸盒包装的智能设备。
7+
上个月朋友从美帝寄来一套,Harttle 却刚有时间把它组装起来,写这篇文章分享给喜欢折腾的同学。
8+
9+
Voice Kit 自带了麦克风和扬声器,借助 Google Assistant 可以实现类似 Siri 的人机对话,比如问问天气啊交通啊。
10+
此外,由于整个系统基于 Raspberry Pi,而且配备了很棒的扩展板,比原生的 Pi 能做更多的事情。
11+
12+
<!--more-->
13+
14+
# Voice Kit 套装
15+
16+
整个套件由纸板包装,其中有一本很厚的小册子。介绍了详细的组装步骤,以及软件执行步骤。
17+
搞定 Voice Kit 根本不需要会写代码,即使到最后的设备检查都可以通过鼠标双击来执行。
18+
19+
![the suite](/assets/img/blog/iot/the-suite@2x.jpg)
20+
21+
右侧那个就是安装手册。
22+
盒子里包含了 Raspberry Pi 3、纸质外壳、按钮、Voice HAT、Mic Board,以及两条单独的排线。
23+
见这张图(来自 aiyprojects.withgoogle.com 在线手册):<https://aiyprojects.withgoogle.com/static/images/aiy-projects-voice/materials.jpg>
24+
25+
# Voice HAT 介绍
26+
27+
Voice HAT(Hardware Attached on Top)是插在树莓派板子上的扩展板,
28+
语音和按钮等设备占用了 6 个 GPIO,其余都重新排列在板子上。
29+
而且板子上设置了外接电源电路,借此同学们可以做很多事情。
30+
31+
下面仔细介绍一下这个板子,这张图来自 aiyprojects.withgoogle.com 官方:
32+
33+
![hat](https://aiyprojects.withgoogle.com/static/images/aiy-projects-voice/makers/sensors.png)
34+
35+
Voice Kit 设备本身占用了 6 个 GPIO:
36+
37+
GPIO | 用途
38+
--- | ---
39+
20, 21, 19, 16 | ALSA 驱动(I2S)
40+
23 | 按钮状态
41+
25 | LED 状态
42+
43+
传感器常用的 I2C, UART(14,15还特意分出来了再也不用去数了), SPI 都没有占用。
44+
更重要的是其余的 GPIO 分为两组并配备了电源接口,可以直接用作 GPIO,也可以控制外设:
45+
46+
1. Servo0-Servo5:5v/25mA,小电流的 Servo 适合连接类似 LED 之类的设备。
47+
2. Dirver0-Driver4:5v/500mA,可以连接功率更大的设备,+/- 极来自在板子左下角的外接电源。可以参考这个接法:<https://www.raspberrypi.org/magpi/motor-aiy-voice-pi/>
48+
49+
# 组装硬件
50+
51+
整个设备的核心是一个 Raspberry Pi-3,配备了一个扩展板(Voice HAT)用来连接音响和麦克风,都连接好后装入纸盒就完成了。
52+
53+
小册子介绍很详细,也可以在线查看: <https://aiyprojects.withgoogle.com/voice>
54+
所有接口焊接都很结实,几乎整个过程都可以徒手进行。Pi 的外壳需要用十字螺丝刀固定。
55+
安装好后大概是这样的:
56+
57+
![assembled](/assets/img/blog/iot/assembled@2x.jpg)
58+
59+
HDMI、USB、电源口都可以从纸盒的空缺处连接,左侧是电源线和 HDMI,右侧是 Harttle 的 Low 逼键盘和罗技无线鼠标。
60+
61+
# 系统测试
62+
63+
插入 SD 卡后通电并使用 HDMI 连接到显示器后,如果进入了 Raspbian 经典的桌面说明 Raspberry Pi、SD 卡、电源都没有问题:
64+
65+
> [这里](https://dl.google.com/dl/aiyprojects/vision/aiyprojects-2018-01-03.img.xz) 下载 Voice-Kit 镜像并烧录到 SD 卡。
66+
67+
![desktop](/assets/img/blog/iot/workspace@2x.jpg)
68+
69+
点击右上角的 Wifi 即可连接到网络,然后依次双击 Audio Check、Wifi Check 等快捷方式。
70+
按照提示进行,网络和线路的检查。如果连接有问题就需要拆箱检查所有连接,尤其是插口是否正确。
71+
72+
# 软件准备工作
73+
74+
终于到了软件部分,在开始执行软件前还需要一些准备工作:
75+
76+
* 为了语音识别服务,去 GCP(Google Cloud Platform)注册账号免费使用 12 个月,在国内需要绑定 Visa/MasterCard。
77+
会有 1 美元的试缴费几分钟后返还,不要惊慌。
78+
在注册过程中,Google 声称试用结束后除非转为付费账户才会自动扣费,不会像 Amazon ECS 那样欺负人民群众。
79+
* 为了让机器能连上 Google 服务,可以搞一个 vpn 或者代理。建议走 ss 提供 socks5 代理,然后通过 polipo 之类软件转换为 HTTP 代理。搞定后设置 `http_proxy` 环境变量即可正常使用 SD 卡中的软件。
80+
81+
# 尝试执行 Demo
82+
83+
[Harttle](/) 觉得是时候打开命令行了,桌面上有一个 `dev_terminal`,双击它!
84+
如果是 SSH 登录的用户,可以 `source /home/pi/AIY-voice-kit-python/env/bin/activate` 来初始化开发环境。
85+
86+
1. 使用语音识别需要 GCP 账号(见上一步),将你账号对应的 Credentials 下载到 `~/assistant.json`
87+
2. 执行一个软件 `~/AIY-voice-kit-python/src/assistant_grpc_demo.py`
88+
89+
如果一切正常,会得到这样的输出:
90+
91+
```
92+
(env) pi@raspberrypi:~ $ ~/AIY-voice-kit-python/src/assistant_grpc_demo.py
93+
Press the button and speak
94+
[2018-01-29 06:47:32,744] INFO:recorder:started recording
95+
```
96+
97+
按下按钮后进入语音识别状态(此时红色按钮会亮),比如大声说 "How's the weather?",它反应半天后会跟你娓娓道来北京天气如何如何。
98+
这套程序使用内建 pico2wave 来合成语音,因而不支持中文。。
99+
可以试试科大讯飞或百度语音合成,前者支持本地程序但文档惊人,胆大的值得一试。
100+
101+
# Finally
102+
103+
最后感谢我的小乌龟,陪伴我整个无聊的安装过程。
104+
105+
![tortoise](/assets/img/blog/iot/tortoise@2x.jpg)
106+
107+
[voice]: https://aiyprojects.withgoogle.com/voice

assets/img/blog/iot/assembled@2x.jpg

1.3 MB
Loading

assets/img/blog/iot/homekit@2x.png

1.21 MB
Loading
217 KB
Loading

assets/img/blog/iot/pi@2x.jpg

751 KB
Loading

assets/img/blog/iot/the-suite@2x.jpg

2.13 MB
Loading

assets/img/blog/iot/tortoise@2x.jpg

1.12 MB
Loading

0 commit comments

Comments
 (0)