使用小巧的Raspberry Pi Zero制作移动设备! 第4篇:制作小屏智能手表!

 

第1篇:使用Raspberry Pi Zero和Raspberry Pi Hat轻松进行电子制作!
第2篇:使用Grove传感器制作环境检测设备!
第3篇:制作声控多功能遥控器!

 

大家好。我是吉田!这是使用Raspberry Pi Zero进行电子制作的第4篇。在本项目中,除了之前的项目中用到的传感器和遥控器功能之外,我还将添加一个小巧的显示屏,制作一款可以支持语音控制功能的智能手表。当我们向手表发出语音指示,就能进行传感器检测或者遥控操作,这样的一款小设备是不是极具未来感呀!

1

本项目所需部件

・Raspberry Pi Zero
2

・Seeed ReSpeaker 2-Mics Hat
3

・Grove OLED显示屏(屏幕尺寸不同,请自行选择其中一款)

GROVE OLED 128×64 GROVE OLED 96×96
zero_b zero_a

・Grove传感器、红外线相关部件(请根据自己想测量的项目以及使用方式自行选择)

Grove红外信号发射LED Grove 温湿度传感器 Grove远红外线反射传感器
3a 3b 3c

・智能手表外壳(硅胶套等)
zero-4a

・小型锂聚合物电池
(※注意:请小心处理,使用风险自负。)
b

・带开关的分线板
zero-5

 

目录

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网页上有详细的使用方法介绍。

Grove OLED 128 x 64 显示屏

zero_b

为了正常使用这款显示屏,我们需要用到我们的老朋友——ReSpeaker的支持I2C连接的端口,该端口位于ReSpeaker的边上。

zero-7

将显示屏的Grove连接线插入ReSpeaker边上的端口,接通电源。
zero-8

要想在Raspberry Pi上使用这块显示屏,首先需要通过raspi-config,启用“I2C”这一连接方式。
此外,在Raspberry Pi上使用Grove,还需要下载库文件grove.py,我们在本系列连载的Grove传感器的应用项目(第2篇)中也用到了这一库文件。先通过下述Github平台,下载grove.py,然后通过Python3下载程序群组。

$ sudo raspi-config # 通过Interfacing menu启用I2C
$ git clone https://github.com/Seeed-Studio/grove.py
$ cd grove.py
$ sudo pip3 install .
$ cd grove

安装完成后,在名为“grove”的文件夹中,有如下所示的各种程序。因为本项目要使用OLED显示屏,所以我们要使用其中的“grove_oled_display_128x64.py”这一程序。

zero-9

接下来话不多说,我们通过python3命令来运行这一程序。

$ python3 grove_oled_display_128x64.py

zero-10
就这样,显示屏上出现了“Hello World”这一显示示例,是不是很简单呢?

2.实现显示屏与传感器、红外线等部件之间的联动,提高使用便利性

接下来,我们就要通过这块安装完成的显示屏,来显示各种信息了。首先,要让它像手表一样显示当前时刻。先复制刚刚用到的示例程序,以类似于“grove_oled_time.py”这样的名称,放入相应的文件夹内(本项目中是Programs/watch),然后在在其下述main程序中添加显示当前时刻的函数。

$ sudo cp ~/grove.py/grove/grove_oled_display_128x64.py ~/Programs/watch/grove_oled_time.py
$ sudo vi ~/Programs/watch/grove_oled_time.py
[grove_oled_time.py(添加下述红框部分的函数,用来显示时间)]

zero-11

运行“grove_oled_time.py”,应该就会如同下述照片一样,在显示屏上显示出当前的日期和时间。

zero-12

接下来,我们就要将本系列连载第2篇中用到的温湿度传感器插入位于正中间的Grove端口,在显示屏上显示温度和湿度信息了。此时,需要对grove_oled程序进行修改的部分如下(黄色部分)。

$ cd ~/Programs/watch
$ 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”程序之后,如下图所示,显示屏上就会开始显示房间中的湿度和温度信息。

zero-13

zero-14

然后,再安装本系列连载第3篇中用到的红外信号发射LED,在显示屏上显示其结果。请先参照本系列连载中的上一篇文章,完成红外线信号的添加和运行相关的设置。

$ sudo cp grove_oled_display_time.py grove_oled_ir.py
$ 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”。

zero-15

3.制作支持语音控制功能的智能手表

最后,我们就要和语音控制功能进行联动,将其制作成常规手表式样的智能手表。

请参照本系列连载的上一篇文章,提前完成Google Cloud Speech使用前的相关准备工作。我们可以通过Google Cloud Console,启用Cloud Speech,安装SDK。

zero-16

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。

18

最后,我们再编辑一个运行这些动作的脚本,在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 cp watchd.service /etc/systemd/system/
$ sudo systemctl enable watchd
$ sudo systemctl start watchd
$ sudo systemctl status watchd

接下来,我们重新启动Raspberry Pi Zero来验证一下。按钮按一次,就会开始接收语音指示。此时,请对着它发出“打开电视机!”或者“打开加湿器”这样的语音指示。如果在设备的红外线接收器附近发出语音指示,则智能手表将会化身遥控器进行工作。另外,按钮按两次,则会直接运行您自己喜欢的程序。长按按钮,则Google Assistant启动,然后就会告诉我们天气以及路线等信息。

21

除此以外,建议各位读者朋友试着更换成其他Grove传感器,进行各种尝试。只要给手表发出语音指示,就能使用遥控功能和Assistant功能。这样,一款充满未来气息的智能手表就制作完成了!

22

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篇:制作小屏智能手表!(本文)

アバター画像
吉田 显一(Yoshiken)

在普通公司工作的上班族,非常喜欢创作的周末创客,出版了电子书MESHBOOK,平时也写写博客。

http://blog.ktrips.net

使用小巧的Raspberry Pi Zero制作移动设备! 第3篇:制作声控多功能遥控器!

使用Raspberry Pi进行传感器输入实验

相关文章

  1. basic-of-raspberrypi_01_02-1

    Raspberry Pi使用前的准备【第1篇】Raspberry Pi的基础知识

  2. 使用Raspberry Pi 4进行电子制作 入门!【第4篇】 使用Raspberry Pi 4和G…

  3. raspberrypi04_1

    使用Raspberry Pi 4进行电子制作 入门! 【第3篇】无头模式下熟练使用Raspberry…

  4. raspberrypi04_1

    使用Raspberry Pi 4进行电子制作的入门教程! 【第2篇】Raspberry Pi 4的设…

  5. raspberrypi04_1

    使用Raspberry Pi 4进行电子制作的入门教程! 第1篇: 开始使用新产品“Raspberr…

  6. i06_4a

    制作一款图形处理装置,用数字控制自然力

  7. ito_05

    制作卡通角色随风摆动就能绘制图形作品的装置

  8. i04-8

    使用传感器轻松制作有趣的项目

Raspberry Pi初学者指南

基础知识

EMC


TECH INFO

  • Sugiken老师的电机驱动器课堂
  • 重点必看
  • 技术分享
  • Arduino入门指南
  • Raspberry Pi初学者指南
  • 技术动态