物聯(lián)網(wǎng)
- 首頁 >> 新聞資訊 >> 博客文章 >> 物聯(lián)網(wǎng)
藍(lán)牙防丟器控制板設(shè)計(jì)
隨著科技的進(jìn)步以及各種新鮮事物的沖擊,個(gè)人在單位時(shí)間內(nèi)處理的任務(wù)和信息量相較于過去有顯著的提高。在高強(qiáng)度的生活中,遺忘現(xiàn)象十分普遍。如何尋找遺忘的物件也成為人們生活中的一個(gè)難題,比如隨手一放的鑰匙,錢幣,飾品,還有信用卡,個(gè)人證件,耳機(jī)等等物品。設(shè)計(jì)一款專門針對(duì)細(xì)小物件的防丟器非常實(shí)用,防丟器可以通過與細(xì)小物件綁定在一起,當(dāng)物主和物件分離時(shí)提供報(bào)警,尋回等功能。本設(shè)計(jì)利用現(xiàn)在已普及的智能手機(jī)為載體,設(shè)計(jì)了一款基于Android平臺(tái)和低功耗藍(lán)牙技術(shù)的智能防丟器。
一、防丟器的功能實(shí)現(xiàn)方案
藍(lán)牙防丟器由兩部分組成。一部分為與物件捆綁在一起藍(lán)牙設(shè)備從機(jī),一部分為用戶隨身攜帶的藍(lán)牙設(shè)備主機(jī)。用戶與其防丟物件之間往往需要維持較近的距離,所以利用藍(lán)牙短距離無線通信這一特點(diǎn)使設(shè)計(jì)非常便利。首先,從機(jī)和主機(jī)之間要建立了藍(lán)牙配對(duì)連接,用戶通過主機(jī)搜索到正在廣播的從機(jī),在主機(jī)的配對(duì)表里選擇從機(jī)完成連接。當(dāng)從機(jī)與主機(jī)建立連接后,主機(jī)周期性地得到一個(gè)主從機(jī)之間的信號(hào)強(qiáng)度值。當(dāng)該信號(hào)強(qiáng)度值小于預(yù)設(shè)的信號(hào)強(qiáng)度閾值時(shí),主機(jī)啟動(dòng)報(bào)警,提醒用戶物件即將遺失。
當(dāng)安卓手機(jī)檢測到信號(hào)強(qiáng)度過弱并報(bào)警時(shí),便通過GPS記錄下此時(shí)的位置信息。若施主沒有聽到報(bào)警聲,便可以根據(jù)這個(gè)位置記錄找到失物的大致位置,并實(shí)現(xiàn)尋回。此位置信息還可以和一些地圖軟件的API相結(jié)合,在地圖上更加直觀地顯示出失物的位置。
二、低功耗藍(lán)牙從機(jī)設(shè)計(jì)
本設(shè)計(jì)的從機(jī)由CC2540藍(lán)牙芯片組成,實(shí)現(xiàn)簡單的藍(lán)牙廣播功能。隨著智能手機(jī)的普及,市面上的大部分安卓手機(jī)都支持藍(lán)牙,但不是所有的安卓手機(jī)都能支持基于藍(lán)牙4.0的低功耗藍(lán)牙。所以主機(jī)選用搭載支持低功耗藍(lán)牙協(xié)議4.0的安卓手機(jī)(安卓4.3.1及以上)。每當(dāng)藍(lán)牙芯片向手機(jī)發(fā)送一個(gè)數(shù)據(jù)包,便會(huì)提供手機(jī)一個(gè)信號(hào)強(qiáng)度的估計(jì)值。本設(shè)計(jì)的主要過程便基于此實(shí)現(xiàn)。
2.1 CC2540軟件設(shè)計(jì)
CC2540藍(lán)牙芯片的軟件由OSAL操作系統(tǒng)抽象層和硬件抽象層HAL組成,OSAL操作系統(tǒng)抽象層是藍(lán)牙4.0BLE協(xié)議棧內(nèi)加入的一個(gè)小的操作系統(tǒng)。BLE協(xié)議棧、profile以及所有應(yīng)用程序都是建立在OSAL的基礎(chǔ)上。硬件抽象層HAL位于操作系統(tǒng)內(nèi)核與硬件電路之間的接口。隱藏了硬件的具體細(xì)節(jié),方便軟件在各平臺(tái)上的移植并使得軟硬件測試功能成為可能。
低功耗藍(lán)牙協(xié)議棧的運(yùn)行流程簡析:在整個(gè)程序的main()函數(shù)中包含了整個(gè)程序的入口,低功耗藍(lán)牙協(xié)議棧的運(yùn)行流程大致如下:(1)初始化硬件。(2)初始化I/O板。(3)初始化HAL驅(qū)動(dòng)。(4)初始化NV系統(tǒng)。(5)初始化操作系統(tǒng)。(6)使能中斷。(7)最后初始化電路板。(8)運(yùn)行OSAL操作系統(tǒng)。當(dāng)系統(tǒng)初始化后即進(jìn)入低功耗模式,若沒有任務(wù),則持續(xù)處于低功耗模式。若有任務(wù)加入,則喚醒系統(tǒng),離開低功耗模式,任務(wù)處理完成后,回到低功耗模式。
低功耗藍(lán)牙實(shí)現(xiàn)低功耗的主要方法:連接間隙:低功耗藍(lán)牙設(shè)備使用跳頻機(jī)制實(shí)現(xiàn)連接,即設(shè)備發(fā)送數(shù)據(jù)選用的信道是隨時(shí)間變化而變化的。設(shè)備之間可以通過鏈路層的數(shù)據(jù)交換來維持連接,而不用通過數(shù)據(jù)的接受和發(fā)送。從一次信道切換后收發(fā)數(shù)據(jù)到下一次信道切換收發(fā)數(shù)據(jù)之間的時(shí)間間隔叫連接間隔。通過設(shè)置較大的連接間隔可以明顯地節(jié)省功耗,而數(shù)據(jù)發(fā)送速度更慢。
從機(jī)延遲:當(dāng)沒有數(shù)據(jù)數(shù)據(jù)可發(fā)送時(shí),從機(jī)便可以選擇跳過連接間隙,直到有數(shù)據(jù)發(fā)送,跳過間隙的數(shù)量有一定的限制,但通過跳過有限的連接間隙便可以極大地減小功耗的消耗。
2.2低功耗藍(lán)牙防丟器從機(jī)的關(guān)鍵實(shí)現(xiàn)
(1)設(shè)備的配置以及藍(lán)牙協(xié)議棧的初始化:選用CC2540模塊主要是作為與隨身物件綁定的跟蹤器,故芯片模塊的狀態(tài)設(shè)為從機(jī)。初始化配置文件GAP為外部設(shè)備模式,設(shè)置從機(jī)為上電即廣播。
(2)設(shè)置GAP參數(shù)的部分代碼,設(shè)置GAP特性,信號(hào)強(qiáng)度值的更新速度,以及廣播間隙的部分代碼。
(3)根據(jù)Rssi信號(hào)強(qiáng)度值計(jì)算兩設(shè)備之間的距離。根據(jù)大量的調(diào)查,發(fā)現(xiàn)只在有限范圍內(nèi),兩設(shè)備之間的距離才和信號(hào)強(qiáng)度值成不太標(biāo)準(zhǔn)的線性關(guān)系。計(jì)算距離的算法精確度并不高,而且距離比起信號(hào)強(qiáng)度值參考價(jià)值較低。所以經(jīng)過計(jì)算得出的兩設(shè)備之間的距離值只具有參考意義,并不運(yùn)用于實(shí)際的報(bào)警判斷。
(4)將獲得的Rssi信號(hào)強(qiáng)度值經(jīng)過處理后發(fā)送到主機(jī)(安卓手機(jī)設(shè)備),Rssi為信號(hào)強(qiáng)度值,是藍(lán)牙防丟器的主要參考數(shù)據(jù)。
三、防丟器安卓手機(jī)端設(shè)計(jì)
因?yàn)橐玫街挥蠥ndroid 4.3以上版本才有的API,所以本設(shè)計(jì)軟件選用Android4.3.1系統(tǒng)開發(fā)。而搭載Android4.3.1的設(shè)備可以是智能手機(jī),智能手表,智能電視等。智能手機(jī)相對(duì)其他安卓設(shè)備而言更加普及、更加方便攜帶,本軟件設(shè)計(jì)主要針對(duì)手機(jī)進(jìn)行適配。
3.1手機(jī)軟件界面
手機(jī)軟件界面分為兩部分:第一部分是主要是藍(lán)牙設(shè)備的掃描,和連接的建立。我們把它叫做設(shè)備掃面界面。在此頁面中,軟件掃描外部可連接的藍(lán)牙設(shè)備,建立一個(gè)可連接設(shè)備的設(shè)備目錄,在其中顯示每一個(gè)可連接設(shè)備的設(shè)備名,UUID地址,Rssi信號(hào)強(qiáng)度值和估算的距離值。界面中的顯示設(shè)備的滾動(dòng)目錄通過定義ViewHolder類來輔助實(shí)現(xiàn)。目錄通過getView方法來獲取將要顯示的項(xiàng),而在getView方法中,主要通過findViewById方法來查找,findViewById是一個(gè)基于樹的查找方法,對(duì)時(shí)間的消耗非常大,而且要從XML布局文件中生成View對(duì)象。所以當(dāng)需要列出的項(xiàng)變得很多時(shí),軟件的運(yùn)行速度將會(huì)大大降低。ViewHolder主要針對(duì)可以滾動(dòng)顯示的目錄,通過優(yōu)化當(dāng)目錄項(xiàng)滾動(dòng)到屏幕外時(shí)的所進(jìn)行的操作來大大降低系統(tǒng)消耗。
手機(jī)界面設(shè)計(jì)的第二部分:手機(jī)和藍(lán)牙芯片建立連接后顯示信號(hào)強(qiáng)度值,連接狀態(tài)等信息:在上面的可連接設(shè)備目錄中選擇一個(gè)設(shè)備后,就進(jìn)入正式的監(jiān)測。該界面中主要顯示的是一些監(jiān)測得到的數(shù)據(jù)信息。該部分主要由一個(gè)可以滾動(dòng)的ScrollView組成。在這個(gè)ScrollView中滾動(dòng)顯示一些實(shí)時(shí)檢測到的數(shù)據(jù)。
3.2 Android手機(jī)中的Service和Activity
Activity包括用戶正在訪問的GUI和創(chuàng)建GUI時(shí)需要運(yùn)行的程序,而GUI和這些程序是相互阻塞的。當(dāng)一個(gè)Activity中運(yùn)行的代碼時(shí)間復(fù)雜度太大時(shí),這段代碼就會(huì)因?yàn)殚L期阻塞GUI而使界面崩潰。所以需要長時(shí)間運(yùn)行的程序必須放入每個(gè)Activity所對(duì)應(yīng)的Service當(dāng)中。Service是獨(dú)立于Activity運(yùn)行的,兩者可以相互通信。而藍(lán)牙建立連接后不斷傳輸數(shù)據(jù)的過程是一個(gè)長時(shí)間的過程。所以必須建立一個(gè)為藍(lán)牙傳輸數(shù)據(jù)服務(wù)的Service。
3.3手機(jī)端和設(shè)備藍(lán)牙連接的建立
BLE藍(lán)牙通過GATT建立連接。建立連接后便開始數(shù)據(jù)的傳輸,藍(lán)牙在后臺(tái)傳輸?shù)玫降臄?shù)據(jù),通過傳遞消息控制Activity的實(shí)時(shí)更新。軟件流程設(shè)計(jì)如下:(1)初始化藍(lán)牙適配器;(2)打開藍(lán)牙:在BlueToothClass類中,定義了一些回調(diào)函數(shù),這些回調(diào)函數(shù)返回了手機(jī)和藍(lán)牙設(shè)備之間的通信結(jié)果;(3)連接狀態(tài)改變的回調(diào),通過此回調(diào)可以得知設(shè)備是否連接:(4)發(fā)現(xiàn)服務(wù)的回調(diào);(5)讀操作的回調(diào);(6)數(shù)據(jù)返回的回調(diào):在BlueToothCalss類中連接狀態(tài)回調(diào)函數(shù)onConnectionStateChange中打開TimerTask線程,周期性地讀取Rssi信號(hào)強(qiáng)度值。藍(lán)牙防丟器的從機(jī)會(huì)不斷向主機(jī)發(fā)送Rssi的值,作為主機(jī)的手機(jī)通過Android的readRemoteRssi方法來實(shí)現(xiàn)對(duì)Rssi值的讀取:(7)通過回調(diào)函數(shù)onReadRemoteRssi決定當(dāng)收到Rssi值的時(shí)候該做什么工作;(8)在安卓中Intent對(duì)象負(fù)責(zé)完成在Activity和Service之間以及Activity之間的消息傳遞,該函數(shù)通過Intent將藍(lán)牙進(jìn)程得到的Rssi信息傳給主進(jìn)程Activity進(jìn)行處理。
3.4手機(jī)端報(bào)警的實(shí)現(xiàn)
接受藍(lán)牙線程傳輸過來的Rssi值,當(dāng)Rssi值大于允許范圍時(shí),手機(jī)便將此狀態(tài)視作危險(xiǎn)狀態(tài),開始報(bào)警。但這種方法存在很大的誤差:第一,從機(jī)對(duì)Rssi值的估計(jì)存在一定的誤差,很可能由于天氣,溫度等因素而發(fā)生較大的差異。第二,如果物品攜帶者正在移動(dòng),那么在手機(jī)和防丟物品之間就很有可能出現(xiàn)障礙物。障礙物將干擾設(shè)備報(bào)送的信號(hào)強(qiáng)度值,從而對(duì)判斷產(chǎn)生影響。為了減少由上述原因造成的誤差,當(dāng)收到設(shè)備傳送過來的Rssi值時(shí)我們并不立即對(duì)其做出判斷。而是將每次收到的Rssi值存到一個(gè)緩存數(shù)組里面。當(dāng)緩存數(shù)組存滿十個(gè)值后。對(duì)這十個(gè)值取一個(gè)平均數(shù),把這個(gè)平均值作為判斷的主要依據(jù)。經(jīng)過測試這樣將極大地減少誤差,使判斷更加準(zhǔn)確。當(dāng)平均值超過指定的值時(shí),打開音樂報(bào)警線程,當(dāng)平均值在允許的范圍內(nèi)時(shí),關(guān)閉報(bào)警線程。
四、防丟器的測試
CC2540芯片的程序編寫在IAR Embedded Workbench中進(jìn)行。這是一款由IAR公司提供的一款C語言編譯器,支持眾多的微處理器同時(shí)也支持CC2540低功耗藍(lán)牙芯片,而手機(jī)端程序的編寫與調(diào)試則是在eclipse平臺(tái)上進(jìn)行。eclipse是一款基于java的開源開發(fā)環(huán)境,通過安裝Android系統(tǒng)的支持插件,結(jié)合Android SDK就可以開發(fā)安卓程序。
測試過程以及結(jié)果:將CC2540芯片通過配套仿真器燒錄好程序,通上電以后與細(xì)小物件綁定在一起。智能手機(jī)用數(shù)據(jù)線與電腦連接,在eclipse上將調(diào)試好的程序下載到手機(jī)上進(jìn)行安裝。一切準(zhǔn)備就緒后開始測試防丟器。通過手機(jī)在打開藍(lán)牙的情況下打開軟件,軟件中出現(xiàn)滾動(dòng)列表,顯示搜索到的正在廣播的藍(lán)牙設(shè)備。
選擇我們的CC2540藍(lán)牙芯片建立連接。幾秒后,連接建立成功,手機(jī)進(jìn)入監(jiān)測報(bào)警模式。進(jìn)入報(bào)警模式后,CC2540不斷發(fā)送Rssi值到手機(jī)上。同時(shí),手機(jī)屏幕上也滾動(dòng)顯示每一次收到的Rssi值以及根據(jù)Rssi值計(jì)算出來的距離值。移動(dòng)手機(jī),當(dāng)手機(jī)在安全范圍內(nèi)時(shí),不報(bào)警。將手機(jī)移動(dòng)至遠(yuǎn)處,發(fā)現(xiàn)當(dāng)手機(jī)與物件之間的距離過遠(yuǎn)時(shí),手機(jī)開始報(bào)警。
結(jié)語
隨著藍(lán)牙4.2的發(fā)布,低功耗藍(lán)牙便成為短距離無線通信的首要之選。低功耗藍(lán)牙可以提高續(xù)航時(shí)間,而隨身物品恰好也需要長時(shí)間和主人在一起,選用藍(lán)牙技術(shù)提供的支持極大地方便了防丟器的設(shè)計(jì)。防丟器設(shè)計(jì)的關(guān)鍵問題是如何防丟,怎么判斷物件是否處于遺失狀態(tài)。我們選用手機(jī)與設(shè)備之間的信號(hào)強(qiáng)度值來判斷,因?yàn)樾盘?hào)強(qiáng)度值隨距離的增大而減弱,當(dāng)物主與其物件之間的距離較遠(yuǎn)時(shí),可以看作物主已經(jīng)遺失了該物件,實(shí)驗(yàn)證明,通過這樣一種信號(hào)弱則報(bào)警的簡單判斷是可以應(yīng)對(duì)大多數(shù)的情況的,設(shè)計(jì)具有良好的實(shí)用性。
以上就是我們深圳市組創(chuàng)微電子有限公司為您介紹的基于Android平臺(tái)的智能藍(lán)牙防丟器的設(shè)計(jì)開發(fā)示例。如果您有藍(lán)牙耳機(jī)方案開發(fā)需求,可以放心交給我們。我們代理多種單片機(jī)、語音芯片、雙模藍(lán)牙IC、wifi芯片。品牌有松翰單片機(jī)、應(yīng)廣單片機(jī)、杰理藍(lán)牙、安凱藍(lán)牙、全志、瑞昱(realtek)。我們的技術(shù)服務(wù)范圍有:PCB設(shè)計(jì)、單片機(jī)開發(fā)、藍(lán)牙方案、軟硬件定制開發(fā)、APP開發(fā)、小程序開發(fā)、微信公眾號(hào)開發(fā)等。還可以承接智能電子產(chǎn)品方案設(shè)計(jì)、生活電器開發(fā)、美容儀器研發(fā)、物聯(lián)網(wǎng)平臺(tái)應(yīng)用、智能家居控制系統(tǒng)、TWS耳機(jī)、藍(lán)牙耳機(jī)音箱開發(fā)、兒童益智玩具方案開發(fā)、電子教育產(chǎn)品方案設(shè)計(jì)等。
- 返回頂部