基于 Bluetooth 技術(shù)的Beacon,最簡單的理解就是一個(gè)小型的信息基站,可以應(yīng)用在室內(nèi)導(dǎo)航、移動(dòng)支付、店內(nèi)導(dǎo)購、人流分析、物品跟蹤等等所有與人在室內(nèi)流動(dòng)相關(guān)的活動(dòng)之中。Beacon技術(shù)做到的是通過Bluetooth Smart向通信覆蓋范圍內(nèi)的移動(dòng)設(shè)備捕捉和推送信息。2014年已經(jīng)有許多機(jī)構(gòu)開展了一些實(shí)驗(yàn)性項(xiàng)目,并有預(yù)測指出,2015年Beacon將在全球范圍內(nèi)將得到大力部署、并帶來更多新型服務(wù)。ABI Research預(yù)測到2019年市場上的Beacon設(shè)備總數(shù)將達(dá)到六千萬臺(tái),市場規(guī)模之大,可見一斑。
從概念到開發(fā),基于藍(lán)牙的Beacon技術(shù)純干貨!
發(fā)布時(shí)間:2015-12-08 來源:EDN電子技術(shù)設(shè)計(jì) 責(zé)任編輯:wenwei
【導(dǎo)讀】隨著時(shí)代的發(fā)展,現(xiàn)代人對移動(dòng)設(shè)備越來越依賴,也有越來越多的活動(dòng)在室內(nèi)進(jìn)行,而GPS這樣的室外導(dǎo)航在室內(nèi)中有些死角及易受建筑物的干擾,且從精準(zhǔn)度和耗電量上不能滿足室內(nèi)定位的需求。因此,基于藍(lán)牙技術(shù)的Beacon應(yīng)運(yùn)而生,成為理想的室內(nèi)數(shù)據(jù)解決方案。
基于 Bluetooth 技術(shù)的Beacon,最簡單的理解就是一個(gè)小型的信息基站,可以應(yīng)用在室內(nèi)導(dǎo)航、移動(dòng)支付、店內(nèi)導(dǎo)購、人流分析、物品跟蹤等等所有與人在室內(nèi)流動(dòng)相關(guān)的活動(dòng)之中。Beacon技術(shù)做到的是通過Bluetooth Smart向通信覆蓋范圍內(nèi)的移動(dòng)設(shè)備捕捉和推送信息。2014年已經(jīng)有許多機(jī)構(gòu)開展了一些實(shí)驗(yàn)性項(xiàng)目,并有預(yù)測指出,2015年Beacon將在全球范圍內(nèi)將得到大力部署、并帶來更多新型服務(wù)。ABI Research預(yù)測到2019年市場上的Beacon設(shè)備總數(shù)將達(dá)到六千萬臺(tái),市場規(guī)模之大,可見一斑。
多數(shù)情況下,通過Beacon可以進(jìn)行室內(nèi)定位并提供相應(yīng)的服務(wù),如在百貨商場及時(shí)推送品牌促銷信息、在機(jī)場為旅客定位登機(jī)口和餐飲設(shè)施的位置、或在博物館向游客推送身旁的文物信息等。在這些應(yīng)用場景中,Beacon的位置是固定的,用戶通過智能手機(jī)APP可以獲取這些位置信息。但最近也有一些移動(dòng)的Beacon應(yīng)用出現(xiàn)。例如Lighthouse公司推出的一款可穿戴式的Beacon解決方案,對需要特殊幫助的學(xué)生進(jìn)行位置追蹤并保障他們的安全。在中國,每到春運(yùn)或旅游旺季,總有老人或兒童在擁擠的人流中走散,而未來這種基于移動(dòng)和可穿戴式Beacon的解決方案可以幫助人們更快速準(zhǔn)確地在公共場所找到走失的親人。
規(guī)劃Beacon ID,準(zhǔn)確判斷相對位置
Beacon的首要任務(wù)就是允許APP確認(rèn)兩者之間的相對位置,并借助這一位置信息實(shí)現(xiàn)更多功能。APP必須擁有相應(yīng)數(shù)據(jù)的訪問權(quán)限,并將藍(lán)牙廣告數(shù)據(jù)包中所傳輸?shù)腂eacon ID與實(shí)際位置分布信息相對應(yīng)。位置信息的表達(dá)越簡單越好,以便于APP讀取和分析。例如,而對于商場的Beacon應(yīng)用,根據(jù)店鋪ID規(guī)劃Beacon ID會(huì)更合適,這樣APP就能夠判斷出用戶是走進(jìn)了左邊的這家李寧,還是右邊的那家耐克。
根據(jù)位置信息規(guī)劃Beacon廣告數(shù)據(jù)包中的Beacon ID,是Beacon實(shí)現(xiàn)諸多應(yīng)用的重要前提。Beacon ID 數(shù)據(jù)可以通過設(shè)備上安裝的APP在本地進(jìn)行設(shè)置,也可發(fā)送至云端或網(wǎng)絡(luò)以便遠(yuǎn)程操作。本地?cái)?shù)據(jù)存儲(chǔ)的好處在于它便于訪問,而且沒有網(wǎng)絡(luò)也照樣能夠運(yùn)行。而遠(yuǎn)程數(shù)據(jù)存儲(chǔ)的情況下,用戶使用的數(shù)據(jù)是相同的,但網(wǎng)絡(luò)訪問難免更耗時(shí),因此要加倍注意確保用戶體驗(yàn)不受影響。有時(shí)最佳的解決方案是采用“混搭”的方式,即將本地?cái)?shù)據(jù)及時(shí)進(jìn)行遠(yuǎn)程同步、并存儲(chǔ)在APP的本地?cái)?shù)據(jù)庫中。這樣,在沒有網(wǎng)絡(luò)的情況下,APP也能夠使用最新的數(shù)據(jù)了。
APP后臺(tái)自動(dòng)運(yùn)行,無需用戶干預(yù)
對于用戶來說,最好無需特意開啟APP就能夠探測到附近的Beacon。也就是說APP最好能夠自動(dòng)在后臺(tái)運(yùn)行,而不需要用戶干預(yù)。這就需要開發(fā)時(shí)注意系統(tǒng)資源(如電源電量)的合理使用。當(dāng)然,前提是要確保您的智能手機(jī)開啟了藍(lán)牙功能。
相對距離視情況而定
到底多近才算近,這是所有Beacon應(yīng)用開發(fā)者需要考慮的問題。實(shí)際上,這需要根據(jù)實(shí)際情況決定。對一些應(yīng)用來說,只要有一兩個(gè)Beacon (多個(gè)Beacon即可定義”區(qū)域“) 的信號(hào),就可以觸發(fā)動(dòng)作了,例如針對走進(jìn)商場或店鋪的顧客、機(jī)場里走近值機(jī)柜臺(tái)的旅客等。而對于其他一些應(yīng)用,可能需要用戶十分靠近特定的Beacon時(shí),才會(huì)提示用戶。比如占地較小、陳列物密集的博物館或美術(shù)館的導(dǎo)覽系統(tǒng),就需要在參觀者十分靠近特定的展品時(shí)才會(huì)提示相應(yīng)的展品信息。
通過Beacon可以推算用戶的相對距離。因?yàn)閺V告數(shù)據(jù)包中包含了距離與信號(hào)強(qiáng)度的對照數(shù)據(jù)(比如距離為一米時(shí),信號(hào)強(qiáng)度是多少多少),所以我們就可以通過接收器(比如手機(jī))測量到的信號(hào)強(qiáng)度推算出相對應(yīng)的距離。如果你使用了API(Application Programming Interface, 應(yīng)用程序編程接口),就會(huì)發(fā)現(xiàn)API其實(shí)能夠很方便地實(shí)現(xiàn)距離測算。但是,必須指出距離是推算的、而非精確計(jì)算的結(jié)果(雖然測算的準(zhǔn)確度已經(jīng)可以滿足當(dāng)前大部分應(yīng)用的需求)。
Beacon廣告數(shù)據(jù)形式多種選擇
關(guān)于Beacon的文章已經(jīng)有很多了,尤其是關(guān)于iBeacon的。iBeacon是蘋果的廣告數(shù)據(jù)形式,是蘋果公司的專利。iOS設(shè)備對iBeacon提供原生支持,但有些情況下還需要滿足特定的認(rèn)證要求。關(guān)于iBeacon的更多信息可訪問Apple.com。
但是,還有一些其他的Beacon廣告形式規(guī)格,例如Radius Network的AltBeacon。AltBeacon是開源的,可應(yīng)用于任何平臺(tái)而不受限制。它最近還發(fā)布了面向安卓系統(tǒng)的開源API。
如何開啟運(yùn)用
零售商與市場營銷領(lǐng)域是Beacon的大舞臺(tái),可以為通路營銷與更佳的消費(fèi)者體驗(yàn)提供無限的想象空間。可以預(yù)見,Beacon的運(yùn)用將會(huì)有光明的前景:通過Beacon將產(chǎn)品和促銷信息發(fā)送給顧客;博物館和美術(shù)館等也可以開發(fā)專門的應(yīng)用,向走進(jìn)展廳的參觀者發(fā)送展廳主題介紹、或?qū)υ谡蛊非榜v足的參觀者發(fā)送詳細(xì)的展品信息等;機(jī)場還可以用Beacon追蹤所有旅客的動(dòng)向。對于有開發(fā)Beacon應(yīng)用想法的讀者,可以注冊下載最新的開發(fā)工具Bluetooth Developer Studio,開啟自己的Beacon開發(fā)之旅。
手把手教你如何開發(fā)AltBeacon安卓APP
前面已經(jīng)介紹了Beacon的一些基礎(chǔ)知識(shí),以及AltBeacon和它的藍(lán)牙廣告形式。下面將用一個(gè)實(shí)際的開發(fā)案例,指導(dǎo)讀者學(xué)習(xí)如何用AltBeacon安卓API開發(fā)Beacon原型APP。
運(yùn)用Beacon進(jìn)行博物館導(dǎo)覽
將Beacon應(yīng)用于博物館導(dǎo)覽,這樣當(dāng)游客靠近展品時(shí),APP可以提示該展品的相關(guān)信息,走過路過就再也不會(huì)錯(cuò)過!想象一下,如果故宮有了這款A(yù)PP, 當(dāng)游客走到一個(gè)不明覺厲的青銅方樽面前,只要拿起手機(jī)就能快速了解它的主人、出土信息和花紋的寓意,再也不用擔(dān)心被人嘲笑沒文化了。
這個(gè)設(shè)計(jì)的設(shè)想是:首先,博物館內(nèi)安裝的所有的Beacon基站都在APP能夠探測到的范圍內(nèi),而且APP能夠默默地在后臺(tái)運(yùn)行并探測附近的Beacon,但只有當(dāng)游客與Beacon基站的距離靠近至2米范圍內(nèi)時(shí)才會(huì)跳出彈窗,提示與這一Beacon相關(guān)的展品信息;其次,針對同一展品,APP不會(huì)不識(shí)趣地反復(fù)跳出提示窗;最后,還能夠查閱APP系統(tǒng)日志底層Beacon相關(guān)事件。下面請看實(shí)地操作!
如果你也是第一次創(chuàng)建Beacon應(yīng)用APP,看這里!
綁定服務(wù),設(shè)定“區(qū)域”
對于首次建立應(yīng)用程序類別的開發(fā)者,以下幾點(diǎn)需要注意:首先,用AltBeacon API BeaconManager將APP與后臺(tái)運(yùn)行的AltBeacon庫中的服務(wù)綁定。另外,要著手設(shè)定一個(gè)或多個(gè)“區(qū)域”。這里所說的“區(qū)域”是指一個(gè)或一組Beacon,由AltBeacon Beacon ID 域值來規(guī)定。Beacon ID域?qū)?0個(gè)八位字節(jié)的標(biāo)識(shí)域分成1個(gè)16字節(jié)的主ID、1個(gè)2字節(jié)的二級(jí)ID、1個(gè)2字節(jié)的三級(jí)ID。在我的這個(gè)APP中,主Beacon是我所關(guān)注的,因此只設(shè)定了主ID,因此我將二級(jí)和三級(jí)ID設(shè)為空值。
圖1 – 基本初始化步驟
更多干貨往下看!
APP程序類別
針對不同的顯示界面(包括主要展品信息界面、Beacon事件日志界面)的活動(dòng)類別、以及其他一些輔助性的Java類別,這個(gè)APP包括一個(gè)自定義應(yīng)用程序類和一個(gè)Actiivity類別。AltBeacon API自身就是一個(gè)庫,它負(fù)責(zé)APP后臺(tái)運(yùn)行彈出,并提供一系列接口來支持與Beacon探測相關(guān)的回調(diào)函數(shù)。這些都通過自定義應(yīng)用程序類“GyboApplication.java”執(zhí)行。
圖2 – AltBeacon API 關(guān)鍵接口
測定距離,更新范圍
AltBeacon API支持“監(jiān)測”與“測距”功能。監(jiān)測功能會(huì)在APP進(jìn)入某一個(gè)或某一組Beacon區(qū)域時(shí)生成事件。這其實(shí)是一個(gè)二進(jìn)制的概念,因?yàn)橹挥袃煞N可能——APP在區(qū)域內(nèi)、APP不在區(qū)域內(nèi)。測距功能可以追蹤游客距離某一組Beacon的距離,當(dāng)兩者近到一定程度時(shí),就可以觸發(fā)功能。
我們還必須對應(yīng)用程序類別執(zhí)行的RangeNotifier接口中的單實(shí)例對象方法“didRangeBeaconsInRegion(Collection beacons, Region region)”進(jìn)行編碼。AltBeacon庫的后臺(tái)藍(lán)牙掃描進(jìn)程能夠發(fā)現(xiàn)附近的Beacon,而“didRangeBeaconsInRegion”每秒鐘調(diào)用一次,并提供當(dāng)次掃描到的Beacon列表。APP絕大多數(shù)功能都在此基礎(chǔ)上實(shí)現(xiàn)。
Beacon分類則代表物理意義上的Beacon, 它有著一系列屬性,包括:Beacon類型標(biāo)示、藍(lán)牙MAC地址和名稱、接收信號(hào)強(qiáng)度指示器RSSI(Received Signal Strength Indicator)、(制造過程中設(shè)定的)校準(zhǔn)傳輸?shù)腂eacon發(fā)射功率、與Beacon相對距離的估算值(以米為單位計(jì)量、通過RSSI和Beacon發(fā)射功率計(jì)算得出)。
定義最近的Beacon,判斷信息推送時(shí)間
有了Beacon列表以及每個(gè)Beacon與游客的距離估算值,要推算出哪個(gè)Beacon離游客最近應(yīng)該是不成問題的。但是在測試過程中也有一些問題。有的Beacon明知道就在范圍內(nèi),卻沒有出現(xiàn)在didRangeBeaconsInRegion方法獲取的Beacon列表中,到底哪里出了問題?經(jīng)分析,原因可能是Beacon廣播頻率與安卓APP掃描的頻率和持續(xù)時(shí)間不匹配,導(dǎo)致有時(shí)掃描過程無法接收到實(shí)際范圍內(nèi)所有Beacon的廣告數(shù)據(jù)包。這就引出了另一個(gè)問題:如何控制安卓APP里的這些參數(shù)?
當(dāng)APP收到范圍更新時(shí),就要判斷是否需要執(zhí)行相應(yīng)的功能。具體來說,就是看哪個(gè)Beacon離游客最近、有沒有近到需要向游客提示Beacon所對應(yīng)的展品信息。如果最近的Beacon發(fā)生了變化,游客會(huì)收到提示信息。例如,游客離開剛剛駐足的展品,下一次范圍更新之后,離他最近的Beacon可能就不是之前那一個(gè)(組)了。當(dāng)然,還要判斷距離最近的Beacon是近到什么程度,才能向游客發(fā)送通知信息。實(shí)驗(yàn)中的APP把這一數(shù)值設(shè)定為2米。當(dāng)然你也可以允許用戶手動(dòng)設(shè)置、自定義這一類配置。
掃描配置又是什么?
BeaconManager類允許開發(fā)者對APP進(jìn)行廣告數(shù)據(jù)包掃描時(shí)長、活動(dòng)間歇時(shí)長等參數(shù)進(jìn)行配置??梢栽诔跏即a中添加如下的代碼。
圖4 – 掃描配置
想要做好適合APP的掃描配置,需要考慮很多方面。掃描過程的電量消耗是很大的,因此掃描頻次過高或時(shí)長過長就會(huì)增加電池電量的消耗。但如果掃描頻次跟不上,Beacon探測結(jié)果的更新就會(huì)延遲,進(jìn)而影響用戶體驗(yàn)。
因此,根據(jù)實(shí)際應(yīng)用場景的需要,我們必須在耗電水平和用戶體驗(yàn)之間進(jìn)行權(quán)衡取舍。例如,一個(gè)用來探測路途中經(jīng)過的店鋪的APP,就需要比博物館導(dǎo)覽APP擁有更快的Beacon廣告探測和反應(yīng)速度。
還需要考慮Beacon的廣播頻率。如果掃描頻率高于Beacon廣告,有時(shí)就會(huì)由于最近一次掃描活動(dòng)中的廣播數(shù)據(jù)包丟失而導(dǎo)致實(shí)際范圍內(nèi)的Beacon沒有出現(xiàn)在API回調(diào)的報(bào)告中。
現(xiàn)實(shí)世界中的Beacon探測
不得不承認(rèn),現(xiàn)實(shí)世界總是不完美的。為了讓APP能夠更好的為人民服務(wù),程序猿編寫代碼時(shí)也不得不考慮現(xiàn)實(shí)中的問題種種。在測試過程中,盡管我們很認(rèn)真地設(shè)置了掃描配置,Beacon掃描偶爾還是會(huì)有漏網(wǎng)之魚?,F(xiàn)實(shí)中,由于游客和Beacon之間的物理屏障(如人群、其他物品等)、或Beacon配置與之前設(shè)想的不同,也會(huì)出現(xiàn)一些紕漏。物理屏障的存在會(huì)導(dǎo)致游客在展廳內(nèi)行走時(shí),APP數(shù)據(jù)回報(bào)出現(xiàn)短暫的異常。因此,Beacon應(yīng)用不應(yīng)當(dāng)僅根據(jù)最近一次的數(shù)據(jù)回報(bào)就立刻作出回應(yīng)。認(rèn)識(shí)到這一點(diǎn)讓我們收獲頗多:與其中規(guī)中矩地根據(jù)AltBeacon庫回調(diào)的數(shù)據(jù)行事,不如對算法進(jìn)行適度的“模糊”處理,也許能改善Beacon APP的表現(xiàn)。為了改善算法,我們決定采用更復(fù)雜一些的方法來追蹤范圍內(nèi)的Beacon。
模糊的Beacon追蹤
我們的方法簡單而有效——保留了最近15秒的報(bào)告中提示位于范圍內(nèi)的Beacon的相關(guān)數(shù)據(jù)緩存,以及每個(gè)Beacon最近一次被探測到的精確時(shí)間。通過計(jì)時(shí)器任務(wù),把最近15秒內(nèi)沒有被探測到的Beacon視為“過期”、移除緩存。
在可以稱得上“重中之重”的didRangeBeaconsInRegion方法中,我們更新了Beacon數(shù)據(jù)緩存和回調(diào)的Beacon對象列表,然后評(píng)估全部的緩存數(shù)據(jù),以判定目前距離最近的Beacon。于是測試的結(jié)果有了改善。這類似于數(shù)據(jù)平滑處理,相關(guān)代碼片段如下圖。
圖5 – GyboApplication.java中的Beacon緩存設(shè)置和使用
圖6 –BeaconEvent類別
圖7 –負(fù)責(zé)終止BeaconEvent對象的計(jì)時(shí)器任務(wù)
最后的最后,提醒用戶!
一旦實(shí)際執(zhí)行了獲取范圍內(nèi)Beacon報(bào)告的代碼、采取了某種方式追蹤Beacon、并根據(jù)獲得的數(shù)據(jù)判斷哪一個(gè)Beacon離游客最近,那么就只剩最后一步了:在合適的情況下提示游客Beacon所關(guān)聯(lián)的展品信息。怎樣判斷是否“合適”呢?主要看最后一次生成的通知是否為同一Beacon相關(guān)的,因?yàn)闆]有必要反復(fù)提示用戶同一個(gè)展品的信息。還需要將估算的Beacon距離與既設(shè)的(觸發(fā)行為的)最小距離值進(jìn)行對比,判斷游客是否足夠靠近Beacon(也就是展品),然后決定是否發(fā)送展品信息。
如果APP是在前臺(tái)運(yùn)行,提示游客的方法就很簡單:更新主要展覽信息頁面、顯示最近的展品介紹。我們使用內(nèi)存中有關(guān)Beacon及其對應(yīng)展品的數(shù)據(jù)結(jié)構(gòu),每個(gè)Beacon都有自己的ID,就可以分別對應(yīng)各自的展品信息,并在APP本地映射了這些數(shù)據(jù)的對應(yīng)關(guān)系,但正如第一篇中所講到的,對于除了原型以外的任何APP,最好從遠(yuǎn)程服務(wù)器上獲取相關(guān)數(shù)據(jù),根據(jù)位置或其他信息配置Beacon。
圖8 –Beacon Information類別
圖9 –ThingOfInterest類別
通知列表下拉菜單中的通知,并將其鏈接到定義展品信息頁面的Activity。
圖10 – 安卓系統(tǒng)通知,提示附近發(fā)現(xiàn)Beacon
下圖是安卓通知的代碼。
圖11 – 創(chuàng)建通知
量身定做自己的專屬Beacon
前面已經(jīng)介紹了Beacon應(yīng)用開發(fā)的概念和AltBeacon廣播形式,并詳細(xì)講解了如何利用AltBeacon安卓API開發(fā)博物館導(dǎo)覽APP原型。下面將向大家介紹如何測試這一博物館導(dǎo)覽APP。
選擇藍(lán)牙開發(fā)板,啟動(dòng)你的專屬Beacon!
我們暫時(shí)還沒有現(xiàn)成采用AltBeacon形式的Beacon,但手上有不少藍(lán)牙開發(fā)板。藍(lán)牙開發(fā)板是具有智能藍(lán)牙功能的微控制器(MCU),其內(nèi)部一般都內(nèi)置了藍(lán)牙協(xié)議棧。由于開發(fā)板一般都具有豐富的外設(shè)接口和引線,因此開發(fā)板通常用來搭建產(chǎn)品的原型可以將編譯生成的固件直接燒入到開發(fā)板當(dāng)中,甚至可以直接做成產(chǎn)品功能展示,或是單純用于試驗(yàn)或?qū)W習(xí)。我決定用自己手上既有的幾塊開發(fā)板來創(chuàng)建Beacon應(yīng)用,然后測試一下安卓博物館導(dǎo)覽APP。
我使用的是Bluegiga DKBluetooth Low Energy開發(fā)套件和英特爾Edison開發(fā)板。Bluegiga開發(fā)板的編程采用BGScript腳本語言。英特爾Edison運(yùn)行的是則Linux,編程語言有多項(xiàng)選擇。我習(xí)慣用由JavaScript框架驅(qū)動(dòng)的Node.js,這樣能找到適用的智能藍(lán)牙的功能包或是庫文件。
Bluegiga變身AltBeacon
Bluegiga的BGScript腳本語言簡單易懂,且配有Bluegiga框架所提供的豐富的功能庫。用BGScript創(chuàng)建Bluegiga應(yīng)用涉及用文本編輯器創(chuàng)建腳本文件和其他項(xiàng)目配置文件。通過Bluegiga SDK中的軟件更新工具,就可以直接通過USB將編譯生成的固件燒入到開發(fā)板上。
腳本包括變量和數(shù)組聲明、事件處理器回調(diào)函數(shù)?;卣{(diào)是編程模型的重要部分,調(diào)用標(biāo)準(zhǔn)Bluegiga功能函數(shù)會(huì)促發(fā)相關(guān)的回調(diào)函數(shù)。同樣,框架也可以調(diào)用事件處理器,以回應(yīng)腳本之外的情況。
在任何平臺(tái)上實(shí)現(xiàn)Beacon都涉及與通用訪問配置文件(Generic Access Profile, GAP)協(xié)作,要求設(shè)置廣播數(shù)據(jù)包內(nèi)容、配置廣播參數(shù)。
Bluegiga AltBeacon實(shí)施的要素如下圖:
先從變量聲明開始。
圖11 – 數(shù)組聲明
廣播的設(shè)置可以在Bluegiga標(biāo)準(zhǔn)事件處理器“system_boot”中完成,開發(fā)板接通電源或重置之后,系統(tǒng)會(huì)調(diào)用“system_boot”。我先設(shè)置了包含F(xiàn)lags字段數(shù)組,F(xiàn)lags字段包括許多位,從每一位都能看出Bluetooth Smart和/或Bluetooth BR/EDR的支持方式。
廣播數(shù)據(jù)包中可能包含的字段稱為廣播數(shù)據(jù)類型(ADV data types),藍(lán)牙核心規(guī)格附錄的A部分(數(shù)據(jù)類型規(guī)格)對其有明確定義。廣播數(shù)據(jù)類型的標(biāo)準(zhǔn)結(jié)構(gòu),包括一個(gè)單一字節(jié)長度字段 (它的值不包括長度字段本身占有的字節(jié))、一個(gè)單一字節(jié)數(shù)據(jù)類型字段。GAP編號(hào)文檔中定義了數(shù)據(jù)類型值。
下面是初始過程的首部分代碼:
圖12 –在system_boot事件處理器中定義flags廣播類型
在本系列文章的第一篇中,我介紹了AltBeacon形式并解釋了GAP 制造商特定數(shù)據(jù)廣播字段中編碼的數(shù)據(jù)。我在同一數(shù)組內(nèi)的后20字節(jié)中填入了這些數(shù)據(jù)。
圖13 – 定義制造商特定數(shù)據(jù)字段中的AltBeacon數(shù)據(jù)
然后為Beacon設(shè)備設(shè)置名稱,這一名稱今后可以顯示在Central設(shè)備(主要是智能手機(jī))返回的掃描結(jié)果中。它的值是另一個(gè)廣播類型,因此我將它設(shè)立在它自己的數(shù)據(jù)里。可以看到,指定的本地名稱就是AltBeacon。
圖14 – 建立用于掃描響應(yīng)的本地名稱
配置廣播參數(shù)包括調(diào)用Bluegiga的一些功能、數(shù)組。
圖15 – 配置GAP 廣播
這樣,我的Bluegiga定制AltBeacon準(zhǔn)備就緒。
圖16 –藍(lán)兆科技DKBLE上的AltBeacon
另一種選擇:英特爾Edison上的AltBeacon
Node.js是模塊化設(shè)計(jì),有多種用途的模塊供選用。對于Node.js來說,模塊與庫類似。“Bleno”模塊能夠?yàn)閾?dān)任藍(lán)牙GAP外設(shè)的應(yīng)用提供諸多功能,如GATT配置文件的定義和實(shí)施。它是開源的,由Sandeep Mistry創(chuàng)建。SandeepMistry還創(chuàng)建了Noble模塊,可以用來創(chuàng)建GAP中央模式設(shè)備的相關(guān)軟件。Bleno和Noble都位于github上。
Bleno的標(biāo)準(zhǔn)分布不支持AltBeacon形式,但卻支持iBeacon。因此,我復(fù)制了Noble github 倉庫并改寫了Bleno,這樣就可以生成AltBeacon形式的GAP廣播了。下面就跟大家介紹一下是怎么改寫的。
我在標(biāo)準(zhǔn)的bleno.js源文件上添加了新功能,然后就可以根據(jù)node.js應(yīng)用的一系列既設(shè)參數(shù)啟動(dòng)廣播了。新功能代碼就長以下這個(gè)樣子:
圖17 –bleno/lib/bleno.js中的新功能
這一代碼基本上就是將必須的AltBeacon數(shù)據(jù)填充到緩沖區(qū),然后調(diào)用添加至Linuxbindings.js源文件中其他功能。Bleno可以與Linux上的BlueZ藍(lán)牙協(xié)議棧協(xié)作,當(dāng)在基于Linux的平臺(tái)上執(zhí)行功能時(shí),Bleno所引出的用于多種應(yīng)用的功能最終被映射到針對BlueZ功能的調(diào)用。我只好對Bleno中Linux相關(guān)的部分作一些修改,這樣才能支持AltBeacon。
圖18 –bleno/lib/linux/bindings.js中的新功能
圖19 –bleno/lib/linux/hci-ble.js中的新功能
這些功能所作的就是準(zhǔn)備一個(gè)和Bluegiga開發(fā)板類似、包含所有必需廣播數(shù)據(jù)的緩沖區(qū),然后將其傳遞至、并通過Bleno API層,最終到達(dá)BlueZ的主機(jī)控制接口(Host Controller Interface,HCI)。
AltBeacon Node.js 應(yīng)用
Bleno經(jīng)修正之后就可以支持AltBeacon了, 剩下的就是使用新的bleno模塊來創(chuàng)建node.js應(yīng)用,然后使用AltBeacon形式開始廣播。整個(gè)應(yīng)用就是下圖中的7行代碼。
圖20 –AltBeacon node.js 應(yīng)用
為運(yùn)行AltBeacon APP,我使用Putty通過SSH或是telnet建立了與英特爾Edison的終端會(huì)話,然后運(yùn)行命令行里的node app.js。
圖21 – Putty建立終端對話
特別推薦
- 隨時(shí)隨地享受大屏幕游戲:讓便攜式 4K 超高清 240Hz 游戲投影儀成為現(xiàn)實(shí)
- 在發(fā)送信號(hào)鏈設(shè)計(jì)中使用差分轉(zhuǎn)單端射頻放大器的優(yōu)勢
- 第9講:SiC的加工工藝(1)離子注入
- 移遠(yuǎn)通信再推兩款新型4G、Wi-Fi、GNSS三合一組合天線
- Bourns 推出全新雙繞組系列,擴(kuò)展屏蔽功率電感產(chǎn)品組合
- 貿(mào)澤開售AMD Versal AI Edge VEK280評(píng)估套件
- 安森美Hyperlux圖像傳感器將用于斯巴魯新一代集成AI的EyeSight系統(tǒng)
技術(shù)文章更多>>
- 高信噪比MEMS麥克風(fēng)驅(qū)動(dòng)人工智能交互
- AMTS & AHTE South China 2024圓滿落幕 持續(xù)發(fā)力探求創(chuàng)新,攜手并進(jìn)再踏新征程!
- 提高下一代DRAM器件的寄生電容性能
- 意法半導(dǎo)體Web工具配合智能傳感器加快AIoT項(xiàng)目落地
- 韌性與創(chuàng)新并存,2024 IIC創(chuàng)實(shí)技術(shù)再獲獎(jiǎng)分享供應(yīng)鏈挑戰(zhàn)下的自我成長
技術(shù)白皮書下載更多>>
- 車規(guī)與基于V2X的車輛協(xié)同主動(dòng)避撞技術(shù)展望
- 數(shù)字隔離助力新能源汽車安全隔離的新挑戰(zhàn)
- 汽車模塊拋負(fù)載的解決方案
- 車用連接器的安全創(chuàng)新應(yīng)用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索