劉佳
摘要:該文論述了Android手機監(jiān)控智能電池電芯的電壓、電流、溫度、充/放電狀態(tài)等特性的實現(xiàn)過程。Android手機通過藍牙協(xié)議與智能電池JDY-32藍牙模塊通信,取代傳統(tǒng)有線串口,實現(xiàn)對智能電池的無線監(jiān)控。通過實際的工作環(huán)境測試表明,該系統(tǒng)運行流暢、操作簡單,數(shù)據(jù)傳輸準確及時。
關(guān)鍵詞:電池監(jiān)控;藍牙;串口;Android
中圖分類號:TP311? ? ? ? 文獻標識碼:A
文章編號:1009-3044(2021)02-0050-02
1 研究背景及內(nèi)容
對智能電池特性的實時監(jiān)控,一般采用串口連接線將電池連接到數(shù)據(jù)終端,通過串口協(xié)議傳輸數(shù)據(jù),監(jiān)控電池狀態(tài)[1]。這種監(jiān)控方式實現(xiàn)簡單、技術(shù)成熟、應(yīng)用廣泛。但有線連接限制了監(jiān)控人員的活動范圍,增加了設(shè)備的重量,不適合在移動場景下使用。
針對有線模式的各種不足,本文設(shè)計并實現(xiàn)了無線監(jiān)控系統(tǒng)。本系統(tǒng)將智能電池終端傳感器收集的電池電壓、電流、溫度、電池充/放電程度等狀態(tài)信息通過藍牙傳送給手機客戶端。監(jiān)控人員通過簡單的操作就可以在Android客戶端上查看電池的實時狀態(tài)信息。本文主要介紹Android客戶端的設(shè)計與實現(xiàn)過程。
2 藍牙模塊簡介及選用
藍牙分為低功耗藍牙和經(jīng)典藍牙?;\統(tǒng)地講可將藍牙3.0及以下版本歸為傳統(tǒng)藍牙,藍牙4.0及以上歸為低功耗藍牙,即BLE。與經(jīng)典藍牙相比,低功耗藍牙傳輸距離更遠,數(shù)據(jù)發(fā)送時延更低,發(fā)送速率更快[2]。低功耗藍牙最大的特點就是能耗極低,一顆紐扣電池就能維持其穩(wěn)定工作數(shù)月甚至更久[3],此外,低功耗藍牙還具有成本低,兼容性強等優(yōu)點[4]。因此本系統(tǒng)選擇了JDY-32低功耗藍牙作為智能電池藍牙模塊。
3 系統(tǒng)設(shè)計
本系統(tǒng)由硬件和軟件兩部分組成。硬件部分由智能電池組、傳感器、單片機、JDY-32藍牙模塊和Android手機組成。軟件部分由智能電池監(jiān)控客戶端組成。系統(tǒng)整體組成如圖1所示。通過傳感器、電流電壓調(diào)理電路及單片機將硬件系統(tǒng)的各個參數(shù)進行采集和轉(zhuǎn)換,通過無線藍牙協(xié)議傳送給Android端,Android端對數(shù)據(jù)進行處理和顯示。
3.1 Android客戶端功能設(shè)計
本文使用Android Studio作為開發(fā)工具,主要完成Android手機監(jiān)控客戶端的設(shè)計與實現(xiàn)。要實現(xiàn)Android手機與BLE藍牙通信,依賴于AndroidSDK中的BluetoothAdapter,BluetoothDevice,BluetoothSocket等API。因BLE藍牙技術(shù)只能在API18及以上版本才能使用,故本App要在Android4.3及以上版本的手機上才能正常運行[5]。App主要由四大功能模塊組成:藍牙掃碼連接模塊,電池監(jiān)控模塊,報警模塊和預(yù)留擴展模塊(BMS)。
藍牙掃描連接模塊負責掃描藍牙設(shè)備,并與藍牙設(shè)備建立連接。電池監(jiān)控模塊負責顯示當前電池參數(shù),實時的監(jiān)控電池狀態(tài)。報警模塊能及時對電池組的電壓,電流,溫度,充/放電狀態(tài)的異常情況做出報警,用紅色醒目加粗字體顯示,同時響起報警鈴聲,提醒使用者排查故障,及時做出相應(yīng)的處理。
3.2 Android客戶端UI設(shè)計
為了提高UI設(shè)計的靈活性,使App可以適應(yīng)于不同的屏幕尺寸,本系統(tǒng)采用在Activity中嵌入 Fragment的方式進行布局。在Fragment中通過自定義ViewPager實現(xiàn)4個界面。通過RadioGroup設(shè)計底部四個菜單,監(jiān)聽RadioGroup的選中事件,對頁面進行切換。自定義ContentAdapter繼承于PagerAdapter用來向ViewPager中填充數(shù)據(jù)。通過上述設(shè)計可以統(tǒng)一界面的風格,提升交互的便捷性。
4 系統(tǒng)實現(xiàn)
對于Android手機與BLE的連接及數(shù)據(jù)傳輸過程,許多研究者做了大量的工作[6],目前技術(shù)已經(jīng)非常成熟,不再贅述。本文主要對數(shù)據(jù)的封裝與解析,藍牙配對與連接,實時監(jiān)控,報警功能的實現(xiàn)進行說明。
4.1 數(shù)據(jù)封裝與解析
為了能讓智能電池單片機識別Android端發(fā)送的指令,要將16進制指令字符串轉(zhuǎn)換為byte數(shù)組后再發(fā)送。新建hexStr2Bytes(String src)函數(shù)返回值類型為byte[],首先使用trim()和toUpperCase()函數(shù)對字符串進行規(guī)范化處理,然后通過相關(guān)函數(shù)將字符串轉(zhuǎn)換為byte[]返回。同理,單片機通過藍牙模塊返回的數(shù)據(jù)為byte數(shù)組,在解析時首先將byte數(shù)組轉(zhuǎn)換為16進制字符串,再根據(jù)解析規(guī)則從16進制字符串中解析出相應(yīng)的電壓、電流、溫度等數(shù)據(jù)。
4.2 藍牙設(shè)備配對與連接
新建BasePager頁面加載base_pager.xml作為所有頁面的父類,在BasePager中實現(xiàn)標題,并創(chuàng)建FrameLayout作為子頁面的容器。新建Buletooth-Pager類繼承自BasePager加載pager_buletooth.xml作為藍牙掃描與連接頁面。Android端與智能電池藍牙連接實現(xiàn)過程如下。
1)申請藍牙權(quán)限
在AndroidManifest.xml中申請BLUETOOTH_ADMIN和BLUETOOTH權(quán)限,否則無法打開和使用藍牙功能。
2)掃描當前存在的藍牙
使用BluetoothAdapter中的startDiscovery()進行掃描,發(fā)現(xiàn)新設(shè)備時發(fā)出BluetoothDevice.ACTION_FOUND廣播。創(chuàng)建ListView用來顯示掃描到的藍牙列表。在廣播接收器中接收到ACTION_FOUND廣播后,將掃描到的藍牙名稱、Mac地址等設(shè)備信息加入ListView中,持續(xù)檢測設(shè)備直到發(fā)現(xiàn)附件的所有藍牙設(shè)備。
3)連接藍牙
為ListView的每一個Item添加點擊事件,用以監(jiān)聽用戶的動作。用戶通過點擊Item選擇要連接的藍牙設(shè)備,本應(yīng)用選擇智能電池藍牙模塊名稱為JDY-32,通過device.createRfcommSocketToServiceRecord(UUID)獲取BluetoothSocket對象,其中UUID代表通用唯一識別碼,對于藍牙設(shè)備而言,每個服務(wù)都有通用、獨立、唯一的UUID與之對應(yīng)。本應(yīng)用使用藍牙串口服務(wù),對應(yīng)UUID = ‘{00001101-0000-1000-8000-00805F9B34FB},最后通過BluetoothSocket中的connect()方法連接設(shè)備,首次連接時需要輸入默認的配對密碼,JDY-32藍牙模塊對應(yīng)的配對密碼為“1234”,配對成功后藍牙設(shè)備將被保存在手機藍牙配對列表中,后續(xù)可直接連接無須輸入密碼。
4.3 實時監(jiān)測的實現(xiàn)
新建MonitorPager類繼承自BasePager加載pager- monitor.xml作為實時監(jiān)測頁面。為了在接收數(shù)據(jù)時不阻塞主線程,本系統(tǒng)通過Runnable機制新建子線程處理藍牙數(shù)據(jù)的接收事件,并將子線程設(shè)置為高優(yōu)先級,保證偵聽的連續(xù)性、實時性。子線程接收到新消息后,通過Handler機制通知主線程更新監(jiān)控界面。Android端每隔1秒發(fā)送一次請求指令,監(jiān)控界面每隔1秒刷新一次。
4.4 報警功能的實現(xiàn)
新建AlarmPager類繼承自BasePager加載pager- alarm.xml作為報警列表頁面。實現(xiàn)調(diào)用手機震動過程如下。在AndroidManifest.xml文件中申請"android.permission.VIBRATE"權(quán)限。通過activity.getSystemService(Context.VIBRATOR_SERVICE)獲取Vibrator對象,再通過long[] patter = {1000, 1000, 2000, 50};vibrator.vibrate(patter, 0);設(shè)置震動時間。vibrate函數(shù)的第二參數(shù)表示從哪里開始循環(huán),0表示這個數(shù)組在第一次循環(huán)完之后會從下標0開始循環(huán)到最后。
5 測試與總結(jié)
本測試使用魅族pro6s手機作為Android端,智能電池端已焊接好JDY-32藍牙模塊。測試了包括,藍牙掃描,藍牙連接,實時監(jiān)控,報警等所有功能。整個測試過程App運行流暢,藍牙連接正常,數(shù)據(jù)獲取、轉(zhuǎn)換、顯示正常,報警功能正常。實現(xiàn)效果如圖2所示。
本文很好地實現(xiàn)了智能電池無線監(jiān)測系統(tǒng),解決了傳統(tǒng)有線監(jiān)控方式的諸多不便,為智能電池的監(jiān)控提供了一種更加可靠、便捷的方案,具有一定的實用意義。BLE低功耗藍牙是大勢所趨,對于小型智能產(chǎn)品來說,是一種很好的通信方式。隨著Android系統(tǒng)的不斷迭代發(fā)展,對BLE藍牙的支持也會更加完善,基于BLE藍牙開發(fā)的App前景也將會更加廣闊。
參考文獻:
[1] 周賀松.一種基于物聯(lián)網(wǎng)技術(shù)的多功能采集系統(tǒng)[J].物聯(lián)網(wǎng)技術(shù),2020,10(5):46-48,54.
[2] Shaikh Shahriar Hassan,Soumik Das Bibon,MdShohrab Hossain,et al. Security threats in Bluetooth technology[J]. Computers & Security,2018,74:308-322.
[3] 陳冬云.淺談藍牙4.0“助力”物聯(lián)網(wǎng)的發(fā)展[J].教師,2014(17):126.
[4] Robin Heydon.低功耗藍牙開發(fā)權(quán)威指南[M]. 陳燦峰,劉嘉,譯.北京:機械工業(yè)出版社,2014.
[5] 萬燕,李麗麗.基于Android與BLE的藍牙通信系統(tǒng)的實現(xiàn)[J].科技創(chuàng)新與應(yīng)用,2018(16):15-17.
[6] 熊小軍,萬輝勇,陳泓屹.基于Android的低功耗藍牙通訊研究與實現(xiàn)[J].科技廣場,2015(7):122-127.
【通聯(lián)編輯:代影】