(廈門大學嘉庚學院,福建 廈門 363105)
萬年歷作為人們生活中常用的計時工具,即使在電子產(chǎn)品盛行的今天,由于其直觀性,仍然是大部分家庭的居家必備用品。早期的萬年歷采用專用數(shù)字芯片實現(xiàn),電路結(jié)構(gòu)復雜、產(chǎn)品體積大、功能簡單。隨著集成電路的發(fā)展,基于單片機實現(xiàn)的萬年歷得到了廣泛使用[1]。單片機替代數(shù)字芯片大大簡化電路結(jié)構(gòu),減小產(chǎn)品尺寸,并且具有成本低、體積小等優(yōu)點。但隨著人工智能的發(fā)展,人們對智能化的要求越來越高,同時海量數(shù)據(jù)的獲取不再僅僅依靠各種傳感器電路,網(wǎng)絡爬蟲已經(jīng)成為快速獲取數(shù)據(jù)的一種常見方式[2-3]。由于單片機處理能力有限,需要尋求更高效的處理平臺。樹莓派是一款基于ARM架構(gòu)處理器和Linux操作系統(tǒng)的卡片式計算機,具有體積小、成本低、強大的系統(tǒng)功能和豐富的接口資源等特點,被廣泛應用于各種高性能的電子產(chǎn)品中[4-6]。
本文闡述基于樹莓派的智能萬年歷,使用網(wǎng)絡爬蟲進行實時采集信息,相比單片機實現(xiàn)方式進一步減少傳感器等硬件電路的使用,也更便于后續(xù)功能變更和擴展,并通過百度語音[6]和圖靈機器人[7]豐富了萬年歷的語音交互功能。
如圖1所示,智能萬年歷是由樹莓派、DHT11溫濕度傳感器、水墨屏、麥克風和音箱組成。樹莓派為控制中樞,是萬年歷的核心模塊,主要負責時間和天氣信息獲取及各模塊的控制和交互工作;DHT11溫濕度傳感器主要用于采集室內(nèi)的溫度信息;墨水屏是顯示模塊;麥克風和音箱是語音交互的輸入輸出設備。
圖1 萬年歷硬件結(jié)構(gòu)
樹莓派選用的Raspberry Pi 4B是一款基于ARM Cortex-A72 內(nèi)核的64位四核處理器。該處理器自帶千兆以太網(wǎng)、雙頻802.11ac無線網(wǎng)絡和藍牙5.0;帶有USB 3.0和USB 2.0、HDMI等常用接口;內(nèi)存硬盤為SD卡。此外它的硬件拓展功能也非常優(yōu)秀,支持的傳感器種類頗多,有利于系統(tǒng)功能擴展。
DHT11是一款有校準數(shù)字信號輸出的溫濕度傳感器。其濕度精度為±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引腳發(fā)送起始信號(低電平)后,DHT11首先從低功耗模式轉(zhuǎn)換到高速模式,接著發(fā)送40 bit的溫濕度數(shù)據(jù),并觸發(fā)主板進行一次信號采集,用戶可選擇性讀取部分數(shù)據(jù),數(shù)據(jù)采集后DHT11又切換到低速模式。
圖2 DHT11引腳連接圖
DHT11的每一位數(shù)據(jù)都以50 μs低電平時序開始,高電平的長短決定了數(shù)據(jù)位是0還是1(低電平“0”的時序為:50 μs的低電平加26~28 μs的高電平 ;高電平“1”的時序為 :50 μs的低電平加70 μs的高電平)。一次完整的數(shù)據(jù)傳輸位數(shù)為40 bit,包括8 bit濕度整數(shù)數(shù)據(jù)+8 bit濕度小數(shù)數(shù)據(jù)+8 bit溫度整數(shù)數(shù)據(jù)+8 bit溫度小數(shù)數(shù)據(jù)+8 bit校驗和。
顯示部分采用深圳微雪電子有限公司旗下的4.2 inch e-Paper Module墨水屏。該墨水屏和樹莓派連接需要一塊驅(qū)動板e-Paper Driver HAT,連接線路如圖3所示。驅(qū)動板正面有兩個撥動開關(guān)Display Config和Interface Config。Display Config開關(guān)是驅(qū)動板為支持多款不同的微雪SPI電子墨水屏而設置,有A/B兩端,當接入不同型號的電子墨水屏時,Display Config開關(guān)需對應撥動到不同選項,本設計使用的是4.2 inch e-Paper,開關(guān)撥動到B端。Interface Config開關(guān)是支持不同引腳SPI設置的,當開關(guān)撥動到1處,支持3-line SPI;當開關(guān)撥動到0處,支持4-line SPI,本設計使用4-line SPI。
圖3 墨水屏驅(qū)動板連線圖
輸入設備麥克風無法直接使用樹莓派上自帶的3.5 mm接口,需要另外配置USB聲卡。輸出設備外置小音箱可以直接連接至樹莓派。
如圖4所示,本系統(tǒng)軟件的具體實現(xiàn)內(nèi)容包括系統(tǒng)初始化、信息采集、信息顯示、語音交互四大部分。
圖4 軟件總框圖
系統(tǒng)初始化配置包括開機自啟動、定時任務配置。
2.2.1 開機自啟動配置
為了方便萬年歷的使用,設計了開機自動運行萬年歷功能,主要包括實現(xiàn)開機自啟動腳本和相關(guān)配置。
2.2.2 定時任務配置
Crondtab 是Linux下用來周期性地執(zhí)行某種任務或等待處理某些事件的一個守護進程,當安裝完成操作系統(tǒng)后,默認會安裝此服務工具,并且會自動啟動Crond進程,Crond進程每分鐘會定期檢查是否有要執(zhí)行的任務,如果有要執(zhí)行的任務,則自動執(zhí)行該任務。
Crond配置任務的書寫格式:分鐘 小時 日 月 周[用戶名]
各個字段在具體配置中,還可以使用下列特殊字符:
星號(*):代表所有可能值的情況,比如在“月”字段若是星號,則表示在滿足其他字段的制約條件后每月都會執(zhí)行該命令操作。
逗號(,):用逗號隔開的值可以指定一個列表范圍,例如:“1,2,5,7,8,9”。
中杠(-):在整數(shù)之間用一個中杠可以表示整數(shù)范圍,例如 :“3-7”表示“3,4,5,6,7”。
正斜線(/):正斜線是指定時間的間隔頻率,例如:“0-23/3”表示每3 h執(zhí)行一次。同時正斜線可以和星號一起使用,例如:*/20,如果用在“分鐘”字段,則表示每20 min執(zhí)行一次。
最后,編輯定時任務使用crontab-e。若設定每天7:00自動播報萬年歷信息,則輸入“0 7 * * * /home/pi/weather.sh”即可。
2.3.1 信息爬取
樹莓派開機后會自動通過網(wǎng)絡爬蟲,獲取公歷日期、農(nóng)歷日期、天氣、風向、溫度等信息。
網(wǎng)絡爬蟲包括從網(wǎng)絡上獲取到所需要數(shù)據(jù)和解析數(shù)據(jù)兩個步驟,使用Requests庫和Beautiful Soup庫,其中,Requests庫提供多種URI操作,可以像讀取本地文件那樣方便地讀取互聯(lián)網(wǎng)中的數(shù)據(jù)。
網(wǎng)頁數(shù)據(jù)分析與獲取如圖5所示,通過對比分析“今天”頁面和“7天”頁面發(fā)現(xiàn),這個網(wǎng)站的請求全是簡單的GET請求。
圖5 中國天氣網(wǎng)(福州)
以請求“7天”頁面為例,請求的URL如下:
URL=“http ://www.weather.com.cn/weather/ 101230101.shtml”
其中,“weather”代表請求的是“7天”;如果請求的是“今天”則是“weather1d”;“101230101”則代表了福州地區(qū)的編號。
2.3.2 數(shù)據(jù)信息采集
DHT11數(shù)據(jù)采集采用基于Adafruit DHT 庫讀取方法。運行python AdafruitDHT.py 11 4,其中2個參數(shù)分別表示DHT11的數(shù)據(jù)引腳和所接收的樹莓派GPIO編號,成功的話會類似輸出:“Temp=24.0* Humidity=57.0%”。
墨水屏是使用SPI接口,通過命令sudo raspi-config選擇Interfacing Options—SPI—Yes可以開啟樹莓派的SPI接口。墨水屏正常工作還需要安裝相關(guān)軟件以及庫,即軟件:BCM2835、wiringPi;Python庫:RPi.GPIO、spidev。
數(shù)據(jù)經(jīng)過排版送墨水屏顯示,顯示原理是畫圖,主要函數(shù)如下:
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)
實時刷新時間,即無限循環(huán)下每隔1 min刷新一次屏幕。
錄音采用樹莓派自帶的arecord來實現(xiàn),通過arecord-D"plughw:1" -f S16_LE -r 16000 -d 3 wav文件可測試樹莓派的錄音功能。其中,“-D”后面所帶的為設備名;“-f”后面所帶的為采樣格式;“-r”后面所帶的為采樣頻率,百度語音接口要求的采樣頻率為16 000或者8 000,本系統(tǒng)中采用16 000;后面所帶wav文件是錄音所存儲的文件。此外,樹莓派上使用錄音功能,在Python中執(zhí)行錄音命令pyaudio模塊,需要安裝。
錄好的音頻wav文件需要轉(zhuǎn)換成pcm文件,再傳輸給百度語音進行識別。本設計中使用第三方庫ffmpeg-python進行錄音格式的轉(zhuǎn)換,命令為:os.system("ffmpeg -y -i output.wav -acodec pcm_s16le -f s16le -ac 1 -ar 16000 16k.pcm")。識別返回文字再發(fā)給圖靈機器人,圖靈機器人比對自己的數(shù)據(jù)庫,再返回回答的文本,把文本經(jīng)過語音合成后保存到本地,最后再播放出來。
本系統(tǒng)的硬件部分將音箱和USB麥克風分別插入3.5 mm接口和USB 2.0接口,DHT11和墨水屏驅(qū)動板相應的引腳分別連接到樹莓派的GPIO口上就可以進行功能驗證,測試結(jié)果通過墨水屏顯示和語音交互。
圖6顯示了采集到的萬年歷信息,圖7是語音交互功能測試。第1條信息是錄音功能測試,如果使用aplay命令進行播放,可以清晰地聽到錄音時所說的話語;第2條是使用百度API接口,將錄音中的話語轉(zhuǎn)化成文字;第3條是圖靈機器人進行的智能回復;第4條則是將機器人回復的文字轉(zhuǎn)化成語音即可順利地完成一次完整對答。
圖6 萬年歷測試結(jié)果
圖7 語音交互測試結(jié)果
本文主要針對目前萬年歷功能簡單、無法實時交互等問題,分別從硬件和軟件兩方面設計了一款以樹莓派為控制核心的智能萬年歷。驗證結(jié)果表明,本設計可實現(xiàn)實時萬年歷信息顯示以及語音交互功能,并且結(jié)合樹莓派良好的便攜性和擴展性,具有較好的實用性。