智能雞蛋盒的設(shè)計(jì)與實(shí)現(xiàn)
引 言
智能雞蛋盒作為智能家居的一類(lèi)產(chǎn)品,它解決了人們一直煩惱的忘記家里雞蛋數(shù)量和忘記雞蛋是否新鮮的問(wèn)題。本論文實(shí)現(xiàn)了把雞蛋數(shù)量和儲(chǔ)存時(shí)間等數(shù)據(jù)傳輸?shù)?a href="/tags/Android" target="_blank">Android 客戶(hù)端,并記錄的功能,用戶(hù)可以隨時(shí)查看雞蛋盒里雞蛋的數(shù)量并檢查雞蛋是否新鮮。
1 智能雞蛋盒的設(shè)計(jì)
1.1 硬件電路的設(shè)計(jì)
在設(shè)計(jì)硬件方案時(shí),需要考慮以下幾個(gè)因素:
(1) 該智能雞蛋盒在低溫封閉的環(huán)境中工作,所以芯片以及其它元器件必須具備能在低溫環(huán)境下正常工作的能力;
(2) 由于是在冰箱內(nèi)工作,所以無(wú)線網(wǎng)絡(luò)要有一定的無(wú)線穿透能力。
經(jīng)過(guò)一系列調(diào)研后,發(fā)現(xiàn) RT5350 這款自帶無(wú)線功能的主控芯片能滿(mǎn)足本項(xiàng)目的基本要求,而其他元器件如電阻、電容、LED 燈也能在低溫下正常工作。RT5350 是Ralink 公司在 2010 年左右推出的一款單芯片,其內(nèi)部集成了基帶處理器、射頻、功率放大器以及一顆高性能的 MIPS 24Kc CPU 內(nèi)核(最高主頻為 360 MHz),一個(gè)基于 Ralink RT5350 的五端口百兆以太網(wǎng)交換機(jī)[1],所以?xún)H需很少的外圍元器件就可以實(shí)現(xiàn)低成本的2.4GHz 802.11n 無(wú)線產(chǎn)品。本文將RT5350 作為主控芯片, 采用距離傳感器檢測(cè)雞蛋是否存在,不使用壓力傳感器的原因在于壓力傳感器的功能是檢測(cè)壓力大小,無(wú)法直接檢測(cè)雞蛋的有無(wú),而距離傳感器可以比較直接的檢測(cè)出一定距離內(nèi)是否有物體存在。
智能雞蛋盒與手機(jī)客戶(hù)端建立TCP/IP 連接,通過(guò)距離傳感器檢測(cè)雞蛋數(shù)量,同時(shí)將這些數(shù)據(jù)通過(guò)引腳口的高低電平傳遞給主控芯片,主控芯片經(jīng)過(guò)簡(jiǎn)單處理后將這些信息通過(guò) TCP 傳輸給手機(jī)客戶(hù)端??傇O(shè)計(jì)框圖如圖 1 所示。
1.2 Android客戶(hù)端的設(shè)計(jì)
智能雞蛋盒Android 客戶(hù)端整體的框架設(shè)計(jì)采用狀態(tài)欄 ActionBar、 切換頁(yè)面, 使用 ViewPager 與 Fragment 進(jìn)行界面顯示,使用ListView 和自定義的 Adapter 展示數(shù)據(jù)列表,采用popWindow 組件顯示雞蛋盒里雞蛋存放的時(shí)間[2], 選擇在 Android3.0 之后出現(xiàn)的 ActionBar 來(lái)實(shí)現(xiàn)標(biāo)題顯示, 為了能夠讓 ActionBar 的標(biāo)題居中顯示,我們采用自定義的ActionBar。
在底部欄的選項(xiàng)卡里,文字采用TextView,圖片采用自定義的開(kāi)源框架SVGView,原因在于傳統(tǒng)的 Bitmap(位圖)通過(guò)在每個(gè)像素點(diǎn)上存儲(chǔ)色彩信息來(lái)表達(dá)圖像,而SVG 是一個(gè)繪圖標(biāo)準(zhǔn)。與Bitmap 相比,SVG 放大后不會(huì)失真,且Bitmap 需要為不同的分辨率設(shè)計(jì)多套圖標(biāo),而矢量圖則不需要。
2 智能雞蛋盒的實(shí)現(xiàn)
2.1 硬件電路的實(shí)現(xiàn)
本軟件設(shè)計(jì)是在虛擬機(jī)上的UBUNTU 系統(tǒng)上對(duì)OpenWrt 系統(tǒng)進(jìn)行裁剪,并通過(guò)編寫(xiě)程序來(lái)完成。首先要構(gòu)建編譯環(huán)境,然后下載并配置 OpenWrt,完成基本的配置后,編譯利用UBUNTU 系統(tǒng)自帶的VI 編輯器編寫(xiě)驅(qū)動(dòng)、程序以及MAKEFILE,最后對(duì)整個(gè) OpenWrt 系統(tǒng)進(jìn)行編譯,編譯完成后生成一個(gè)固件,利用串口調(diào)試助手SecureCRT 和tftpd32 軟件將固件燒錄到RT5350 芯片上[3]。
2.2 硬件程序的編寫(xiě)
硬件程序的編寫(xiě)需先打開(kāi)設(shè)備驅(qū)動(dòng)節(jié)點(diǎn)并初始化,等待手機(jī)端連接,創(chuàng)建子進(jìn)程發(fā)送心跳包并判斷連接是否斷開(kāi), 實(shí)時(shí)監(jiān)控接收到的指令并解析,實(shí)時(shí)監(jiān)控雞蛋數(shù)量變更并發(fā)送雞蛋數(shù)量變更數(shù)據(jù)給手機(jī)端。程序整體框架圖如圖 2 所示。
開(kāi)機(jī)后,穩(wěn)壓電路會(huì)對(duì)電源電壓進(jìn)行轉(zhuǎn)換,把電源電壓轉(zhuǎn)換成適合RT5350 芯片工作的 3.3 V 電壓,之后RT5350 芯片開(kāi)始工作;OpenWrt 系統(tǒng)啟動(dòng)后,立即啟動(dòng) Shell 開(kāi)機(jī)啟動(dòng)腳本,對(duì)本軟件程序進(jìn)行啟動(dòng);驅(qū)動(dòng)程序會(huì)建立一個(gè)設(shè)備節(jié)點(diǎn)并對(duì)硬件電路進(jìn)行初始化,此時(shí)硬件電路各部分開(kāi)始工作,程序啟動(dòng)時(shí)會(huì)打開(kāi)字符設(shè)備驅(qū)動(dòng)的節(jié)點(diǎn),從而使程序能夠?qū)τ布M(jìn)行操作,同時(shí)再對(duì)硬件所映射的寄存器進(jìn)行初始化,使各硬件電路開(kāi)始工作;初始化完成后,建立 Socket,程序填充 TCP/IP 網(wǎng)絡(luò)協(xié)議信息[4],并開(kāi)放特定端口等待手機(jī)端的連接 ;創(chuàng)建子進(jìn)程發(fā)送心跳包并判斷連接是否斷開(kāi),子進(jìn)程會(huì)不斷向手機(jī)端發(fā)送心跳包 ;程序?qū)崟r(shí)接收手機(jī)端發(fā)送過(guò)來(lái)的信息并對(duì)信息進(jìn)行指令解析,再根據(jù)相應(yīng)的指令采取相應(yīng)的動(dòng)作;程序通過(guò) I/O 口對(duì) ST188 光電傳感器發(fā)送的信號(hào)進(jìn)行采集,從而對(duì)雞蛋盒上存放的雞蛋數(shù)量進(jìn)行監(jiān)控,只要雞蛋數(shù)量發(fā)生變化,程序會(huì)立即識(shí)別并將雞蛋變更后的數(shù)量發(fā)送到手機(jī)端[5]。
2.3 Android客戶(hù)端的實(shí)現(xiàn)
Android 客戶(hù)端的主要核心模塊是和硬件通訊以及把硬件采集的數(shù)據(jù)顯示到客戶(hù)端。該模塊主要技術(shù)包括Socket 通訊、Service 后臺(tái)、BrodcastReceiver 通訊、Thread 線程以及Java 語(yǔ)言的反射技術(shù)。目前暫時(shí)定位 8 個(gè)雞蛋的原因是Socket 通訊時(shí),在硬件上的開(kāi)發(fā)語(yǔ)言是 C,而C 的一個(gè)字符為 8 個(gè)字節(jié),因此暫時(shí)定位發(fā)送一個(gè)通訊邏輯。根據(jù)需求分析,在與智能雞蛋盒通訊時(shí),我們需要采用 Socket 長(zhǎng)連接通訊機(jī)制, Socket 基于TCP/IP 協(xié)議,為 Client、Service(C/S)連接方式。智能雞蛋盒硬件電路作為 Server 端,而App 作為 Client 端, Client 需要保持長(zhǎng)連接,就需要通過(guò)發(fā)送心跳包來(lái)與Server 保持長(zhǎng)連接,并且 Android 系統(tǒng)的機(jī)制不能堵塞 UI 線程,無(wú)法在主線程操作網(wǎng)絡(luò)訪問(wèn),因此使用Service 和 Thread 作為Socket 通訊的線程,使用Timer 定時(shí)器與Server 端通訊發(fā)送心跳包。設(shè)備模塊實(shí)現(xiàn)圖如圖 3 所示。
3 智能雞蛋盒的測(cè)試
3.1 硬件電路的測(cè)試
系統(tǒng)測(cè)試設(shè)備見(jiàn)表 1 所列,硬件測(cè)試分為如下幾步進(jìn)行:
(1) 檢查該模塊電路的焊接是否正確,用萬(wàn)用表針對(duì)每條線路與每個(gè)可疑的斷線點(diǎn)進(jìn)行逐一排查,看是否有短路和斷路的地方。
(2) 連接 5V電源,靜態(tài)檢查單片機(jī) RT5350芯片的電壓是否為5V,是否正常工作,并檢查各元件是否有異常發(fā)熱現(xiàn)象。檢查距離傳感器是否正常工作,靈敏性是否達(dá)標(biāo)。
(3) 使用數(shù)字萬(wàn)用表測(cè)量電源模塊,將電源電壓穩(wěn)定在3.3V左右。
(4) 將編譯好的OpenWrt固件燒錄到RT5350 核心板上, 在確保程序正常后插上電源對(duì)雞蛋盒進(jìn)行功能檢測(cè),檢測(cè)的內(nèi)容主要有雞蛋數(shù)量能否被正常檢測(cè),雞蛋數(shù)量發(fā)生變化時(shí)能否及時(shí)將信號(hào)傳遞給手機(jī)端[6]。測(cè)試結(jié)果符合要求。
3.2 Android 客戶(hù)端的測(cè)試
使用 Android[7] 手機(jī)進(jìn)行測(cè)試,打開(kāi)Android 客戶(hù)端,連接硬件,查看App 顯示的雞蛋數(shù)量和儲(chǔ)存時(shí)間是否與實(shí)際符合。所使用的手機(jī)為HM NOTE 2(紅米 Note 2),Android 系統(tǒng)版本為Android 4.4.4。測(cè)試結(jié)果符合要求。
4 結(jié) 語(yǔ)
智能雞蛋盒硬件電路的主芯片選擇了具有 WiFi功能模塊的 RT5350芯片, 在嵌入式 Linux系統(tǒng)上進(jìn)行軟件編譯, 運(yùn)用TCP/IP通訊技術(shù)實(shí)現(xiàn)主芯片和手機(jī)客戶(hù)端的連接。智能雞蛋盒 Android 客戶(hù)端主要實(shí)現(xiàn)和硬件電路的通信,把硬件 電路采集的雞蛋庫(kù)存及存放時(shí)間等參數(shù)傳輸?shù)娇蛻?hù)端,方便 用戶(hù)實(shí)時(shí)查看。