基于 Bluetooth 技術(shù)的Beacon,最簡單的理解就是一個小型的信息基站,可以應(yīng)用在室內(nèi)導(dǎo)航、移動支付、店內(nèi)導(dǎo)購、人流分析、物品跟蹤等等所有與人在室內(nèi)流動相關(guān)的活動之中。Beacon技術(shù)做到的是通過Bluetooth Smart向通信覆蓋范圍內(nèi)的移動設(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á)到六千萬臺,市場規(guī)模之大,可見一斑。
從概念到開發(fā),基于藍(lán)牙的Beacon技術(shù)純干貨!
發(fā)布時間:2015-12-08 來源:EDN電子技術(shù)設(shè)計 責(zé)任編輯:wenwei
【導(dǎo)讀】隨著時代的發(fā)展,現(xiàn)代人對移動設(shè)備越來越依賴,也有越來越多的活動在室內(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,最簡單的理解就是一個小型的信息基站,可以應(yīng)用在室內(nèi)導(dǎo)航、移動支付、店內(nèi)導(dǎo)購、人流分析、物品跟蹤等等所有與人在室內(nèi)流動相關(guān)的活動之中。Beacon技術(shù)做到的是通過Bluetooth Smart向通信覆蓋范圍內(nèi)的移動設(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á)到六千萬臺,市場規(guī)模之大,可見一斑。
多數(shù)情況下,通過Beacon可以進(jìn)行室內(nèi)定位并提供相應(yīng)的服務(wù),如在百貨商場及時推送品牌促銷信息、在機(jī)場為旅客定位登機(jī)口和餐飲設(shè)施的位置、或在博物館向游客推送身旁的文物信息等。在這些應(yīng)用場景中,Beacon的位置是固定的,用戶通過智能手機(jī)APP可以獲取這些位置信息。但最近也有一些移動的Beacon應(yīng)用出現(xiàn)。例如Lighthouse公司推出的一款可穿戴式的Beacon解決方案,對需要特殊幫助的學(xué)生進(jìn)行位置追蹤并保障他們的安全。在中國,每到春運(yùn)或旅游旺季,總有老人或兒童在擁擠的人流中走散,而未來這種基于移動和可穿戴式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會更合適,這樣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)程操作。本地數(shù)據(jù)存儲的好處在于它便于訪問,而且沒有網(wǎng)絡(luò)也照樣能夠運(yùn)行。而遠(yuǎn)程數(shù)據(jù)存儲的情況下,用戶使用的數(shù)據(jù)是相同的,但網(wǎng)絡(luò)訪問難免更耗時,因此要加倍注意確保用戶體驗(yàn)不受影響。有時最佳的解決方案是采用“混搭”的方式,即將本地數(shù)據(jù)及時進(jìn)行遠(yuǎn)程同步、并存儲在APP的本地數(shù)據(jù)庫中。這樣,在沒有網(wǎng)絡(luò)的情況下,APP也能夠使用最新的數(shù)據(jù)了。
APP后臺自動運(yùn)行,無需用戶干預(yù)
對于用戶來說,最好無需特意開啟APP就能夠探測到附近的Beacon。也就是說APP最好能夠自動在后臺運(yùn)行,而不需要用戶干預(yù)。這就需要開發(fā)時注意系統(tǒng)資源(如電源電量)的合理使用。當(dāng)然,前提是要確保您的智能手機(jī)開啟了藍(lán)牙功能。
相對距離視情況而定
到底多近才算近,這是所有Beacon應(yīng)用開發(fā)者需要考慮的問題。實(shí)際上,這需要根據(jù)實(shí)際情況決定。對一些應(yīng)用來說,只要有一兩個Beacon (多個Beacon即可定義”區(qū)域“) 的信號,就可以觸發(fā)動作了,例如針對走進(jìn)商場或店鋪的顧客、機(jī)場里走近值機(jī)柜臺的旅客等。而對于其他一些應(yīng)用,可能需要用戶十分靠近特定的Beacon時,才會提示用戶。比如占地較小、陳列物密集的博物館或美術(shù)館的導(dǎo)覽系統(tǒng),就需要在參觀者十分靠近特定的展品時才會提示相應(yīng)的展品信息。
通過Beacon可以推算用戶的相對距離。因?yàn)閺V告數(shù)據(jù)包中包含了距離與信號強(qiáng)度的對照數(shù)據(jù)(比如距離為一米時,信號強(qiáng)度是多少多少),所以我們就可以通過接收器(比如手機(jī))測量到的信號強(qiáng)度推算出相對應(yīng)的距離。如果你使用了API(Application Programming Interface, 應(yīng)用程序編程接口),就會發(fā)現(xiàn)API其實(shí)能夠很方便地實(shí)現(xiàn)距離測算。但是,必須指出距離是推算的、而非精確計算的結(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)用于任何平臺而不受限制。它最近還發(fā)布了面向安卓系統(tǒng)的開源API。
如何開啟運(yùn)用
零售商與市場營銷領(lǐng)域是Beacon的大舞臺,可以為通路營銷與更佳的消費(fèi)者體驗(yàn)提供無限的想象空間??梢灶A(yù)見,Beacon的運(yùn)用將會有光明的前景:通過Beacon將產(chǎn)品和促銷信息發(fā)送給顧客;博物館和美術(shù)館等也可以開發(fā)專門的應(yīng)用,向走進(jìn)展廳的參觀者發(fā)送展廳主題介紹、或?qū)υ谡蛊非榜v足的參觀者發(fā)送詳細(xì)的展品信息等;機(jī)場還可以用Beacon追蹤所有旅客的動向。對于有開發(fā)Beacon應(yīng)用想法的讀者,可以注冊下載最新的開發(fā)工具Bluetooth Developer Studio,開啟自己的Beacon開發(fā)之旅。
手把手教你如何開發(fā)AltBeacon安卓APP
前面已經(jīng)介紹了Beacon的一些基礎(chǔ)知識,以及AltBeacon和它的藍(lán)牙廣告形式。下面將用一個實(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)游客靠近展品時,APP可以提示該展品的相關(guān)信息,走過路過就再也不會錯過!想象一下,如果故宮有了這款A(yù)PP, 當(dāng)游客走到一個不明覺厲的青銅方樽面前,只要拿起手機(jī)就能快速了解它的主人、出土信息和花紋的寓意,再也不用擔(dān)心被人嘲笑沒文化了。
這個設(shè)計的設(shè)想是:首先,博物館內(nèi)安裝的所有的Beacon基站都在APP能夠探測到的范圍內(nèi),而且APP能夠默默地在后臺運(yùn)行并探測附近的Beacon,但只有當(dāng)游客與Beacon基站的距離靠近至2米范圍內(nèi)時才會跳出彈窗,提示與這一Beacon相關(guān)的展品信息;其次,針對同一展品,APP不會不識趣地反復(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與后臺運(yùn)行的AltBeacon庫中的服務(wù)綁定。另外,要著手設(shè)定一個或多個“區(qū)域”。這里所說的“區(qū)域”是指一個或一組Beacon,由AltBeacon Beacon ID 域值來規(guī)定。Beacon ID域?qū)?0個八位字節(jié)的標(biāo)識域分成1個16字節(jié)的主ID、1個2字節(jié)的二級ID、1個2字節(jié)的三級ID。在我的這個APP中,主Beacon是我所關(guān)注的,因此只設(shè)定了主ID,因此我將二級和三級ID設(shè)為空值。
圖1 – 基本初始化步驟
更多干貨往下看!
APP程序類別
針對不同的顯示界面(包括主要展品信息界面、Beacon事件日志界面)的活動類別、以及其他一些輔助性的Java類別,這個APP包括一個自定義應(yīng)用程序類和一個Actiivity類別。AltBeacon API自身就是一個庫,它負(fù)責(zé)APP后臺運(yùn)行彈出,并提供一系列接口來支持與Beacon探測相關(guān)的回調(diào)函數(shù)。這些都通過自定義應(yīng)用程序類“GyboApplication.java”執(zhí)行。
圖2 – AltBeacon API 關(guān)鍵接口
測定距離,更新范圍
AltBeacon API支持“監(jiān)測”與“測距”功能。監(jiān)測功能會在APP進(jìn)入某一個或某一組Beacon區(qū)域時生成事件。這其實(shí)是一個二進(jìn)制的概念,因?yàn)橹挥袃煞N可能——APP在區(qū)域內(nèi)、APP不在區(qū)域內(nèi)。測距功能可以追蹤游客距離某一組Beacon的距離,當(dāng)兩者近到一定程度時,就可以觸發(fā)功能。
我們還必須對應(yīng)用程序類別執(zhí)行的RangeNotifier接口中的單實(shí)例對象方法“didRangeBeaconsInRegion(Collection beacons, Region region)”進(jìn)行編碼。AltBeacon庫的后臺藍(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地址和名稱、接收信號強(qiáng)度指示器RSSI(Received Signal Strength Indicator)、(制造過程中設(shè)定的)校準(zhǔn)傳輸?shù)腂eacon發(fā)射功率、與Beacon相對距離的估算值(以米為單位計量、通過RSSI和Beacon發(fā)射功率計算得出)。
定義最近的Beacon,判斷信息推送時間
有了Beacon列表以及每個Beacon與游客的距離估算值,要推算出哪個Beacon離游客最近應(yīng)該是不成問題的。但是在測試過程中也有一些問題。有的Beacon明知道就在范圍內(nèi),卻沒有出現(xiàn)在didRangeBeaconsInRegion方法獲取的Beacon列表中,到底哪里出了問題?經(jīng)分析,原因可能是Beacon廣播頻率與安卓APP掃描的頻率和持續(xù)時間不匹配,導(dǎo)致有時掃描過程無法接收到實(shí)際范圍內(nèi)所有Beacon的廣告數(shù)據(jù)包。這就引出了另一個問題:如何控制安卓APP里的這些參數(shù)?
當(dāng)APP收到范圍更新時,就要判斷是否需要執(zhí)行相應(yīng)的功能。具體來說,就是看哪個Beacon離游客最近、有沒有近到需要向游客提示Beacon所對應(yīng)的展品信息。如果最近的Beacon發(fā)生了變化,游客會收到提示信息。例如,游客離開剛剛駐足的展品,下一次范圍更新之后,離他最近的Beacon可能就不是之前那一個(組)了。當(dāng)然,還要判斷距離最近的Beacon是近到什么程度,才能向游客發(fā)送通知信息。實(shí)驗(yàn)中的APP把這一數(shù)值設(shè)定為2米。當(dāng)然你也可以允許用戶手動設(shè)置、自定義這一類配置。
掃描配置又是什么?
BeaconManager類允許開發(fā)者對APP進(jìn)行廣告數(shù)據(jù)包掃描時長、活動間歇時長等參數(shù)進(jìn)行配置。可以在初始代碼中添加如下的代碼。
圖4 – 掃描配置
想要做好適合APP的掃描配置,需要考慮很多方面。掃描過程的電量消耗是很大的,因此掃描頻次過高或時長過長就會增加電池電量的消耗。但如果掃描頻次跟不上,Beacon探測結(jié)果的更新就會延遲,進(jìn)而影響用戶體驗(yàn)。
因此,根據(jù)實(shí)際應(yīng)用場景的需要,我們必須在耗電水平和用戶體驗(yàn)之間進(jìn)行權(quán)衡取舍。例如,一個用來探測路途中經(jīng)過的店鋪的APP,就需要比博物館導(dǎo)覽APP擁有更快的Beacon廣告探測和反應(yīng)速度。
還需要考慮Beacon的廣播頻率。如果掃描頻率高于Beacon廣告,有時就會由于最近一次掃描活動中的廣播數(shù)據(jù)包丟失而導(dǎo)致實(shí)際范圍內(nèi)的Beacon沒有出現(xiàn)在API回調(diào)的報告中。
現(xiàn)實(shí)世界中的Beacon探測
不得不承認(rèn),現(xiàn)實(shí)世界總是不完美的。為了讓APP能夠更好的為人民服務(wù),程序猿編寫代碼時也不得不考慮現(xiàn)實(shí)中的問題種種。在測試過程中,盡管我們很認(rèn)真地設(shè)置了掃描配置,Beacon掃描偶爾還是會有漏網(wǎng)之魚?,F(xiàn)實(shí)中,由于游客和Beacon之間的物理屏障(如人群、其他物品等)、或Beacon配置與之前設(shè)想的不同,也會出現(xiàn)一些紕漏。物理屏障的存在會導(dǎo)致游客在展廳內(nèi)行走時,APP數(shù)據(jù)回報出現(xiàn)短暫的異常。因此,Beacon應(yīng)用不應(yīng)當(dāng)僅根據(jù)最近一次的數(shù)據(jù)回報就立刻作出回應(yīng)。認(rèn)識到這一點(diǎn)讓我們收獲頗多:與其中規(guī)中矩地根據(jù)AltBeacon庫回調(diào)的數(shù)據(jù)行事,不如對算法進(jìn)行適度的“模糊”處理,也許能改善Beacon APP的表現(xiàn)。為了改善算法,我們決定采用更復(fù)雜一些的方法來追蹤范圍內(nèi)的Beacon。
模糊的Beacon追蹤
我們的方法簡單而有效——保留了最近15秒的報告中提示位于范圍內(nèi)的Beacon的相關(guān)數(shù)據(jù)緩存,以及每個Beacon最近一次被探測到的精確時間。通過計時器任務(wù),把最近15秒內(nèi)沒有被探測到的Beacon視為“過期”、移除緩存。
在可以稱得上“重中之重”的didRangeBeaconsInRegion方法中,我們更新了Beacon數(shù)據(jù)緩存和回調(diào)的Beacon對象列表,然后評估全部的緩存數(shù)據(jù),以判定目前距離最近的Beacon。于是測試的結(jié)果有了改善。這類似于數(shù)據(jù)平滑處理,相關(guān)代碼片段如下圖。
圖5 – GyboApplication.java中的Beacon緩存設(shè)置和使用
圖6 –BeaconEvent類別
圖7 –負(fù)責(zé)終止BeaconEvent對象的計時器任務(wù)
最后的最后,提醒用戶!
一旦實(shí)際執(zhí)行了獲取范圍內(nèi)Beacon報告的代碼、采取了某種方式追蹤Beacon、并根據(jù)獲得的數(shù)據(jù)判斷哪一個Beacon離游客最近,那么就只剩最后一步了:在合適的情況下提示游客Beacon所關(guān)聯(lián)的展品信息。怎樣判斷是否“合適”呢?主要看最后一次生成的通知是否為同一Beacon相關(guān)的,因?yàn)闆]有必要反復(fù)提示用戶同一個展品的信息。還需要將估算的Beacon距離與既設(shè)的(觸發(fā)行為的)最小距離值進(jìn)行對比,判斷游客是否足夠靠近Beacon(也就是展品),然后決定是否發(fā)送展品信息。
如果APP是在前臺運(yùn)行,提示游客的方法就很簡單:更新主要展覽信息頁面、顯示最近的展品介紹。我們使用內(nèi)存中有關(guān)Beacon及其對應(yīng)展品的數(shù)據(jù)結(jié)構(gòu),每個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ā)板,啟動你的專屬Beacon!
我們暫時還沒有現(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ū)動的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ù)會促發(fā)相關(guān)的回調(diào)函數(shù)。同樣,框架也可以調(diào)用事件處理器,以回應(yīng)腳本之外的情況。
在任何平臺上實(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)會調(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),包括一個單一字節(jié)長度字段 (它的值不包括長度字段本身占有的字節(jié))、一個單一字節(jié)數(shù)據(jù)類型字段。GAP編號文檔中定義了數(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é)果中。它的值是另一個廣播類型,因此我將它設(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è)計,有多種用途的模塊供選用。對于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ù)啟動廣播了。新功能代碼就長以下這個樣子:
圖17 –bleno/lib/bleno.js中的新功能
這一代碼基本上就是將必須的AltBeacon數(shù)據(jù)填充到緩沖區(qū),然后調(diào)用添加至Linuxbindings.js源文件中其他功能。Bleno可以與Linux上的BlueZ藍(lán)牙協(xié)議棧協(xié)作,當(dāng)在基于Linux的平臺上執(zhí)行功能時,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)備一個和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形式開始廣播。整個應(yīng)用就是下圖中的7行代碼。
圖20 –AltBeacon node.js 應(yīng)用
為運(yùn)行AltBeacon APP,我使用Putty通過SSH或是telnet建立了與英特爾Edison的終端會話,然后運(yùn)行命令行里的node app.js。
圖21 – Putty建立終端對話
特別推薦
- AMTS 2025展位預(yù)訂正式開啟——體驗(yàn)科技驅(qū)動的未來汽車世界,共迎AMTS 20周年!
- 貿(mào)澤電子攜手安森美和Würth Elektronik推出新一代太陽能和儲能解決方案
- 功率器件熱設(shè)計基礎(chǔ)(六)——瞬態(tài)熱測量
- 貿(mào)澤開售Nordic Semiconductor nRF9151-DK開發(fā)套件
- TDK推出用于可穿戴設(shè)備的薄膜功率電感器
- 日清紡微電子GNSS兩款新的射頻低噪聲放大器 (LNA) 進(jìn)入量產(chǎn)
- 中微半導(dǎo)推出高性價比觸控 MCU-CMS79FT72xB系列
技術(shù)文章更多>>
- 意法半導(dǎo)體推出首款超低功耗生物傳感器,成為眾多新型應(yīng)用的核心所在
- 是否存在有關(guān) PCB 走線電感的經(jīng)驗(yàn)法則?
- 智能電池傳感器的兩大關(guān)鍵部件: 車規(guī)級分流器以及匹配的評估板
- 功率器件熱設(shè)計基礎(chǔ)(八)——利用瞬態(tài)熱阻計算二極管浪涌電流
- AHTE 2025展位預(yù)訂正式開啟——促進(jìn)新技術(shù)新理念應(yīng)用,共探多行業(yè)柔性解決方案
技術(shù)白皮書下載更多>>
- 車規(guī)與基于V2X的車輛協(xié)同主動避撞技術(shù)展望
- 數(shù)字隔離助力新能源汽車安全隔離的新挑戰(zhàn)
- 汽車模塊拋負(fù)載的解決方案
- 車用連接器的安全創(chuàng)新應(yīng)用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
單向可控硅
刀開關(guān)
等離子顯示屏
低頻電感
低通濾波器
低音炮電路
滌綸電容
點(diǎn)膠設(shè)備
電池
電池管理系統(tǒng)
電磁蜂鳴器
電磁兼容
電磁爐危害
電動車
電動工具
電動汽車
電感
電工電路
電機(jī)控制
電解電容
電纜連接器
電力電子
電力繼電器
電力線通信
電流保險絲
電流表
電流傳感器
電流互感器
電路保護(hù)
電路圖