Summary:
1、ANT+是Garmin搞的,幾乎也就自行車用,老東西了
2、藍(lán)牙(BLE)就是藍(lán)牙搞的,跟自行車沒PY交易,用的廣
3、這倆都是2.4G信號,視距傳輸,因此設(shè)備和傳感器之間直連線通道內(nèi)最好不要有金屬,碳纖維遮擋
4、這倆協(xié)議數(shù)字信號傳輸,有比較復(fù)雜完善一套驗(yàn)證體系,因此不會串線和收到錯(cuò)誤信息
5、這倆都是分時(shí)占用頻點(diǎn)通信,因此可以同一空間同一頻點(diǎn)有較多設(shè)備共同運(yùn)行而不會掛。但BLE此外還具有跳頻能力,抗干擾性和容納設(shè)備能力和保密性比ANT好得多。
6、出現(xiàn)表頭無法分辨的兩個(gè)同名設(shè)備的概率,藍(lán)牙基本不可能,ANT可能性相對大些。
7、ANT協(xié)議開發(fā)更好上手,但復(fù)雜功能實(shí)現(xiàn)較困難,擴(kuò)展性差,BLE開發(fā)上手難,但更好實(shí)現(xiàn)復(fù)雜功能,擴(kuò)展性好。BLE相比ANT更加完善成熟,因此會是未來的趨勢。
首先簡單介紹下這倆協(xié)議的出身
ANT+:
這個(gè)協(xié)議基本上就沒有車友會陌生了吧,應(yīng)該來講是目前為止運(yùn)動領(lǐng)域內(nèi)最通用最普及的無線傳輸協(xié)議,甩第二名藍(lán)牙BLE好幾條街,基本上稍微高端點(diǎn)的自行車,跑步,游泳,鐵三傳感器,顯示終端都是支持這個(gè)協(xié)議的。那到底是何方神圣搞出了這么套玩意捏?答案就是:Dynastream 。然而..........
嗯,其實(shí)幕后老大就是大名鼎鼎的Garmin~~其實(shí)就是當(dāng)年Garmin想弄點(diǎn)自行車高端的玩玩,看上了ANT,注資了個(gè)公司,對ANT協(xié)議進(jìn)行封裝,搞了一套標(biāo)準(zhǔn)保證所有符合要求的設(shè)備都可以直接通信,相互識別對方,ANT+就出來。然后人家Garmin財(cái)大氣出推啊推,這玩意就成自行車領(lǐng)域的“標(biāo)準(zhǔn)”了。ANT+協(xié)議的目的就是搭建一個(gè)平臺,讓不同廠商的傳感器和顯示終端也能隨意搭配使用。
當(dāng)然,ANT+也不僅是自行車的專利,以下這些設(shè)備都是ANT+所支持的:

基本上常見的運(yùn)動健身和娛樂設(shè)備都有一定的支持。而其最出名的領(lǐng)域估計(jì)還就真是運(yùn)動領(lǐng)域了,再細(xì)致的話直接就是自行車領(lǐng)域。好多ANT相關(guān)的(注意還不是ANT+)的教材直接從頭到尾就是用自行車傳感器做例子講的。
接下來看看藍(lán)牙4.0BLE
藍(lán)牙這個(gè)協(xié)議歷史悠久啦,我小學(xué)時(shí)候就知道有這么個(gè)玩意。手機(jī),電腦,平板就沒不支持的,跟運(yùn)動領(lǐng)域本身是沒有PY交易的啦,這里也不贅述。將其推向大眾視線的應(yīng)該是最近幾年火熱的各種可穿戴智能硬件。而這個(gè)我們通稱的藍(lán)牙也和ANT+一樣,僅是藍(lán)牙協(xié)議的一個(gè)子集,嚴(yán)格來講叫Bluetooth Smart(曾經(jīng)叫BLE,Bluetooth Low Energy),這個(gè)是在4.0版本之后的藍(lán)牙協(xié)議里面才出現(xiàn)的,所以也有人叫其藍(lán)牙4.0。然而藍(lán)牙4.0還有個(gè)BR/EDR(Basic Rate, Enhanced data rate)協(xié)議,這個(gè)主要用于大數(shù)據(jù)量的傳輸目的,比如藍(lán)牙耳機(jī),音響,上網(wǎng),互傳文件,也就是傳統(tǒng)藍(lán)牙的續(xù)集。BR和BLE區(qū)別很大,手機(jī)的如果支持4.0,一般是兩者都支持的,而智能硬件一般都只支持BLE。我們通常對藍(lán)牙功耗高之類的感覺其實(shí)是BR,而BLE本身是專門為小數(shù)據(jù)量低功耗傳感器開發(fā)的,所以其功耗是很低的,和ANT+相當(dāng)。
不過呢,BLE本身也等于ANT這個(gè)集合罷了,還不能保證這里面設(shè)備都能相互通信相互識別對方,在這個(gè)基礎(chǔ)上SIG(Special Interested Group,藍(lán)牙興趣小組,就維護(hù)藍(lán)牙的那個(gè)組織)搞了一套GATT(Genera Attribute Table),這里面定義了非常多常用設(shè)備的數(shù)據(jù)結(jié)構(gòu)和通信相關(guān)的參數(shù),來保證只要支持GATT,不管啥廠商的表頭和傳感器一定能正常通信。
BLE支持的設(shè)備就更多啦:
介紹完了相關(guān)的協(xié)議的背景,接下來我來將這倆協(xié)議技術(shù)基礎(chǔ)刨到底,一步一步從下往上,從技術(shù)角度來詳細(xì)分析其特點(diǎn)。
無線傳輸?shù)降拙褪菬o線電技術(shù),再刨低點(diǎn)就是怎么玩電磁波,那我們就從電磁波開始吧~~~
電磁波咱天天見,最常見的就是無線電波和光啦。電磁波是個(gè)咋回事捏,簡單來講就是變化的電場可以激發(fā)變化的磁場,變化的磁場又可以激發(fā)變化的電場,于是其就能以波的形式輻射開來。因此產(chǎn)生電磁波方式非常簡單,只需要有個(gè)變化的電場就行,比如你拿個(gè)金屬棒(天線)快速來回接電池正負(fù)極,或者對一個(gè)電磁鐵高速反復(fù)通電斷電,就能分別以電場和磁場為初始源頭向外輻射電磁波了。
當(dāng)然這倆實(shí)驗(yàn)不會有啥效果,因?yàn)槟闶炙偬?。不過事實(shí)上無線電波發(fā)射也就是這么個(gè)原理,大體就是利用晶體管來代替你的手罷了。其中前者方式主要用于信號傳輸,而后者方式應(yīng)該是無線充電領(lǐng)域用的比較多。
至于接收呢,電磁波和聲波,水波之類一樣,發(fā)射接收完全就是對稱的。所以你只需要有一根金屬棒,或者另一個(gè)電磁鐵,這個(gè)空間電磁波就會在金屬棒上感應(yīng)出電壓,在電磁鐵線圈內(nèi)感應(yīng)出電壓。這個(gè)電壓波形和空間內(nèi)傳輸?shù)碾姶挪úㄐ问峭耆恢碌模贿^一般幅度很小。嗯電磁波大體介紹到這里,再要詳細(xì)的參看大學(xué)教材《普通物理學(xué)》,或者去問大?!胞溈怂鬼f”老人家吧哈哈。
下面我們來聊聊無線電的基礎(chǔ)技術(shù),調(diào)制解調(diào)。
由于天線接收到的信號是全部電磁波發(fā)射源的疊加,這附近只有一組的話倒無所謂,如果有一堆發(fā)射接收器,那就呵呵啦,好比在一間大會議室里面人聲嘈雜,都聽不到想聽的人說的話。于是乎,聰明的人類,或者說是大?!榜R可尼”吧,發(fā)明了這樣一個(gè)技術(shù),載波的調(diào)制和解調(diào)。
大體原理是啥捏,首先有個(gè)比較穩(wěn)定頻率的高頻信號源,這個(gè)信號頻率比要傳輸?shù)男盘栴l率高得多得多,以這個(gè)信號作為載波,將要傳遞的信號調(diào)制上去,比如以這個(gè)載波的振幅大小或者頻率相對中心頻率偏移程度來表示要傳輸?shù)男盘栂惹暗膹?qiáng)弱或者0,1,然后將其發(fā)送出去。接收時(shí)候再根據(jù)其振幅大小或者偏移中心頻率程度恢復(fù)原先信號,這就是解調(diào)。以此實(shí)現(xiàn)信號的傳遞。前者稱之為調(diào)幅調(diào)制,后者稱之為跳頻調(diào)制,是最主流兩種調(diào)制方式。
為啥要這么折騰一發(fā)捏,因?yàn)槭澜缟嫌袀€(gè)很神奇的東西,叫帶通濾波器。就是說,只有一定頻率范圍的信號才能通過的濾波器(諧振),其他頻率的會被其過濾掉。醬紫的話,同一空間下,不同的信號源使用不同的頻率載波,而其對應(yīng)接收機(jī)也分別使用對應(yīng)頻率的帶通濾波器就可以僅接收到所需信號源發(fā)射的信號啦。帶通濾波器看上去很高端很碉堡的感覺,然而實(shí)際上是個(gè)很常見的現(xiàn)象,舉個(gè)例子,蕩秋千時(shí)候,僅當(dāng)你按照秋千固有晃動頻率去推才能小力推的高,而這個(gè)帶通濾波器就是電路中的“秋千”,一般用LC,RC網(wǎng)絡(luò),或者其他晶體諧振器實(shí)現(xiàn)。
好啦,到了這一步,我們總算能在同一個(gè)空間讓多對發(fā)射機(jī)接收機(jī)自由通信互不干擾了,然而這個(gè)夠了嗎?還不行。貌似看上去,載波資源是無線的,可以取100,1000,10000Hz........或者耍賴皮的,100.1,100.11,100.111Hz.......。然而,大自然還是不會讓你們?nèi)祟愡@么容易就得逞啦。首先,帶通濾波器也不是說僅某個(gè)范圍信號一定能過,其他就一定不能過,也是一個(gè)類似正態(tài)分布曲線一樣的東東:

此外,振蕩源發(fā)生的載波本身也有一定頻率偏移,因此不同設(shè)備使用載波不能相差太少。
此外,頻率高低還影響著其傳輸特性和攜帶數(shù)據(jù)的能力。物理老師告訴我們,波的頻率越高,粒子性越強(qiáng)。這個(gè)我們生活中也能體會出來。遠(yuǎn)處一個(gè)音樂會,從遠(yuǎn)到近最先聽到最低音的貝斯和鼓聲,最后才能聽到高音部分。低音部分往往隔著門還能透出來,高音就不行了。
因此,頻率越低,傳輸數(shù)據(jù)速度越差(信號頻率要比載波頻率低很多才行),而且向外輻射能力也很差,但繞過性比較好,穿透性也很好,可以像空氣一樣充斥整個(gè)空間。
頻率越高,傳輸數(shù)據(jù)速度越好,向外輻射能力越強(qiáng),但是更接近直線傳播,像子彈一樣指哪打哪(比如可見光),穿透性和繞過性都很差,一擋就呵呵了。
此外,還有個(gè)非常重要的原因,天線尺寸和電磁波的頻率(實(shí)際是波長影響)有著非常大的關(guān)系。為了使天線發(fā)射效果達(dá)到最好,需要讓電磁波輸入到天線的波形和反射回來的波形重合,所以根據(jù)不同天線類型,天線尺寸基本直接和電磁波波長成正比,而且在相同數(shù)量級。這也就是為啥哪些老式收音機(jī)天線那么長(100MHz),而手機(jī)(950MHz和1500MHz)和Wifi(2.4GHz)天線這么小甚至直接電路板上面拉根走線就夠了~下圖紅色圈內(nèi)就是大家熟悉的Garmin1000的藍(lán)牙和ANT的天線。(引用了下業(yè)內(nèi)評測大師“刀疤川”的照片~在此表示感謝~~)
所以,無線電也是重要的資源,不是隨便能用的。國家根據(jù)情況在不同頻率段都劃分出來了一小塊區(qū)域給我們這些設(shè)備在不需要相關(guān)許可證情況下使用,其他頻段隨意使用是犯法的哦,影響大的話,警察叔叔會上門滴。而藍(lán)牙,ANT,還有最最最熟悉的Wifi所使用的2.4GHz頻段就是其中一個(gè),具體范圍是2.4GHz到2.5GHz。在這個(gè)范圍內(nèi)劃分為100個(gè)頻點(diǎn),也就是2400MHz,2401MHz,2402MHz一直到2500MHz醬紫,也就是說呢,現(xiàn)在這個(gè)無線電大廣場里面被劃分成了很多個(gè)小隔音包間,包間包間之間互不干擾。
為啥要選用2.4GHz這個(gè)頻段呢,其實(shí)原因很簡單,ANT,藍(lán)牙,Wifi這類協(xié)議主要使用場景都是短距離通信,2.4GHz已經(jīng)是微波頻段了,傳輸接近視距傳輸,大體就是人眼看到的地方信號才好,符合這類設(shè)備需求,說悄悄話就夠啦。此外就是傳輸速率高,在相同數(shù)據(jù)量情況下,通過降低傳輸時(shí)間減少發(fā)射器工作時(shí)間,降低功耗,還可以在同一個(gè)頻點(diǎn)通過分時(shí)方式容納更多設(shè)備通信,不然100個(gè)頻點(diǎn),咋夠用啊是吧。
這個(gè)就好比學(xué)霸和學(xué)神的區(qū)別,學(xué)神效率高,早完事早回家睡覺,而且還不用占著自習(xí)室位置,一個(gè)自習(xí)室位子夠一堆學(xué)神用了哈哈,所以我們要提倡培養(yǎng)學(xué)神,而不是學(xué)霸哈哈哈哈哈。
此外還有就是前面提到的天線體積小,才能把整個(gè)設(shè)備微縮到可以接受的尺寸。
由此我們可以知道,我們藍(lán)牙和ANT使用的電磁波頻段特點(diǎn)就是直線傳輸,穿透性差,因而在安裝相關(guān)傳感器時(shí)候,盡量能讓接收器和傳感器之間直線通道凈空,尤其是要避開金屬,其次是碳纖維(碳纖維也是導(dǎo)體哦)。
先前還有很多車友提到的,Garmin500的信號很差,連有些功率計(jì)很容易斷線。這個(gè)有一方面原因就是Garmin500的天線位置,在設(shè)備下方。安裝在把立上面時(shí)候,那里剛好給把立擋住,安裝在延長座上面時(shí)候,剛好給彎把擋住。而通過前面的拆解圖也能看出,Garmin1000這個(gè)在設(shè)備側(cè)面,相對而言到各傳感器之間的通道就干凈很多。當(dāng)然這只是其中一個(gè)方面原因。不過試試看把設(shè)備轉(zhuǎn)90度,或許信號會好很多吧哈哈哈。
來一張500的天線圖
到現(xiàn)在為止,總算能從物理課本里面跳出來了......下面就來講講究竟是怎么樣在有限的100個(gè)頻點(diǎn)內(nèi),實(shí)現(xiàn)數(shù)以億萬計(jì)的各類使用Wifi,藍(lán)牙,ANT,還有啥Zigbee,一堆廠商自己搞的2.4G協(xié)議設(shè)備相互通信而不相互干擾。
2.4GHz低功耗數(shù)字無線協(xié)議基本原理
其實(shí)也就是之前提到的,分時(shí)使用同一個(gè)頻點(diǎn)來進(jìn)行通信。
所以第一個(gè)問題來啦,怎樣識別當(dāng)前正在“講話”的是不是想收聽的設(shè)備發(fā)出的呢?也很簡單,自報(bào)姓名就行。以下就是一個(gè)基本的數(shù)據(jù)幀的格式:

其中地址這塊就是用來識別各個(gè)不同設(shè)備用的。接收設(shè)備首先會先比對地址這塊看是否和設(shè)定的相符,如果不相符則丟棄。
此外這里面還有一個(gè)比較重要的,錯(cuò)誤校驗(yàn)部分,發(fā)射時(shí)候,通過對前面數(shù)據(jù)包進(jìn)行CRC算法計(jì)算得出一個(gè)16位的數(shù)。接收時(shí)候,接收部分會再根據(jù)實(shí)際接收到的數(shù)據(jù),用和發(fā)射端一樣的CRC算法參數(shù)計(jì)算出一個(gè)CRC值,并和接收到的發(fā)射端計(jì)算出來的進(jìn)行比對。如果不相符,則表示可能在數(shù)據(jù)傳輸時(shí)候因?yàn)槭艿礁蓴_導(dǎo)致部分?jǐn)?shù)據(jù)不正確,這個(gè)數(shù)據(jù)包也會被丟棄。
由此可見,這類無線協(xié)議傳輸可靠性是非常高的,基本不會存在傳輸“串線”,或者受干擾導(dǎo)致錯(cuò)誤的數(shù)據(jù)傳輸,最多直接就接收不到。而有些車友反應(yīng)心率帶啥的在高壓線旁邊數(shù)據(jù)會不對,這個(gè)不會是無線傳輸導(dǎo)致的,而是心率測量自身受到干擾。
接下來問題就是,在一個(gè)房間里面的各個(gè)設(shè)備,到底怎么安排“發(fā)言”的時(shí)間呢?
可能大家會認(rèn)為,誰有數(shù)據(jù)要傳,誰就發(fā)言唄,大不了兩個(gè)撞到一起了,就重新說一次就好,接收設(shè)備就一直等著接收就行,收到不是自己的就丟棄。確實(shí)也是可以醬紫,但是有個(gè)很重要的事情,這個(gè)房間內(nèi)的“聽眾”,“監(jiān)聽”這件事情也是非常耗電的,甚至比“發(fā)言”還耗電。此外,老是接收到其他設(shè)備傳輸數(shù)據(jù)本身也會增加處理負(fù)擔(dān)。
這個(gè)就是NRF51422規(guī)格書里面功耗說明,紅色框內(nèi)就是接收開啟時(shí)候功耗:

所以,應(yīng)該怎么來解決呢?
也很簡單。首先,功耗要求高的設(shè)備,比如傳感器,以固定時(shí)間間隔來發(fā)送數(shù)據(jù)包,比如每1s發(fā)送一次。而有一臺功耗要求相對不高的設(shè)備,比如表頭,先長時(shí)間開啟接收,一旦收到一個(gè)相符的數(shù)據(jù)包,就可以預(yù)測出之后所有發(fā)送數(shù)據(jù)包的時(shí)間了。這時(shí)候,表頭也就可以做到,絕大部分時(shí)候在休息,僅在傳感器將要發(fā)送數(shù)據(jù)包的時(shí)候才開啟接收,這樣子就可以大大降低功耗了。
當(dāng)然,實(shí)際上,傳感器和表頭之間往往需要雙向傳輸數(shù)據(jù)。在上面實(shí)現(xiàn)之后,這個(gè)實(shí)現(xiàn)起來也很容易了。傳感器每發(fā)送一個(gè)數(shù)據(jù)包之后,短暫開啟一下接收,而表頭接收到一個(gè)數(shù)據(jù)之后,立刻傳輸一個(gè)數(shù)據(jù)包,就實(shí)現(xiàn)了這種最低功耗開銷的雙向數(shù)據(jù)傳輸了。當(dāng)然,這個(gè)步驟也可以重復(fù)幾次,實(shí)現(xiàn)更高數(shù)據(jù)吞吐量。
上面提到的表頭等待接收從機(jī)一個(gè)有效數(shù)據(jù)包的這個(gè)過程,被稱做“搜索/掃描(search/scan)”,從機(jī)這個(gè)動作被稱做“廣播(advertise/broadcast)”,如圖所示就是其工作時(shí)間圖:
一旦表頭接收到一次有效數(shù)據(jù)包,此時(shí)就可以和從機(jī)同步了,這個(gè)時(shí)候,即認(rèn)為主機(jī)從機(jī)已經(jīng)建立起連接,將會在固定的通信時(shí)隙(timeslot)內(nèi)進(jìn)行通信。如果一個(gè)通信時(shí)隙內(nèi)有多次數(shù)據(jù)傳輸動作,這個(gè)被稱為“突發(fā)傳輸(burst)”模式。下圖即為連接之后的工作時(shí)間圖。

我們前面提到的從搜索到連接,都是在同一個(gè)房間里面進(jìn)行的操作,然而實(shí)際上,主機(jī)和從機(jī)完成首次同步之后,完全可以共同確定一個(gè)“換房間”的規(guī)則,之后每次通信完都可以更換一個(gè)房間進(jìn)行通信。
這個(gè)好處就太明顯啦,可以避免某些頻點(diǎn)設(shè)備太多,老是“撞車”導(dǎo)致效果差,還可以將可用頻點(diǎn)擴(kuò)展開來,因而總?cè)菁{設(shè)備量更多,此外還可以大大提高保密性。這個(gè)技術(shù)其實(shí)很古老了,就是“跳頻通信”技術(shù)。

然而跳頻技術(shù)僅BLE協(xié)議有使用,ANT+是沒有使用這項(xiàng)技術(shù)的。下圖就是BLE的頻點(diǎn)分配,其中有3個(gè)綠色信道是用于搜索設(shè)備時(shí)候廣播用的,剩下37個(gè)信道就是用于數(shù)據(jù)通信的了。

那接下來,我們再具體看看BLE和ANT+這塊具體是怎么處理的。
首先說說ANT+:
ANT+所定義的標(biāo)準(zhǔn)連接參數(shù)如下:
數(shù)據(jù)傳輸間隔:0.25s~4s(即0.25Hz到4Hz)
這也就是通常大家說的“ANT+1s傳輸4次數(shù)據(jù)”。然而并不完全是這樣的。只要在這個(gè)范圍內(nèi)都符合ANT+規(guī)范。而絕大部分碼表接收頻率實(shí)際上是1Hz,即1s傳輸一次。
通信頻率:2457MHz
ANT是沒有使用跳頻技術(shù)的,因此其抗干擾能力和容納設(shè)備能力相對而言要弱一些,周圍有較多ANT設(shè)備時(shí)候信號傳輸會很容易出現(xiàn)“撞車”現(xiàn)象。
數(shù)據(jù)幀有效數(shù)據(jù)尺寸:8個(gè)字節(jié)
其中第一個(gè)字節(jié)主要用于指示數(shù)據(jù)幀數(shù)據(jù)含義,比如傳輸?shù)氖枪β剩ゎl,電量啥啥的,后面7個(gè)字節(jié)才是真正數(shù)據(jù)。
通信速率:1Mbit/s
識別不同設(shè)備的方式:1個(gè)字節(jié)指示傳輸模式,1個(gè)字節(jié)指示設(shè)備類型,2個(gè)字節(jié)表示設(shè)備序列號
傳輸模式全部ant+設(shè)備都是一樣的,雙向可連接無共享,因此無視了
設(shè)備類型就是指示這個(gè)設(shè)備屬于心率帶,功率計(jì),速度踏頻傳感器等
因此同一類設(shè)備唯一區(qū)別的就是設(shè)備的序列號,2個(gè)字節(jié)除去最高和最低的兩個(gè)有特殊用途外,一共可以編號65534個(gè)設(shè)備。而且各個(gè)廠商都是獨(dú)立編號的。因此出現(xiàn)同號的概率還是不小的。表頭是無法識別相同序列號的兩種設(shè)備的,因此ANT在一定范圍內(nèi)容納設(shè)備能力更加被限制了。而為了避免這個(gè),ANT甚至允許表頭設(shè)定一個(gè)信號強(qiáng)度閾值,僅高于此的設(shè)備才能連接。因此,ANT更加容易出現(xiàn)掉線,信號不好等連接問題。
再說說BLE:
數(shù)據(jù)傳輸間隔:7.5mS到4S,即0.25Hz到133.3Hz,一般用0.25到1s間隔
這個(gè)范圍比ANT+要大很多。而且和ANT不太相同的是,ANT一般是傳感器固定了一個(gè)傳輸數(shù)據(jù)間隔,而BLE主機(jī)和從機(jī)會先進(jìn)行“談判(negotiation)”,共同商議一個(gè)雙方都爽的連接間隔,這樣可以避免ANT的表頭1Hz接收,傳感器4Hz傳輸時(shí)候,傳感器4次傳輸有3次實(shí)際上是白傳了的情況,降低電量和帶寬的損耗。
通信頻率:2402MHz到2480MHz,其中3個(gè)廣播信道,37個(gè)數(shù)據(jù)信道,跳頻通信
前面提到了,這種方式可以大大提高傳輸抗干擾能力和空間內(nèi)同時(shí)容納的設(shè)備數(shù)量,同時(shí)提高傳輸保密性。
數(shù)據(jù)幀有效數(shù)據(jù)尺寸:20個(gè)字節(jié)
這里20個(gè)字節(jié)可以全部用于傳輸有效數(shù)據(jù)。
通信速率:1Mbit/s
識別不同設(shè)備的方式:48位藍(lán)牙地址
48位共可以編號2的48次方即281474976710656,即10的14.45次方個(gè)設(shè)備而不重號。直觀點(diǎn)的感覺就是,厚度1cm的心率傳感器,疊起來可以從地球到太陽跑9個(gè)來回。也有人估算過可以給地球上每一粒沙子都編上號還夠用。這個(gè)地址是生產(chǎn)藍(lán)牙芯片廠商預(yù)先刻錄在芯片內(nèi)的,因此不會存在重號的可能。
所以,從基礎(chǔ)通信實(shí)現(xiàn)這塊,基本可以總結(jié)出如下結(jié)論:
ANT和BLE都是針對低功耗設(shè)計(jì)的,其功耗都在同一個(gè)數(shù)量級,但藍(lán)牙使用了跳頻技術(shù),因此在抗干擾性,容納相同設(shè)備同時(shí)通信,數(shù)據(jù)保密性上比ANT要好,所以才能有幾個(gè)表頭可以同時(shí)接一個(gè)ANT傳感器數(shù)據(jù),而BLE的話僅能一對一。此外,BLE數(shù)據(jù)幀比ANT長,因此數(shù)據(jù)吞吐能力要強(qiáng)過ANT。
好啦,我們從物理到硬件都分析完啦,現(xiàn)在可以分析下軟件部分這塊啦~~
首先先說說ANT這塊:
ANT的協(xié)議棧主要實(shí)現(xiàn)了設(shè)備搜索,識別,連接,以及連接之后的通信維持,而每個(gè)通信時(shí)隙究竟應(yīng)該傳輸哪些數(shù)據(jù)則是由開發(fā)者自己來安排實(shí)現(xiàn)的,ANT協(xié)議棧的程序會在一個(gè)發(fā)送時(shí)隙到來時(shí)候通知應(yīng)用部分的程序進(jìn)行相關(guān)數(shù)據(jù)發(fā)送和接收。
這里面就是功率計(jì)大部分需要發(fā)送的消息的內(nèi)容和結(jié)構(gòu)。而其中絕大部分后面都有備注兩次發(fā)送之間時(shí)間間隔。
比如傳輸功率數(shù)據(jù)的0x10頁面,這個(gè)基本就是平時(shí)一直在發(fā),大概4Hz,而表示踩踏效率的0x13頁面,則是1.25s才會發(fā)送一次。而其他一些比如設(shè)備信息,電池電量,歸零相關(guān)信息則是更長時(shí)間30.25s才需要發(fā)送一次。還有一些交互相關(guān)的,比如歸零操作,相關(guān)的數(shù)據(jù)回發(fā)則在接收到表頭歸零請求時(shí)候才需要發(fā)送。

總的來說,ANT協(xié)議還是一個(gè)比較簡易原始的傳輸協(xié)議,其應(yīng)用層接口并沒有完全做到和物理實(shí)現(xiàn)脫離,抽象成一個(gè)更易用的軟件模型。開發(fā)者還是需要按照物理實(shí)現(xiàn)來自己規(guī)劃發(fā)送的時(shí)機(jī)和內(nèi)容,因此相對而言擴(kuò)展性較差,尤其是在實(shí)現(xiàn)交互操作時(shí)候。
下面就是對ANT協(xié)議棧事件進(jìn)行處理的回調(diào)函數(shù)。這個(gè)函數(shù)在初始化時(shí)候告知給ANT協(xié)議程序部分,在有ANT事件時(shí)候會調(diào)用。這里我們僅需處理TX(發(fā)送)和RX(接收)時(shí)間即可。

而在發(fā)送事件處理這里,則需自己計(jì)數(shù)和保存過往狀態(tài),來判斷相應(yīng)應(yīng)該發(fā)送什么數(shù)據(jù):

這里面我們首先判斷是否在進(jìn)行歸零操作的交互動作,如果當(dāng)前不處于歸零交互,則由ant_tx_sel()函數(shù)來根據(jù)過往發(fā)送情況計(jì)算出接下來應(yīng)該發(fā)送的數(shù)據(jù)屬于什么類型,比如是經(jīng)常發(fā)送的還是不經(jīng)常發(fā)送的,然后分配給各個(gè)模塊。各個(gè)模塊再根據(jù)自己過往發(fā)送情況來順序發(fā)送所需要發(fā)送的數(shù)據(jù)。
這個(gè)分配方式是我們自己設(shè)計(jì)的,相對而言有著比較好的擴(kuò)展性。但總的來講,還是比較繁瑣的。
總結(jié)下,ANT協(xié)議由于跟物理層結(jié)合比較緊密,因此理解好硬件原理之后,就很容易上手進(jìn)行開發(fā),但其編程模型不夠簡潔,尤其是實(shí)現(xiàn)復(fù)雜功能時(shí)候會比較繁瑣,重用度較低。
下面我們來看看BLE這塊。
BLE對傳輸這塊進(jìn)行了很好的封裝和抽象,數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn)被完全隱藏起來了,因而也不需要開發(fā)者進(jìn)行管理。
BLE協(xié)議將我們表頭和傳感器分別抽象為Client(客戶端)和Server(服務(wù)器),數(shù)據(jù)的傳輸也變成Client向Server請求數(shù)據(jù)和Server主動通知Client的兩種大的方式。
形象來講的話,Server就好比一個(gè)書架(設(shè)備),書架上面有很多隔(服務(wù)Service),每個(gè)格子里面有很多書(特性Characteristic),每本書里面有很多有內(nèi)容的頁(值Value)。而Client和Server的通信實(shí)際上就是通過對這些頁上面的內(nèi)容進(jìn)行讀和寫來進(jìn)行的。

比如以這個(gè)心率計(jì)為例,首先這個(gè)設(shè)備具有幾個(gè)Service,如圖所示是心率測量這個(gè)Service。除此以外還會有設(shè)備信息啊,電池電量,固件升級之類的。
在這個(gè)Service里面包含兩個(gè)Characteristic,第一個(gè)是心率測量的,第二個(gè)是指示設(shè)備位置的。
而在兩個(gè)特性里面,有幾個(gè)值的項(xiàng)。比如心率測量的,第二個(gè)就是儲存心率測量值的。表頭只要對這個(gè)特性進(jìn)行讀操作,就可以得到當(dāng)前心率了。此外比較常用的還有cccd這個(gè)值可以用來充當(dāng)某些有通知和指示的“開關(guān)”用的。
而每個(gè)特性還有權(quán)限Permissions。主要有read讀,write寫,notify通知,indication指示。這些就有點(diǎn)類似電腦里面文件權(quán)限一樣。
對于需要從傳感器發(fā)送給表頭的數(shù)據(jù),一般采用read和notify的權(quán)限。傳感器可以隨時(shí)將值保存在特性中(不需要等待一個(gè)通信時(shí)隙),當(dāng)表頭調(diào)用讀的函數(shù)時(shí)候,協(xié)議棧會自動安排數(shù)據(jù)發(fā)出,傳感器的應(yīng)用部分程序?qū)@個(gè)過程是不需要知情的。而對于某些實(shí)時(shí)更新的數(shù)據(jù),表頭希望能盡早獲取,可以采用通知的方式。當(dāng)傳感器需要對數(shù)據(jù)進(jìn)行改動時(shí)候,調(diào)用hvx的函數(shù)就可以向表頭發(fā)出一個(gè)通知的事件,其中也包含最新的數(shù)據(jù)。
而對于交互操作,比如設(shè)置某些參數(shù),或者執(zhí)行某些操作,比如歸零,則一般使用write和indicate的操作。
當(dāng)表頭對其中某些特性進(jìn)行寫操作時(shí)候,傳感器會收到一個(gè)寫的事件,其中包含著表頭寫入的數(shù)據(jù)。而當(dāng)傳感器執(zhí)行相應(yīng)的操作之后,通過調(diào)用hvx這個(gè)函數(shù)即可向表頭回發(fā)一個(gè)indicate來指示當(dāng)前寫入或者操作的執(zhí)行結(jié)果。indicate和notify主要區(qū)別是indicate需要回應(yīng)才有效。
因此,BLE傳感器部分要處理的事件非常簡單,僅需對表頭的write事件進(jìn)行處理就行。
而發(fā)送數(shù)據(jù)則可以在任何時(shí)候進(jìn)行發(fā)送操作就可以了。一般就選擇在測量完成后。

這種方式基本上就將應(yīng)用部分代碼和數(shù)據(jù)傳輸徹底分離開了,應(yīng)用部分可以按照自己的節(jié)奏來進(jìn)行各項(xiàng)任務(wù),而不需要跟著藍(lán)牙傳輸?shù)耐ㄐ挪秸{(diào)一致。
此外,這種方式最大化優(yōu)化數(shù)據(jù)傳輸通道的利用效率,比如ANT那邊,所有消息都是固定時(shí)間間隔進(jìn)行傳輸?shù)?,然而很多時(shí)候可能表頭當(dāng)前并不需要接收這部分?jǐn)?shù)據(jù),比如電量,比如踩踏效率(可能用戶沒開這個(gè)功能),比如設(shè)備信息這些,而其仍然需要傳輸,占用了可能表頭最需要接收的數(shù)據(jù),比如功率的傳輸機(jī)會。而藍(lán)牙這邊則完全由協(xié)議棧內(nèi)部安排數(shù)據(jù)的傳輸,要啥給啥,因此通道有效數(shù)據(jù)利用率更高。即使有更多功能更多數(shù)據(jù)需要傳輸,不需要用到的數(shù)據(jù)也不會占用需要用到數(shù)據(jù)的傳輸機(jī)會。
此外就是復(fù)雜功能實(shí)現(xiàn)方面,顯然藍(lán)牙更勝一籌。然而藍(lán)牙這套模型理解起來相對比較復(fù)雜,因而不容易上手,代碼量也很大,因此開發(fā)調(diào)試時(shí)候工作量還是很大的。
下面就是添加一個(gè)功率測量特性的函數(shù),一個(gè)功率計(jì)大概有10多個(gè)這樣的特性需要添加和配置。

下面就是發(fā)送一個(gè)功率測量值的函數(shù),而這樣的函數(shù)還有十幾個(gè)。

不過呢,ant因?yàn)槌霈F(xiàn)的時(shí)間比較早,所以有著較多的資源可以參考。甚至功率計(jì)直接就有現(xiàn)成的代碼挪過來改都不用改就可以用的。
Nordic提供的ANT范例:分別是功率計(jì),速度踏頻傳感器,心率計(jì),其他運(yùn)動的速度節(jié)奏傳感器

這個(gè)就是官方提供的功率計(jì)的范例代碼。

ANT的官網(wǎng)上面還有相關(guān)的參考設(shè)計(jì)的下載。

而BLE由于主要是用在智能硬件這塊,大多都是智能硬件相關(guān)的范例,自行車傳感器參考資料就比較少,很多Profile是需要自己根據(jù)規(guī)則去編寫實(shí)現(xiàn)的,比如功率計(jì)。這個(gè)對于沒有多少開發(fā)經(jīng)驗(yàn)的工程師而言還是比較難的,因此也有一些“號稱”ANT和藍(lán)牙都支持的功率計(jì),其實(shí)藍(lán)牙僅能升級下固件查看電池電量而已,主要原因就是官方僅提供了這部分的參考代碼。然而,這簡單一步都做不到的話,其他低功耗,算法的做出來的效果更可想而知了~~~
所以,總的來講,BLE比ANT更加完善,更適合實(shí)現(xiàn)復(fù)雜功能,相比ANT而言基本就是有過之而無不及了,是未來的大趨勢。
此外電子行業(yè)有個(gè)現(xiàn)象,越多人用,成本越低。由于這幾年智能硬件的火爆,BLE的使用更加普遍,因此有更多硬件平臺可選,其價(jià)格也比ANT要低不少。然而自行車行業(yè)暫時(shí)還沒到打價(jià)格戰(zhàn)的地步,可能暫時(shí)各大老牌公司還是一種懶散心態(tài)敝帚自珍,繼續(xù)使用ANT。不過隨著各大互聯(lián)網(wǎng)公司瞄準(zhǔn)這個(gè)領(lǐng)域,相信不久后ANT將會徹底被BLE取代。因此再選擇傳感器和表頭時(shí)候,支持BLE的應(yīng)該會比僅支持ANT的有著更長的生命周期。