劉佳


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