第1篇:使用Raspberry Pi Zero和Raspberry Pi Hat轻松进行电子制作!
第2篇:使用Grove传感器制作环境检测设备
大家好,我是吉田!这是使用Raspberry Pi Zero进行电子制作的第3篇,本篇将制作可以添加各种遥控设备的多功能遥控器。我们将在Raspberry Pi上安装Cloud Speech,然后通过语音进行电视机和加湿器的遥控操作。
本项目所需部件
・小型锂聚合物电池
(※注意:请小心处理,使用风险自负)
・Raspberry Pi Zero外壳(如果是Raspberry Pi入门套件,会附带外壳,可以直接使用)
目录
1. 安装Cloud Speech
2. 红外线信号接收器的配置
3. 红外线信号发射器的配置
4. 制作声控遥控器
5. 总结
1.安装Cloud Speech
为了实现Raspberry Pi Zero的语音控制,需要先安装Google的Cloud Speech。请按照下述网站的指示,加载SDK。
(https://cloud.google.com/speech-to-text/docs/quickstart-client-libraries?hl=ja)
首先,在Google Cloud Console中打开并启用Cloud Speech。
接下来,还是通过Console界面,进入下述用户认证界面,创建服务账户密钥。(https://console.cloud.google.com/apis/credentials?hl=ja)
在服务账号ID一栏,输入适当的任意值,然后“类型”选择“JSON”,点击创建按钮。这样,私钥就会下载到电脑上。
再将凭据JSON文件转发至Raspberry Pi端。之后,在Raspberry Pi端重新登录,确认有没有收到刚刚转发过来的密钥文件。此时,可以通过以下命令,读取该文件,将其设置为Raspberry Pi的环境变量。环境变量设置命令仅针对单次登录有效,所以进行Raspberry Pi的再次启动等操作时,需要重新读取凭据文件。
这样Google认证设置和Raspberry Pi的绑定就完成了,接下来我们要在Raspberry Pi上安装google-cloud-speech。
首先需要下载示例程序。
该程序群组里面包含了Google的各类API的示例程序。我们这次要使用的是其中的speech部分。
此时,我们需要加载Python3的依赖库,安装Cloud Speech。
$ pip3 install pyaudio
$ pip3 install –upgrade google-cloud-speech
Cloud Speech安装完成后,运行“microphone”这一文件夹下的实时文字生成的程序。因为默认的语言是英语,所以我们先使用英语进行对话。
当我们发出“exit”或者“quit”语音指示时,则该语音接收程序将结束运行。
接下来,我们复制该示例程序,对其稍作修改,来实现日语的语音接收。
$ sudo vi streaming_jp.py
main()部分的程序修改如下:
listen_print_loop内的keywords修改如下:
然后,运行修改后的日语语音接收程序。
怎么样?Raspberry Pi可以接收日语,并且能够自动生成文字了吧。此时,如果我们对着它说类似于“さようなら(再见)”这样的日语,就会退出该程序。
2.红外线信号接收器的配置
Cloud Speech安装完成之后,我们接下来就要在Raspberry Pi和ReSpeaker上安装红外线信号接收器。
在上一篇文章也曾介绍过,我们此次用到的ReSpeaker带有两个Grove端口,通过这两个端口,可以轻轻松松地添加传感器等部件。
在这一步,针对我们准备的Grove相关部件,先安装红外信号接收LED,用来接收遥控信号。
面朝ReSpeaker,将Grove红外信号接收LED插入左侧的端口。
接下来,使用这个红外信号接收LED,尝试接收遥控信号。详细步骤请参照以前发布的智能家居的文章中的红外线信号的设置方法。我们需要先在Zero上安装名为“LIRC”的红外遥控工具。
$ sudo vi /boot/config.txt
$ sudo vi /etc/lirc/lirc_options.conf
在这里,我们需要留意,如果使用的是最新的Raspbian,那么与上一篇文章发布时相比,OS的内核版本好像已经升级。因此,config.txt文件的设置方法也要随之稍作调整,调整内容如下(在本项目中,红外线信号接收用的是GPIO3引脚,信号发射用的是GPIO12引脚)。
[config.txt]另外,针对lirc_options.conf的信号接收部分,需要进行如下设置。
[lirc_options.conf]设置完成之后,使用“mode2”这一命令,确认是否能够接收遥控信号。
先停止lircd,通过irrecord添加遥控信号。在这一步,我们需要通过下述命令,让Raspberry Pi记住电视机和加湿器的遥控设置。
$ irrecord -n -d /dev/lirc1
运行之后,名为“TV”和“Humid”的电视机和加湿器的设置文件remote.lircd.conf就创建完成了。
3.红外线信号发射器的配置
遥控信号添加完成之后,我们接下来需要通过Raspberry Pi Zero发送信号,进行遥控设备的控制。Repeaker上也带了连接红外信号发射LED的Grove端口,我们先将该LED插入Zero上面的Repeaker。
面朝ReSpeaker,将Grove红外信号发射LED插入右侧的端口。
接下来介绍具体的设置方法。首先,将刚刚创建的remote命令文件设置为自动启动程序。
$ sudo systemctl enable lircd
$ sudo systemctl start lircd
$ sudo systemctl status lircd
红外线信号发射命令使用的是irsend,但是其设置方法也稍有变化,所以我们需要对lirc_options进行如下修改。
[lirc_options.conf]启动lirc之后,通过下述命令,确认遥控信号的添加情况。
最后,进行遥控操作。
怎么样?电视机和加湿器有没有成功开启或者关闭呢?
$ irsend SEND_ONCE humid off
4.制作声控遥控器
确认红外线接收器和发射器都能正常使用之后,我们就需要将它们集成为一个声控遥控器。
在Grove端口与ReSpeaker相连的状态下,我们需要用一个外壳把它们组成的整体包覆起来,外壳可以考虑直接使用Raspberry Pi Zero的外壳。此时,我们需要进行相应的改造,确保从外壳的上盖部分可以很方便地按压ReSpearker的按钮。
建议在外壳上贴上标签,标注按钮可以遥控的设备,这样按钮的功能更加一目了然。
到了这一步,我们还需要编辑一条名为“button_stream.py”的程序,用来确保按了Repeaker的按钮之后,Cloud Speech就能开始接收遥控指示。此时,我们需要将ReSpeaker的按钮连接GPIO17引脚。
[button_stream.py程序]#!/usr/bin/env python # -*- coding: utf-8 -*- import time import RPi.GPIO as GPIO import subprocess from pixels import pixels BUTTON = 17 hold_time=1.5 GPIO.setmode(GPIO.BCM) GPIO.setup(BUTTON, GPIO.IN, pull_up_down=GPIO.PUD_UP) actions = ['python3 pixels.py’, 'python3 stream_jp_ctl.py', 'python3 stream_en_ctl.py'] GPIO.add_event_detect(BUTTON,GPIO.FALLING) while True: if GPIO.event_detected(BUTTON): GPIO.remove_event_detect(BUTTON) now = time.time() count = 0 GPIO.add_event_detect(BUTTON,GPIO.RISING) while time.time() < now + hold_time: if GPIO.event_detected(BUTTON): count +=1 time.sleep(.3) # debounce time print(count) pixels.think() cmd = actions[count] print(cmd) if cmd: subprocess.call(actions[count], shell=True) GPIO.remove_event_detect(BUTTON) GPIO.add_event_detect(BUTTON, GPIO.FALLING) pixels.off()
接下来,修改红外遥控程序,确保在我们在对着遥控器发出“打开电视机”等语音指示时,可以实现语音遥控。具体做法就是在stream_jp_ctl.py中添加下述函数。
[stream_jp_ctl.py的添加内容]]
现在,运行按钮程序,来试试遥控器吧。启动之后,我们首先可以通过LED是否发光,来判断遥控器是否已经准备完成。
按下按钮之后,稍微等一会儿,对着遥控器发出“打开电视机”或者“打开加湿器”这样的语音指示。
※此链接为Youtube视频 https://www.youtube.com/watch?v=Tyc2EuVPjPU
如果只是用来控制电视机,那么直接按按钮可能更加方便。但是,实际上我们制作出来的遥控器也可以添加电视机、空调、照明灯等多个遥控对象。我们只需要添加声控命令,就能够将其制作成一个多功能遥控器。
5.总结
在本项目中,我们在Raspberry Pi Zero上配置了红外线信号接收器和发射器。因为用的是Grove端口,所以相比之前的家居设备制作项目,更加轻松地完成了一个外形小巧的遥控器的制作。强烈建议大家在进行本项目的制作时,不要仅仅局限于电视机,还要试着添加空调和风扇等遥控设备,将其制作成一个高便利性的多功能遥控器。
另外,因为使用了Cloud Speech,它可以将语音对话实时转化为文本。有了它,我们就可以通过语音,实现各种各样的操作。随着其功能增加,其便利性是不是又进一步增强了呢!
好了,本项目的介绍就到这里,下一篇我将使用Raspberry Pi Zero,添加显示屏等部件,制作一款智能手表,敬请期待!
(吉田)
本系列连载的内容
第1篇:使用Raspberry Pi Zero和Raspberry Pi Hat轻松进行电子制作!
第2篇:使用Grove传感器制作环境检测设备
第3篇:制作声控多功能遥控器!(本文)
第4篇:制作小屏智能手表!