(厦门大学嘉庚学院,福建 厦门 363105)
万年历作为人们生活中常用的计时工具,即使在电子产品盛行的今天,由于其直观性,仍然是大部分家庭的居家必备用品。早期的万年历采用专用数字芯片实现,电路结构复杂、产品体积大、功能简单。随着集成电路的发展,基于单片机实现的万年历得到了广泛使用[1]。单片机替代数字芯片大大简化电路结构,减小产品尺寸,并且具有成本低、体积小等优点。但随着人工智能的发展,人们对智能化的要求越来越高,同时海量数据的获取不再仅仅依靠各种传感器电路,网络爬虫已经成为快速获取数据的一种常见方式[2-3]。由于单片机处理能力有限,需要寻求更高效的处理平台。树莓派是一款基于ARM架构处理器和Linux操作系统的卡片式计算机,具有体积小、成本低、强大的系统功能和丰富的接口资源等特点,被广泛应用于各种高性能的电子产品中[4-6]。
本文阐述基于树莓派的智能万年历,使用网络爬虫进行实时采集信息,相比单片机实现方式进一步减少传感器等硬件电路的使用,也更便于后续功能变更和扩展,并通过百度语音[6]和图灵机器人[7]丰富了万年历的语音交互功能。
如图1所示,智能万年历是由树莓派、DHT11温湿度传感器、水墨屏、麦克风和音箱组成。树莓派为控制中枢,是万年历的核心模块,主要负责时间和天气信息获取及各模块的控制和交互工作;DHT11温湿度传感器主要用于采集室内的温度信息;墨水屏是显示模块;麦克风和音箱是语音交互的输入输出设备。
图1 万年历硬件结构
树莓派选用的Raspberry Pi 4B是一款基于ARM Cortex-A72 内核的64位四核处理器。该处理器自带千兆以太网、双频802.11ac无线网络和蓝牙5.0;带有USB 3.0和USB 2.0、HDMI等常用接口;内存硬盘为SD卡。此外它的硬件拓展功能也非常优秀,支持的传感器种类颇多,有利于系统功能扩展。
DHT11是一款有校准数字信号输出的温湿度传感器。其湿度精度为±5%RH,温度精度为±2 ℃,湿度量程为20%RH~90%RH,温度量程为0~50 ℃。
DHT11有3个I/O接口,其中VCC(正极)接3.3 V,GND接地,DATA接树莓派的GPIO7(BCM 4)。DHT11与树莓派的连接如图2所示,当树莓派的GPIO引脚发送起始信号(低电平)后,DHT11首先从低功耗模式转换到高速模式,接着发送40 bit的温湿度数据,并触发主板进行一次信号采集,用户可选择性读取部分数据,数据采集后DHT11又切换到低速模式。
图2 DHT11引脚连接图
DHT11的每一位数据都以50 μs低电平时序开始,高电平的长短决定了数据位是0还是1(低电平“0”的时序为:50 μs的低电平加26~28 μs的高电平 ;高电平“1”的时序为 :50 μs的低电平加70 μs的高电平)。一次完整的数据传输位数为40 bit,包括8 bit湿度整数数据+8 bit湿度小数数据+8 bit温度整数数据+8 bit温度小数数据+8 bit校验和。
显示部分采用深圳微雪电子有限公司旗下的4.2 inch e-Paper Module墨水屏。该墨水屏和树莓派连接需要一块驱动板e-Paper Driver HAT,连接线路如图3所示。驱动板正面有两个拨动开关Display Config和Interface Config。Display Config开关是驱动板为支持多款不同的微雪SPI电子墨水屏而设置,有A/B两端,当接入不同型号的电子墨水屏时,Display Config开关需对应拨动到不同选项,本设计使用的是4.2 inch e-Paper,开关拨动到B端。Interface Config开关是支持不同引脚SPI设置的,当开关拨动到1处,支持3-line SPI;当开关拨动到0处,支持4-line SPI,本设计使用4-line SPI。
图3 墨水屏驱动板连线图
输入设备麦克风无法直接使用树莓派上自带的3.5 mm接口,需要另外配置USB声卡。输出设备外置小音箱可以直接连接至树莓派。
如图4所示,本系统软件的具体实现内容包括系统初始化、信息采集、信息显示、语音交互四大部分。
图4 软件总框图
系统初始化配置包括开机自启动、定时任务配置。
2.2.1 开机自启动配置
为了方便万年历的使用,设计了开机自动运行万年历功能,主要包括实现开机自启动脚本和相关配置。
2.2.2 定时任务配置
Crondtab 是Linux下用来周期性地执行某种任务或等待处理某些事件的一个守护进程,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动Crond进程,Crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
Crond配置任务的书写格式:分钟 小时 日 月 周[用户名]
各个字段在具体配置中,还可以使用下列特殊字符:
星号(*):代表所有可能值的情况,比如在“月”字段若是星号,则表示在满足其他字段的制约条件后每月都会执行该命令操作。
逗号(,):用逗号隔开的值可以指定一个列表范围,例如:“1,2,5,7,8,9”。
中杠(-):在整数之间用一个中杠可以表示整数范围,例如 :“3-7”表示“3,4,5,6,7”。
正斜线(/):正斜线是指定时间的间隔频率,例如:“0-23/3”表示每3 h执行一次。同时正斜线可以和星号一起使用,例如:*/20,如果用在“分钟”字段,则表示每20 min执行一次。
最后,编辑定时任务使用crontab-e。若设定每天7:00自动播报万年历信息,则输入“0 7 * * * /home/pi/weather.sh”即可。
2.3.1 信息爬取
树莓派开机后会自动通过网络爬虫,获取公历日期、农历日期、天气、风向、温度等信息。
网络爬虫包括从网络上获取到所需要数据和解析数据两个步骤,使用Requests库和Beautiful Soup库,其中,Requests库提供多种URI操作,可以像读取本地文件那样方便地读取互联网中的数据。
网页数据分析与获取如图5所示,通过对比分析“今天”页面和“7天”页面发现,这个网站的请求全是简单的GET请求。
图5 中国天气网(福州)
以请求“7天”页面为例,请求的URL如下:
URL=“http ://www.weather.com.cn/weather/ 101230101.shtml”
其中,“weather”代表请求的是“7天”;如果请求的是“今天”则是“weather1d”;“101230101”则代表了福州地区的编号。
2.3.2 数据信息采集
DHT11数据采集采用基于Adafruit DHT 库读取方法。运行python AdafruitDHT.py 11 4,其中2个参数分别表示DHT11的数据引脚和所接收的树莓派GPIO编号,成功的话会类似输出:“Temp=24.0* Humidity=57.0%”。
墨水屏是使用SPI接口,通过命令sudo raspi-config选择Interfacing Options—SPI—Yes可以开启树莓派的SPI接口。墨水屏正常工作还需要安装相关软件以及库,即软件:BCM2835、wiringPi;Python库:RPi.GPIO、spidev。
数据经过排版送墨水屏显示,显示原理是画图,主要函数如下:
time_draw.rectangle((10,15,185,35),fill = 255)
绘制矩形框:(5,15,185,35)显示是左上角x,y坐标和右下角x,y坐标;fill=255是白色填充。
time_draw.text((10,15),ime.strftime('%Y年%m月%d日 '),font = font18,fill = 0)
显示当前日期,格式为:XXXX年XXXX日。
while True,time.sleep(60)
实时刷新时间,即无限循环下每隔1 min刷新一次屏幕。
录音采用树莓派自带的arecord来实现,通过arecord-D"plughw:1" -f S16_LE -r 16000 -d 3 wav文件可测试树莓派的录音功能。其中,“-D”后面所带的为设备名;“-f”后面所带的为采样格式;“-r”后面所带的为采样频率,百度语音接口要求的采样频率为16 000或者8 000,本系统中采用16 000;后面所带wav文件是录音所存储的文件。此外,树莓派上使用录音功能,在Python中执行录音命令pyaudio模块,需要安装。
录好的音频wav文件需要转换成pcm文件,再传输给百度语音进行识别。本设计中使用第三方库ffmpeg-python进行录音格式的转换,命令为:os.system("ffmpeg -y -i output.wav -acodec pcm_s16le -f s16le -ac 1 -ar 16000 16k.pcm")。识别返回文字再发给图灵机器人,图灵机器人比对自己的数据库,再返回回答的文本,把文本经过语音合成后保存到本地,最后再播放出来。
本系统的硬件部分将音箱和USB麦克风分别插入3.5 mm接口和USB 2.0接口,DHT11和墨水屏驱动板相应的引脚分别连接到树莓派的GPIO口上就可以进行功能验证,测试结果通过墨水屏显示和语音交互。
图6显示了采集到的万年历信息,图7是语音交互功能测试。第1条信息是录音功能测试,如果使用aplay命令进行播放,可以清晰地听到录音时所说的话语;第2条是使用百度API接口,将录音中的话语转化成文字;第3条是图灵机器人进行的智能回复;第4条则是将机器人回复的文字转化成语音即可顺利地完成一次完整对答。
图6 万年历测试结果
图7 语音交互测试结果
本文主要针对目前万年历功能简单、无法实时交互等问题,分别从硬件和软件两方面设计了一款以树莓派为控制核心的智能万年历。验证结果表明,本设计可实现实时万年历信息显示以及语音交互功能,并且结合树莓派良好的便携性和扩展性,具有较好的实用性。