如何使用Raspberry Pi构建DIY Google Home Assistant

由语音控制的助手很快变得司空见惯。许多家庭使用Alexa或Google Home来控制从照明到媒体甚至计时的所有内容。

这些设备运行的技术(至少部分地)适用于所有人。使用Google的Assistant SDK,您可以在自己的设备上使用该服务。本教程介绍了如何在Raspberry Pi上设置Google Assistant,以及如何通过GPIO引脚语音激活LED。

Raspberry Pi Home Assistant所需的硬件

您将需要:

  • 在SD卡上重新安装Raspbian的Raspberry Pi。
  • USB网络摄像头或麦克风。
  • 外部扬声器。
  • Pi LED教程中的电路(可选)
  • 浏览器已登录您的Google帐户。
  • 注意:教程可能有所不同。我纯粹将备用USB网络摄像头用于其麦克风。任何兼容的网络摄像头或麦克风都可以正常工作,并且有大量的Pi兼容设备可以提供帮助。

    此外,我正在使用3.5mm输出的音频。 HDMI和其他输出源也可以使用,尽管它需要修改以下声音设置。

    插入USB网络摄像头和扬声器,并在使用时设置LED电路。

    设置声音

    可以直接在Pi上或通过SSH连接到Pi来遵循本教程。

    两种方法都从终端开始,以检查声音设置。使用命令 arecord -l aplay -l 列出可用设备。

    上图显示USB网络摄像头为卡1 设备0 。记下麦克风和扬声器输出的卡号和设备号。

    现在,确保您位于 / home / pi 目录中,创建一个新文件并打开它在nano中:

    sudo nano .asoundrc

    此目录的内容将根据所使用的卡号和设备号而有所不同。如果需要,可以在此处选择偏向于HDMI输出而不是3.5mm。

    输入上述代码的版本后,按 Ctrl + X 保存并退出。

    通过录制并播放一个短片来测试您的设置:

    可选步骤:如果要更改输入的音量您的麦克风,打开 alsamixer ,然后按 F6 在设备之间循环。

    就是这样!声音已设置。

    创建Google Project

    打开Pi的浏览器,或者,如果您通过SSH连接,请在本地打开浏览器。导航至Google Action Console,然后点击新建项目

    这可能需要一些时间。完成后,将窗口保持活动状态并打开一个新标签-我们将在稍后介绍。

    启用Google Assistant API

    您需要进行一些在线调整将需要继续。导航到Google Assistant API网站,然后点击启用

    该项目还需要活动权限。转到“活动控制"面板,并确保启用了以下活动:

  • 网络和应用活动(包括Chrome历史记录复选框)
  • 设备信息
  • 语音和音频活动
  • 现在您可以继续注册设备。

    注册Raspberry Pi

    返回操作控制台,选择设备注册。在产品下,为您的设备创建一个易于记忆的名称。制造商名称并不重要(但必须在此处),然后为设备类型选择自动

    点击注册型号,然后在在下一个屏幕中,点击下载OAuth 2.0凭据。这会将JSON文件下载到您的计算机。如果您不熟悉JSON文件,请放心,但是学习如何使用JSON值得将来使用!

    Google官方指南建议将文件移至 / home / pi ,因此请打开文件管理器并立即执行此操作。

    SSH用户的其他步骤:

    如果您使用的是SSH,已将JSON文件下载到本地计算机而不是Pi。要传输它,请打开没有SSH连接的单独的终端窗口。在此窗口中,使用以下命令复制客户端秘密JSON文件:

    scp ~/Downloads/client_secret_client-id.json pi@raspberry-pi-ip-address:/home/pi/

    用Pi的IP地址替换“ raspberry-pi-ip-address",并且不要忘记路径前的冒号。如果您将JSON文件下载到另一个位置,请修改您的本地路径以反映此情况。出现提示时输入密码,文件将复制到Pi的主目录。

    切换回SSH终端,并导航至 / home / pi 。输入 ls -l 以列出目录中的文件。您应该看到已传输的客户端机密JSON文件。

    安装SDK

    Google建议在Python虚拟环境中工作。创建一个名为 env 的新虚拟环境。

    如果您以前从未做过,本教程将帮助您学习如何使用Python虚拟环境。

    安装最新版本的Pip,Setuptools和Wheel并激活您的虚拟环境:

    env/bin/python -m pip install --upgrade pip setuptools wheelsource env/bin/activate

    Google助手具有一些依赖项,您现在应该将其安装到虚拟环境中。

    sudo apt-get install portaudio19-dev libffi-dev libssl-dev libmpg123-dev

    最后,安装Google Assistant SDK,示例和OAuth工具。

    python -m pip install --upgrade google-assistant-librarypython -m pip install --upgrade google-assistant-sdk[samples]python -m pip install --upgrade google-auth-oauthlib[tool]

    这是启动和运行所需的一切。如果任何安装失败,请彻底检查拼写和间距。

    对Raspberry Pi进行身份验证

    使用 google-auth-oauthlib [tool]

    google-oauthlib-tool --scope https://www.googleapis.com/auth/assistant-sdk-prototype \      --scope https://www.googleapis.com/auth/gcm \      --save --headless --client-secrets /home/pi/YOUR_CLIENT_SECRET_ID.json

    您需要用下载的文件替换YOUR_CLIENT_SECRET_ID,因此值得首先复制文件名。此客户端ID必须正确。不要更改文件名!

    您应该会收到一条带有链接的消息,要求您粘贴授权码。

    单击该链接将打开浏览器。系统会提示您启用Google帐户中的设备。复制随后的授权代码,并将其粘贴回您的终端窗口。

    您应该收到一条确认信息,其中显示 Credentials Saved:/ home / pi…,这意味着Pi已被已成功使用您的Google帐户授权。

    对其进行测试

    现在一切就绪,现在该对您的Pi Google Assistant进行测试了。使用以下命令运行助手:

    googlesamples-assistant-hotword --project-id my-dev-project --device-model-id my-model

    您将需要用项目ID(位于操作控制台的“设置"齿轮下)替换 my-dev-project 。您的 device-model-id 列在操作控制台的“设备注册"部分下。

    尝试一下!说“ OK Google"并提出问题。听到响应后,您可以在终端中看到程序输出:

    就是这样! Google助手现已在您的Raspberry Pi上运行。请注意,如果输出音量有点低,可以通过说出“嘿,Google,将您的音量提高到80%"来更改它。

    奖金:语音激活的GPIO < /

    可以使用Arduino和Siri来控制灯光,但是有一种更简单的方法。如果您设置了LED,则可以使用Google Assistant来控制声音。

    设置Google Assistant以使用GPIO引脚相对简单,但是需要一些额外的步骤。转到Google Action Console,然后在“设备注册"下找到您的设备。单击它,然后打开特征菜单:

    打开 OnOff 特征,然后单击保存。

    现在确保您位于 env 虚拟环境中,使用git将一个版本的SDK克隆到您的Pi:

    git clone https://github.com/googlesamples/assistant-sdk-python

    由于这是一个虚拟环境,因此您需要安装

    pip install rpi.gpio

    现在,导航到包含 hotword.py 脚本的文件夹。

    cd assistant-sdk-python/google-assistant-sdk/googlesamples/assistant/library

    修改脚本

    您需要在hotword.py脚本中添加几行,因此在nano编辑器中将其打开:

    nano hotword.py

    在import语句下,为RPi.GPIO添加您自己的文本。

    import RPi.GPIO as GPIO

    查找 process_event 方法。在第66行,删除或注释掉print语句,并添加if语句以控制LED。

    #print('Do command', command, 'with params', str(params))if command == "action.devices.commands.OnOff":    if params['on']:        print('---------------')            print('Led turned on')        print('---------------')            GPIO.output(18, GPIO.HIGH)    else:            print('---------------')                print('Led turned off')            print('---------------')                GPIO.output(18, GPIO.LOW)

    This logic controls the LED, but so far it isn’t configured to output. Set it up in the main() function before the process_event method gets called.

    GPIO.setmode(GPIO.BCM)GPIO.setup(18, GPIO.OUT, initial=GPIO.LOW)

    现在,GPIO引脚设置为输出并初始化为低电平。保存并退出。您可以通过传递模型ID号(在操作控制台中找到)作为参数来运行修改后的脚本。

    python hotword.py --device-model-id YOUR-MODEL-ID-HERE

    终端输出与以前相同,并且助手将作为标准输出。但是现在,当您说``OK Google,打开''时,您将看到一个新的输出:

    注意:

    您还应该看到您的LED也亮起!

    您自己的DIY Raspberry Pi Google Home Assistant

    该项目很好地介绍了如何使用Google API服务。现在您已经有了Google Assistant设备,尝试一些最佳的Google Home命令。

    标签: