教程:Alexa室内空气质量
在本教程中,我们将向您展示如何基于树莓派3设置亚马逊Alexa智能扬声器,您可以询问当前的室内空气质量、环境温度和湿度。


先决条件
软件
- AWS帐号和AWS开发者帐号
- 一台安装了SSH的计算机(推荐使用Ubuntu LTS)
- 具备基本的Linux和树莓派技术优势
- 你可在此下载智能音箱资源的样例代码:smart_speaker_resources.tar.gz
硬件组件
- 树莓派3
- 扬声器2-Mics Pi HAT
- SHTC1和SGPC3连接到i2c-1(例如作为树莓派盾牌)
- 1瓦以下的扬声器(我们使用0.5瓦的扬声器)
- JST 2.0微型电缆连接扬声器和Re-Speaker
- 可选:一对垫片和螺丝和一个有机玻璃盖
硬件组装
请注意,在本教程的其余部分,我们将使用Sensirion的环境传感器屏蔽;如果您使用自己的传感器硬件,请确保以相同的方式连接它们,连接到I2颈- 1。
步骤1

安装2 × 12mm2母母垫片与树莓派3、2 × 12mm的屏蔽接头对接2男女间隔到对面的位置。
步骤2

增加2 × 10mm2如下图所示,将母-母间隔器连接到传感器屏蔽的中间孔。
步骤3

将传感器屏蔽插入树莓派3并拧紧。
步骤4

安装2 × 10mm2女-女间隔到扬声器-2麦克HAT。如果你没有有机玻璃罩,你可以跳过这一步。
步骤5

将扬声器板插入传感器板并拧紧。如果你有一个树脂玻璃罩,你也可以堆叠10毫米男女间隔和12毫米男女间隔,并添加如下图所示。
步骤6

将JST 2.0切割到适当的长度,并焊接到扬声器上。
步骤7

将扬声器粘在有机玻璃盖上,并将盖安装在上面。然后,您可以插入JST 2.0电缆。
软件设置
步骤1:准备主机系统
所有说明都假设你运行的是Ubuntu或其他类似debian的操作系统。其他操作系统请参考官方文档在这里.
Sudo apt-get install zip pv . zip
步骤2:设置树莓派
- 从官方主页下载最新的覆盆子拉伸灯图片:www.raspberrypi.org/downloads/raspbian/
- 解压并安装到你的sd卡上。确保输出设备指向SD卡。
解压2017-11-29-raspbian-stretch-lite.zip pv 2017-11-29-raspbian-stretch-lite。img | sudo dd of=/dev/mmcblk0 oflag=sync bs=4M
- 设置SSH连接:
你需要将键盘和显示器连接到树莓派进行初始设置。
使SSH
Sudo systemctl enable SSH Sudo systemctl start SSH
在eth0上设置DHCP并禁用dhcpcd服务(我们将使用dnsmasq设置我们自己的配置)
Sudo systemctl关闭dhcpcd.service
为dnsmasq创建目录
Mkdir -p /etc/dnsmasq.d/
并设置自己的dhcpd服务:创建一个文件/etc/dnsmasq.D /dhcp,内容如下
#只在eth0接口上配置DHCP =eth0 DHCP -range=eth0,192.168.1.100,192.168.1.199,4h #禁用发送DNS服务器和路由器DHCP -option=3 DHCP -option=6
- 网络连接:
创建文件/etc/wpa_supplicant/wpa_supplicant.conf,内容如下:
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ssid="" scan_ssid=1 proto=RSN key_mgmt=WPA-PSK pairwise=CCMP TKIP GROUP= CCMP TKIP psk=" "}
将
编辑/etc/network/interfaces,将其中所有内容替换为以下内容
auto lo auto wlan0 auto eth0 iface lo inet loopback iface default inet dhcp allow-hotplug eth0 iface eth0 inet静态地址192.168.1.10 netmask 255.255.255.0网络192.168.1.0 broadcast 192.168.1.255 allow-hotplug wlan0 iface wlan0 inet dhcp pre-up wpa_supplicant - dext -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf -B pre-down killall wpa_supplicant.conf
现在可以重新启动并完成网络连接
Sudo systemctl restart networking。Service sudo apt install dnsmasq . sh
- 建立SSH连接
您现在可以从您的主机上设置SSH连接以方便访问
ssh-copy-id pi@192.168.1.10
从现在开始,你可以通过ssh pi@192.168.1.10登录树莓派
- 设置我的2C和SPI
我们使用raspi-config为树莓派启用i2c和spi。选项在4接口选项下
sudo raspi-config
注意:如果您愿意,还可以扩展文件系统,这样您就可以使用sd卡的整个空间。通过配置两条udev规则,允许用户访问spi和i2c接口:
Sudo addgroup i2c Sudo addgroup spi
/etc/udev/80-i2c.rules
KERNEL=="i2c-dev", GROUP="i2c", MODE="0660" #为普通i2c驱动设置i2c权限子系统=="i2c", RUN+="/bin/chgrp -R i2c /sys%p", RUN+="/bin/chmod -R i2c =u /sys%p" #为输入型i2c驱动设置i2c权限子系统=="input", RUN+="/bin/chgrp -R i2c /sys%p", RUN+="/bin/chmod -R g=u /sys%p"
/etc/udev/81-spi.rules
KERNEL=="spidev*", GROUP="spi", MODE="0660"
在/boot/config.txt中添加如下文件:/boot/config.txt
Dtparam =i2c0=on Dtparam =i2c1=on Dtparam =i2c_arm=on Dtparam =i2c_vc=on Dtparam =i2c0_baudrate=40000 Dtparam =i2c1_baudrate=40000
在/etc/modules中
I2c-bcm2708 shtc1 SGPXX
现在在树莓派上安装一些我们需要的工具(确保树莓派上的wifi连接正常)
Sudo PIP install virtualenv spidev
- 设置sgpc3驱动程序
将驱动程序源复制到树莓派
SCP sgpxx.tar.gz pi@192.168.1.10:
解包并编译它
安装SGPC3驱动程序和crc8依赖项
mkdir -p src/sgpxx tar -xzf sgpxx.tar.gz -C src/sgpxx #安装CRC8模块cd src git克隆https://github.com/Sensirion/crc8.git cd CRC8 make sudo Install -p -m 644 CRC8。ko /lib/modules/$(uname -r)/kernel/drivers/ sudo depmod -a sudo modprobe crc8 #安装SGPxx驱动cd ~/src/ SGPxx / make sudo Install -p -m 644 SGPxx . exeKo /lib/modules/$(uname -r)/kernel/drivers/iio/ sudo depmod -a sudo modprobe SGPXX
- 重启树莓派
sudo重启
步骤3:安装AlexaPi
我们正在使用AlexaPi项目来设置到Alexa的连接。在安装Alexa Pi之前,您必须设置Alexa语音服务。你可以按照说明(只有1。在亚马逊注册)在这个页面:github.com/alexa-pi/AlexaPi/wiki/Installation
确保您还添加192.168.1.10:5050作为注册的允许端点,这样您就可以从您的主机上注册alexa设备。
网上还有很多其他关于如何注册设备的资源。确保你写下了所有的证书,在这一步你会需要它们。
在树莓派上安装AlexaPi的操作步骤如下:
sudo su cd /opt git克隆https://github.com/alexa-pi/AlexaPi.git /opt/AlexaPi/src/scripts/setup.sh
你会被问到一些信息。
对于前几个问题,你可以点击enter,默认值是好的:
- 操作系统:debian
- 你的设备:覆盆子
- 你想让AlexaPi在引导时运行吗?1 - yes systemd
- 你也想安装Airplay支持吗?是(或不是,没关系)
当你被问到客户端设置时:
Enter your Device Type ID []: Enter your Security Profile Description []: Enter your Security Profile ID []: Enter your Client ID []: Enter your Client Secret []:
AlexaPi安装完成后,您必须打开192.168.1.10在你的主机上,它会把你转发到AWS登录。用你的亚马逊账户登录,alexa设备就会连接到你的用户。您现在还应该能够找到并配置下面的设备alexa.amazon.com
补丁AlexaPi
拷贝以下2个文件到“/opt/AlexaPi/src/ AlexaPi/ device_platforms/”目录下
- ap102.py
- respeaker2micplatform.py
更新/etc/opt/AlexaPi/config.Yaml并将设备更改为“respeaker2mic”,并将respeaker2mic配置添加到平台:
platform: device: "respeaker2mic" platforms: respeaker2mic: # GPIO Pin with button connected button: 17
设置SPI和GPIO访问
Sudo adduser alexapi spi Sudo adduser PI gpio Sudo adduser PI i2c
(可选)root和pi用户的音频调试
Sudo adduser root audio Sudo adduser PI音频
启动时加载SHTC1和SGPC3。将以下文件添加到/etc/rc.local
Echo sgpc1x 0x58 | sudo tee /sys/class/i2c-adapter/i2c-1/new_device Echo shtc1 0x70 | sudo tee /sys/class/i2c-adapter/i2c-1/new_device udevadm触发器
- 步骤5:设置ReSpeaker 2麦克风头
在树莓派上
Sudo su CD /opt git克隆https://github.com/respeaker/seeed-voicecard.git CD seeed-voicecard Sudo ./install.sh 2mic .sh
- 第六步:重启树莓派
重启树莓派
sudo重启
- 步骤7:配置Alsa
使用alsamixer设置麦克风和扬声器级别
推荐设置(按F4进入回放设置):

步骤8:安装室内空气质量记录器
我们正在使用Sensirion云来上传日志数据。如果您想使用不同的后端,如AWS IoT,请相应地调整代码或使用不同的记录器。
在树莓派上为IAQ记录器创建一个文件夹
Sudo mkdir ~/iaq_logger . txt
将iaq记录器代码复制到树莓派新创建的文件夹中
SCP iaq_logger_app.tar.gz pi@192.168.1.10:iaq_logger/
在树莓派上
CD iaq_logger tar -xzf iaq_logger_app.tar.gz
然后运行setup.sh(以pi用户)
。/ setup.sh
设置室内空气质量技能
要使用室内空气质量特性,我们必须实现一个自定义技能,并将其连接到AWS lambda。关于如何配置这样一个技能的完整文档可以在亚马逊开发者页面上找到:
https://developer.amazon.com/docs/custom-skills/host-a-custom-skill-as-an-aws-lambda-function.html
您可以选择alexa-skills-kit-color-expert-python,并将代码替换为包中提供的on。
在developer.amazon.com你现在可以配置一个新的Alexa技能。对于我们的智能音箱,我们习惯于遵循交互模式。
设置室内空气质量技能
{"languageModel": {"intents": [{"name": "AirQuality", "samples": ["tell me air quality", "tell me indoor air quality"], "slots": []}, {"name": "AMAZON. "CancelIntent”、“样品 ": [] }, { " 名称”:“亚马逊。HelpIntent", "samples": []}, {"name": "AMAZON. "StopIntent", "samples": []}, {"name": "湿度","samples":["告诉我湿度","告诉我环境湿度"],"slots": []}, {"name": "温度","samples":["告诉我温度","告诉我环境温度"],"slots": []}], "invocationName": "sensirion"}}
恭喜你,你成功了!试着问Alexa下面的问题:“Alexa,问问Sensirion现在的温度是多少?”