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