Raspberry Pi(树莓派)创建你自己的 Google Assistant:将您的家变成智能家居

前一段时间,PDA 个人数字助理在手机出现之前就开始流行起来。现在是SDA(智能数字助理)的时候了。10月4日,Google推出了 Google Home mini 和 Max 音箱,在后台使用 Google Assistant。而从 10 月 19 日起,这些音箱将在 7 个国家销售,价格为 49 美元。

Google 在一年前推出类似于 Amazon Echo 系列音箱的时候一点也不落后。现在谷歌正在变得更加糟糕,并且对其他竞争对手产生了反响。微软也在与 Cortana 争斗。另外像三星和 Sonos 这样的硬件厂商也参加了 SDA 竞赛。

在这个博客中,我们将看到如何从 Raspberry Pi 制作一个类似的 SDA。

步骤0:准备

材料清单

在本玩法里,我们需要以下的软硬件:

硬件

  • Raspberry Pi
  • USB 麦克风
  • LED
  • 扬声器

软件

  • Google 账户
  • Node.js
  • Python

架构图

下图所示的系统架构,描述了来自用户的输入,经由麦克风和 Google Assistant 进行处理,IFTTT 接收到 hotword ,并触发 Node.js 服务器命令,该命令调用 Python 程序来打开或关闭LED。但是架构灵活,每个组件都可以独立工作。这意味着,Node.js 服务器能分别触发 LED,Python 程序分别触发LED,并且它们也能在一起工作。

Raspberry Pi Google Assistant 架构图

步骤

  1. 为 Raspberry Pi 设置麦克风和扬声器
  2. 在 Pi 中设置 Node.js 和 Python
  3. 设置 Google Assistant API
  4. 电路和 LED 开关
  5. 使用 IFTTT 和 ngrok 设置操作
  6. 整合和测试

步骤1:为 Raspberry Pi 设置麦克风和扬声器

树莓派(Raspberry Pi)没有内置麦克风来捕捉声音。所以,让我们使用 USB 麦克风来获取语音命令。

从树莓派(Raspberry Pi )终端,键入以下命令列出音频捕获设备:

arecord -l

请从命令中检查设备 ID。这将是像 USB PnP 声音设备。默认情况下,内置的声卡将是 o,这个新的 USB 麦克风将有为 1 的 card 和为 0 的 device ID。

也有其他方法来检查,如下面的命令:

alsamixer

它将打开一个窗口,在那里可以看到 USB PnP 声卡

由于是新的卡(card),我们需要修改默认的声音配置文件

通过键入命令编辑现有的声音配置文件:

sudo nano /etc/asound.conf
pcm.!default {
  type asym
  capture.pcm "mic"
  playback.pcm "speaker"
}
pcm.mic {
  type plug
  slave {
    pcm "hw:1,0"
  }
}
pcm.speaker {
  type hw
  card 0
}
ctl.!default {
 type hw card 0
}

根据配置,如果有人使用多个设备,只需找到卡(card)号和设备号,并在麦克风下修改该文件。在这里,我假设是:pcm "hw:1,0"

同时,复制一份到 /home/pi

现在通过录一份音,来检查设置并确认麦克风正在工作:

arecord –format=S16_LE –duration=5 –rate=16k –file-type=wav out.wav

通过输入命令录制回放录音:

speaker-test -t wav

步骤2:设置 Python 和 Node.js 环境

从主目录(/home/pi),一个接一个地执行下面的命令:

sudo apt-get update
sudo apt-get install portaudio19-dev libffi-dev libssl-dev
sudo apt-get install python3-dev python3-venv
python3 -m venv genv
genv/bin/python -m pip install --upgrade pip setuptools
source genv/bin/activate genv
python -m pip install --upgrade google-assistant-library
python -m pip install google-assistant-sdk[samples]
pip install --upgrade google-auth-oauthlib[tool]

步骤3:允许 Google Assistant 云项目

在这一步中,我们将创建 Google云平台的 Google Assistant 客户端 ID 和凭证。

从Google Cloud平台(GCP)创建一个新项目,存储项目 ID。 然后从 API Manager 连接到 Google Assistant API,然后启用活动的网页、应用程序、设备和语音。

然后从 OAuth 屏幕获取凭据。 下载存储 OAuth 密钥信息的 JSON 文件,并将其传输到树莓派上。

然后执行以下的命令:

(genv) google-oauthlib-tool –client-secrets “PATH_TO_YOUR_JSON_FILE“ –scope https://www.googleapis.com/auth/assistant-sdk-prototype –save –headless

如果你是从远程 ssh 终端运行,则需要添加 headless 参数。

在此之后,您将重新指引一个许可页面,在那里必须给予 “允许” (allow)许可。

步骤4:电路和 LED 开关

在树莓派 GPIO 引脚 23 需要连接到 LED 的正极,LED 的 GND 引脚到 Raspberry Pi 的 LED。

通过以下的脚本检测 LED 是否工作:

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.OUT)
GPIO.output(23,1)

步骤5:设置 IFTTT 和 ngrok

在这一步中,我们需要运行 Node.js 服务器来监听特定的端口。我使用了 KylPeacock 的代码。

这个脚本在内部调用上面的 python 脚本,来使用 python-shell 命令打开或关闭 LED。

但是,Node.js 服务器在本地实例上运行,而 Google Assistant 在云上运行。所以我们需要获取互联网网址。

我使用 ngrok 通过输入下面的命令,来获得IP地址,它将提供互联网 IP 地址。

./ngrok http 8000

现在,每当你说话或者任何的关键词(如 Toggle lights)时, Google Assistant 都需要调用此 URL。为此,我们将使用 Webhook 来分配触发器和操作。登录到 IFTTT 网站,选择 Google Assistant,然后选择说一个简单的词,然后选择 webhook 作出触发。

IFTTT 配置

点击“Save”。

使用 Postman,可以通过运行这个 URL 来测试 LED 是否正在改变状态。

步骤6:整合和测试

现在,我们要做的是集成所有的东西,并测试:发光二极管,扬声器,麦克风,Node.js 服务器,IFTTT, Google Assistant。只需要通过发出这个命令:

python -m googlesamples.assistant.grpc.pushtotalk

以下是说”Toggle lights“ 时的,命令提示符的输出:

命令行输出

使用 Google Assistant 的其他好处是,任何运行 Google Assistant 的设备现在都可以控制此设备。 例如,我从手机上运行命令,得到相同的结果:

手机运行 Google Assistant

下一步

由于我们可以远程控制 LED,我们可以建立许多这样的助手程序。

例如,我打算建立会说话的镜子,在刮胡子的时候我会用它来看新闻。

或建立许多交易,如预订、房间预订,订购一个蛋糕等。是这个助手的其他可能的用例。

谷歌建议使用 Dialogflow,或 actions SDK 用于这种复杂的解决方案。

你打算建立什么?

原文链接:http://icircuit.net/make-google-assistant-turn-home-smart-home/2216

参考资料:

https://github.com/krpeacock/google_home_starter

https://becominghuman.ai/turn-your-raspberry-pi-into-homemade-google-home-9e29ad220075

https://www.hackster.io/Salmanfarisvp/googlepi-google-assistant-on-raspberry-pi-9f3677#toc-step-1–setup-raspberry-pi-1

https://developers.google.com/actions/dialogflow/

http://gadgets.ndtv.com/videos/google-home-mini-hands-on-does-it-work-in-india-470137

尚未评分
您的评分将帮助我们做出更好的玩法

观光\评论区

Copyright © 2017 玩点什么. All Rights Reserved.