第1篇:使用Raspberry Pi Zero和Raspberry Pi Hat轻松进行电子制作!
第2篇:使用Grove传感器制作环境检测设备!
第3篇:制作声控多功能遥控器!
大家好。我是吉田!这是使用Raspberry Pi Zero进行电子制作的第4篇。在本项目中,除了之前的项目中用到的传感器和遥控器功能之外,我还将添加一个小巧的显示屏,制作一款可以支持语音控制功能的智能手表。当我们向手表发出语音指示,就能进行传感器检测或者遥控操作,这样的一款小设备是不是极具未来感呀!
本项目所需部件
・Grove OLED显示屏(屏幕尺寸不同,请自行选择其中一款)
GROVE OLED 128×64 | GROVE OLED 96×96 |
・Grove传感器、红外线相关部件(请根据自己想测量的项目以及使用方式自行选择)
Grove红外信号发射LED | Grove 温湿度传感器 | Grove远红外线反射传感器 |
・智能手表外壳(硅胶套等)
・小型锂聚合物电池
(※注意:请小心处理,使用风险自负。)
目录
1. 在Raspberry Pi Zero上安装有机EL显示屏
2. 实现显示屏与传感器、红外线等部件之间的联动
3. 制作支持语音控制功能的智能手表
4. 总结
1.在Raspberry Pi Zero上安装有机EL显示屏
为了给Raspberry Pi Zero添加一块显示屏,本项目中将用到的是Grove的有机EL显示屏,此类显示屏使用起来非常便利。带Grove连接线的有机EL显示屏有两款:尺寸为128×64的OLED横屏和尺寸为96×96的方屏,在Seeed公司的Wiki网页上有详细的使用方法介绍。
为了正常使用这款显示屏,我们需要用到我们的老朋友——ReSpeaker的支持I2C连接的端口,该端口位于ReSpeaker的边上。
将显示屏的Grove连接线插入ReSpeaker边上的端口,接通电源。
要想在Raspberry Pi上使用这块显示屏,首先需要通过raspi-config,启用“I2C”这一连接方式。
此外,在Raspberry Pi上使用Grove,还需要下载库文件grove.py,我们在本系列连载的Grove传感器的应用项目(第2篇)中也用到了这一库文件。先通过下述Github平台,下载grove.py,然后通过Python3下载程序群组。
$ git clone https://github.com/Seeed-Studio/grove.py
$ cd grove.py
$ sudo pip3 install .
$ cd grove
安装完成后,在名为“grove”的文件夹中,有如下所示的各种程序。因为本项目要使用OLED显示屏,所以我们要使用其中的“grove_oled_display_128x64.py”这一程序。
接下来话不多说,我们通过python3命令来运行这一程序。
就这样,显示屏上出现了“Hello World”这一显示示例,是不是很简单呢?
2.实现显示屏与传感器、红外线等部件之间的联动,提高使用便利性
接下来,我们就要通过这块安装完成的显示屏,来显示各种信息了。首先,要让它像手表一样显示当前时刻。先复制刚刚用到的示例程序,以类似于“grove_oled_time.py”这样的名称,放入相应的文件夹内(本项目中是Programs/watch),然后在在其下述main程序中添加显示当前时刻的函数。
$ sudo vi ~/Programs/watch/grove_oled_time.py
运行“grove_oled_time.py”,应该就会如同下述照片一样,在显示屏上显示出当前的日期和时间。
接下来,我们就要将本系列连载第2篇中用到的温湿度传感器插入位于正中间的Grove端口,在显示屏上显示温度和湿度信息了。此时,需要对grove_oled程序进行修改的部分如下(黄色部分)。
$ sudo cp grove_oled_display_time.py grove_oled_temp.py
$ sudo vi grove_oled_temp.py
# 库文件的导入
from grove.grove_temperature_humidity_sensor import DHT # DHT11 type dht11 = DHT("11", 12) … # 主程序中 def main(): display = GroveOledDisplay128x64() while True: … humi, temp = dht11.read() print('DHT{0}, humidity {1:.1f}%, temperature {2:.1f}*'.format(dht11.dht_type, humi, temp)) display.set_cursor(4, 1) display.puts('Humid: ' + str(humi) + ' %') display.set_cursor(5, 1) display.puts('Temp: ' + str(temp) + ' C')
运行上述“grove_oled_temp.py”程序之后,如下图所示,显示屏上就会开始显示房间中的湿度和温度信息。
然后,再安装本系列连载第3篇中用到的红外信号发射LED,在显示屏上显示其结果。请先参照本系列连载中的上一篇文章,完成红外线信号的添加和运行相关的设置。
$ sudo vi grove_oled_ir.py
# 库文件的导入 import RPi.GPIO as GPIO import subprocess BUTTON = 17 GPIO.setmode(GPIO.BCM) GPIO.setup(BUTTON, GPIO.IN) … # 主程序中 def main(): display = GroveOledDisplay128x64() while True: … state = GPIO.input(BUTTON) display.set_cursor(4, 1) display.puts('Irsend: ') display.set_cursor(5, 1) if state: print(‘No IR’) display.puts('No IR') else: subprosess.Popen(”irsend SEND_ONCE remotetv on”) print(‘RemoteTV On’) display.puts('remotetv on')
完成之后,运行程序,按下ReSpeaker上的按钮,就会发出红外线信号(电视机的遥控变为ON的状态),显示屏上就会显示“RemoteTV ON”。
3.制作支持语音控制功能的智能手表
最后,我们就要和语音控制功能进行联动,将其制作成常规手表式样的智能手表。
请参照本系列连载的上一篇文章,提前完成Google Cloud Speech使用前的相关准备工作。我们可以通过Google Cloud Console,启用Cloud Speech,安装SDK。
Cloud Speech安装完成后,创建button_watch.py程序,以确保按下该设备的按钮后,就可以开始接收语音指示。这和上次制作遥控器的项目原理基本一样。
#!/usr/bin/env python # -*- coding: utf-8 -*- import time import RPi.GPIO as GPIO import subprocess BUTTON = 17 hold_time=1.5 exec_dir = “/home/pi/Programs/watch” GPIO.setmode(GPIO.BCM) GPIO.setup(BUTTON, GPIO.IN, pull_up_down=GPIO.PUD_UP) actions = ['python3 ‘ + exec_dir + ‘assistant_once.py’, #启动Google Assistant 'python3 ‘ + exec_dir + ‘stream_jp_watch.py', #按一次按钮,开始接收语音指示 'python3 ‘ + exec_dir + ‘grove_oled_ir.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) 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)
在这一步,我们还要进行相应的设置,确保Raspberry Pi上的按钮每被按一次,Cloud Speech就开始接收指示,当其收到“打开遥控器”或者“测量温度”等语音指示时,就可以运行刚刚创建的程序。
实际上,我已经将用于开始接收语音指示的stream_jp_watch.jp等程序群组,放在了下述网页上,作为示例程序,请各位读者朋友自行复制到自己的Raspberry Pi上。
https://github.com/ktrips/RasAi/tree/master/Programs/watch
– button_watch.py:按下按钮,就开始接收语音指示
– stream_jp_watch.py:通过Cloud Speech,针对特定的语音指示做出反应,实现传感器的检测、遥控器的操作
– grove_oled_ir.py:遥控器的实际操作程序
– grove_oled_temp.py:温湿度传感器操作程序
– assistant_once.py:Google Assistant的运行程序
程序部分的工作完成,接下来就要制作手表风格的外壳了。而包覆Raspberry Pi Zero的外壳,我选的是橡胶壳。在外壳上,我已经用小刀提前切了一个刚好可以露出显示屏的窗口。另外,为了能够正常使用电源开关和Grove端口,还需要提前开好孔。
我还在橡胶外壳上装了手表表带,把它做成了智能手表的风格。此时,Grove连接线需要往外稍微留一点,以便更换自己喜欢用的传感器。在本项目中,我安装的是刚刚已经设置完成的温湿度传感器,或者红外信号发射LED。
最后,我们再编辑一个运行这些动作的脚本,在Raspberry Pi启动时,让这些动作自动运行。
#!/bin/bash --rcfile source /etc/bash.bashrc source ~/.bashrc source ~/env/bin/activate export GOOGLE_APPLICATION_CREDENTIALS=/home/pi/credentials.json echo $GOOGLE_APPLICATION_CREDENTIALS cd /home/pi/Programs/watch echo "Running button_watch.py!" python button_watch.py echo "Watch Program is done!"
Description=Smart Watch Auto Run Program [Service] ExecStart=/bin/bash /home/pi/Programs/watch/watchd.sh WorkingDirectory=/home/pi/Programs/watch Restart=always User=pi [Install] WantedBy=multi-user.target
在Raspberry Pi启动时,要自动启动该脚本,需要如下所示添加服务。
$ sudo systemctl enable watchd
$ sudo systemctl start watchd
$ sudo systemctl status watchd
接下来,我们重新启动Raspberry Pi Zero来验证一下。按钮按一次,就会开始接收语音指示。此时,请对着它发出“打开电视机!”或者“打开加湿器”这样的语音指示。如果在设备的红外线接收器附近发出语音指示,则智能手表将会化身遥控器进行工作。另外,按钮按两次,则会直接运行您自己喜欢的程序。长按按钮,则Google Assistant启动,然后就会告诉我们天气以及路线等信息。
除此以外,建议各位读者朋友试着更换成其他Grove传感器,进行各种尝试。只要给手表发出语音指示,就能使用遥控功能和Assistant功能。这样,一款充满未来气息的智能手表就制作完成了!
4.总结
在本项目中,我们在Raspberry Pi Zero上安装显示屏,试着制作了一款智能手表。它集成了之前项目中的传感器和遥控功能,再加上语音识别功能,称得上是一款货真价实的智能手表。
值得一提的是,我们只需要替换成Grove的其他各类传感器,就能相应地显示其他信息。比如说,如果使用空气清洁度传感器,就可以用于空气净化器的检测。此外,如果安装GPS或者心率传感器等部件,还可以将其用作健康管理设备。
“使用小巧的Raspberry Pi Zero制作移动设备!”系列共四篇,本篇是最终篇。相信各位读者朋友也已经清楚,使用Raspberry Pi Zero,确实可以制作各种各样的外形小巧、而且支持声控功能的智能设备。建议您今后也一定要尝试使用Raspberry Pi制作智能化的电子作品!感谢大家的阅读!
本系列连载的内容
第1篇:使用Raspberry Pi Zero和Raspberry Pi Hat轻松进行电子制作!
第2篇:使用Grove传感器制作环境检测设备!
第3篇:制作声控多功能遥控器!
第4篇:制作小屏智能手表!(本文)