姜 浩
(寧波職業技術學院,寧波 315800)
隨著家電智能化的普及和安卓系統的飛速發展,集成化程度高的、擁有類似智能手機觸摸交互方式的一體機廚房電器已經受到越來越多消費者的喜愛,但目前廚房電器普遍功能單一,操作方式也是傳統的按鈕式的,這成為觸發筆者研究智能烹飪軟件系統實現方式的背景。該智能烹飪系統主要分三部分:主控機、執行模塊和串口;主控機上部署安卓系統,是智能烹飪系統的核心,管理著所有烹飪任務的執行狀態;執行模塊由多個單一的烹飪單元組成,來執行烹飪任務;串口是主控機和執行模塊之間進行通信單元,系統框架見圖1。本文主要研究該系統軟件部分的實現。

圖1 智能烹飪系統框架
安卓系統在較早的版本已經提供了串口通信的實現接口,比如4.4版本,但該接口是@hide 隱藏的,不對外開放,只有系統級才能調用。智能烹飪模塊為應用層級的軟件系統,因此無法實現接口的直接調用。雖然也可以通過反射機制繞過這一限制,但反射調用會影響軟件系統運行的性能,為了讓整套系統能更高效地運行,再三思考后決定選用Github 上開源的android-serialportapi 項目作為串口通信的方案。
android-serialport-api 項目是native 層的實現,因此我們需要在Android Studio 開發環境中添加NDK 環境,在應用工程的build.gradle 腳本中增加cmake 編譯語句,把它編譯成*.so 格式的本地庫,集成到安卓應用中,供應用層Java 代碼調用來實現串口的打開、關閉、設置波特率等接口。腳本修改部分見圖2。

圖2 build.gradle腳本修改
利用JNI 開發技術,實現Java 層對android-serialport-api 項目中提供的native 接口的調用和封裝,供安卓應用層訪問串口設備使用。Java 層串口訪問接口見圖3。

圖3 串口通信的Java層接口
智能烹飪模塊是該軟件系統的核心,它包括人機交互界面、智能烹飪管理器和串口服務。其中智能烹飪管理器負責管理所有的烹飪任務,支持預約、暫停、繼續、停止以及報警等烹飪功能。串口服務是智能烹飪模塊的核心,它負責監聽串口數據的變化,獲得執行模塊的各單元的工作狀態,從而更新狀態給人機交互界面和智能烹飪管理器,它是一個安卓后臺服務,它管理著一個輪詢讀取串口數據的線程,每200毫秒會讀取串口中最新的數據。為什么采用輪詢方式呢?因為執行模塊在執行單元狀態發生變化時,會把最新的狀態寫入到串口設備中,但是它無法主動通知到智能烹飪模塊,因此在智能烹飪模塊側只能通過輪詢監聽方式來獲取狀態更新。串口服務的軟件流程見圖4。

圖4 串口服務軟件流程圖
本文介紹了基于串口通信的智能烹飪軟件系統的設計實現,基于該方案設計原型系統,對系統功能、性能進行測試與分析,結果顯示,該方案完全能適用并滿足于廚房電器一體化智能控制中心系統的要求。