分享

小科普:说说ANT+和蓝牙4.0的那些事

 829xuming 2018-01-28
这几年,运动自行车玩家激增,各种相关的电子传感器如功率计,心率计,速度踏频传感器,电变等等以及各种高端表头成为每个车友的标配,ANT+和蓝牙4.0这些本来仅会从IT人士口中说出的词汇,也变成了车友,跑友们的口头禅。然而,他们对于普通大众而言依然只是最熟悉的陌生人,到底有什么特点,选支持哪款的好,安装使用过程中有些什么注意事项,往往只是道听途说。车友们曾经也是捣鼓机械零件出身的,自然对这类神奇事物有着一探究竟的好奇心。因此我就趁此机会,以一个专业开发者身份,从车友们最关心的几个方面入手,从技术角度来对这两个协议进行一番分析,满足下大家的好奇心,也让大家更科学正确的用好相关的传感器。

本文主要还是面向普通大众的,我尽量以最通俗容易理解方式来介绍其中专业性较强的部分,不过依旧可能比较专业难懂。所以老规矩,先上Summary,后上正文,有兴趣小伙伴可以细致看看,以后对着非搞这些技术的还是很可以装装B露两手的小科普:说说ANT+和蓝牙4.0的那些事

Summary
1、ANT+是Garmin搞的,几乎也就自行车用,老东西了
2、蓝牙(BLE)就是蓝牙搞的,跟自行车没PY交易,用的广
3、这俩都是2.4G信号,视距传输因此设备和传感器之间直连线通道内最好不要有金属,碳纤维遮挡
4、这俩协议数字信号传输,有比较复杂完善一套验证体系,因此不会串线和收到错误信息
5、这俩都是分时占用频点通信,因此可以同一空间同一频点有较多设备共同运行而不会挂。但BLE此外还具有跳频能力,抗干扰性和容纳设备能力和保密性比ANT好得多。
6、出现表头无法分辨的两个同名设备的概率,蓝牙基本不可能,ANT可能性相对大些。
7、ANT协议开发更好上手,但复杂功能实现较困难,扩展性差,BLE开发上手难,但更好实现复杂功能,扩展性好。BLE相比ANT更加完善成熟,因此会是未来的趋势。
小科普:说说ANT+和蓝牙4.0的那些事小科普:说说ANT+和蓝牙4.0的那些事
首先简单介绍下这俩协议的出身
ANT+:
这个协议基本上就没有车友会陌生了吧,应该来讲是目前为止运动领域内最通用最普及的无线传输协议,甩第二名蓝牙BLE好几条街,基本上稍微高端点的自行车,跑步,游泳,铁三传感器,显示终端都是支持这个协议的。那到底是何方神圣搞出了这么套玩意捏?答案就是:Dynastream 。然而..........
小科普:说说ANT+和蓝牙4.0的那些事

小科普:说说ANT+和蓝牙4.0的那些事
嗯,其实幕后老大就是大名鼎鼎的Garmin~~其实就是当年Garmin想弄点自行车高端的玩玩,看上了ANT,注资了个公司,对ANT协议进行封装,搞了一套标准保证所有符合要求的设备都可以直接通信,相互识别对方,ANT+就出来。然后人家Garmin财大气出推啊推,这玩意就成自行车领域的“标准”了。ANT+协议的目的就是搭建一个平台,让不同厂商的传感器和显示终端也能随意搭配使用。
当然,ANT+也不仅是自行车的专利,以下这些设备都是ANT+所支持的:
小科普:说说ANT+和蓝牙4.0的那些事
基本上常见的运动健身和娱乐设备都有一定的支持。而其最出名的领域估计还就真是运动领域了,再细致的话直接就是自行车领域。好多ANT相关的(注意还不是ANT+)的教材直接从头到尾就是用自行车传感器做例子讲的。



接下来看看蓝牙4.0BLE
蓝牙这个协议历史悠久啦,我小学时候就知道有这么个玩意。手机,电脑,平板就没不支持的,跟运动领域本身是没有PY交易的啦,这里也不赘述。将其推向大众视线的应该是最近几年火热的各种可穿戴智能硬件。而这个我们通称的蓝牙也和ANT+一样,仅是蓝牙协议的一个子集,严格来讲叫Bluetooth Smart(曾经叫BLE,Bluetooth Low Energy),这个是在4.0版本之后的蓝牙协议里面才出现的,所以也有人叫其蓝牙4.0。然而蓝牙4.0还有个BR/EDR(Basic Rate, Enhanced data rate)协议,这个主要用于大数据量的传输目的,比如蓝牙耳机,音响,上网,互传文件,也就是传统蓝牙的续集。BR和BLE区别很大,手机的如果支持4.0,一般是两者都支持的,而智能硬件一般都只支持BLE。我们通常对蓝牙功耗高之类的感觉其实是BR,而BLE本身是专门为小数据量低功耗传感器开发的,所以其功耗是很低的,和ANT+相当。
不过呢,BLE本身也等于ANT这个集合罢了,还不能保证这里面设备都能相互通信相互识别对方,在这个基础上SIG(Special Interested Group,蓝牙兴趣小组,就维护蓝牙的那个组织)搞了一套GATT(Genera Attribute Table),这里面定义了非常多常用设备的数据结构和通信相关的参数,来保证只要支持GATT,不管啥厂商的表头和传感器一定能正常通信。
BLE支持的设备就更多啦:
小科普:说说ANT+和蓝牙4.0的那些事

介绍完了相关的协议的背景,接下来我来将这俩协议技术基础刨到底,一步一步从下往上,从技术角度来详细分析其特点。

无线传输到底就是无线电技术,再刨低点就是怎么玩电磁波,那我们就从电磁波开始吧~~~
小科普:说说ANT+和蓝牙4.0的那些事小科普:说说ANT+和蓝牙4.0的那些事

电磁波咱天天见,最常见的就是无线电波和光啦。电磁波是个咋回事捏,简单来讲就是变化的电场可以激发变化的磁场,变化的磁场又可以激发变化的电场,于是其就能以波的形式辐射开来。因此产生电磁波方式非常简单,只需要有个变化的电场就行,比如你拿个金属棒(天线)快速来回接电池正负极,或者对一个电磁铁高速反复通电断电,就能分别以电场和磁场为初始源头向外辐射电磁波了。
当然这俩实验不会有啥效果,因为你手速太慢哈哈。不过事实上无线电波发射也就是这么个原理,大体就是利用晶体管来代替你的手罢了。其中前者方式主要用于信号传输,而后者方式应该是无线充电领域用的比较多。
至于接收呢,电磁波和声波,水波之类一样,发射接收完全就是对称的。所以你只需要有一根金属棒,或者另一个电磁铁,这个空间电磁波就会在金属棒上感应出电压,在电磁铁线圈内感应出电压。这个电压波形和空间内传输的电磁波波形是完全一致的,不过一般幅度很小。嗯电磁波大体介绍到这里,再要详细的参看大学教材《普通物理学》,或者去问大牛“麦克斯韦”老人家吧哈哈。

下面我们来聊聊无线电的基础技术,调制解调。
由于天线接收到的信号是全部电磁波发射源的叠加,这附近只有一组的话倒无所谓,如果有一堆发射接收器,那就呵呵啦,好比在一间大会议室里面人声嘈杂,都听不到想听的人说的话。于是乎,聪明的人类,或者说是大牛“马可尼”吧,发明了这样一个技术,载波的调制和解调。
小科普:说说ANT+和蓝牙4.0的那些事

大体原理是啥捏,首先有个比较稳定频率的高频信号源,这个信号频率比要传输的信号频率高得多得多,以这个信号作为载波,将要传递的信号调制上去,比如以这个载波的振幅大小或者频率相对中心频率偏移程度来表示要传输的信号先前的强弱或者0,1,然后将其发送出去。接收时候再根据其振幅大小或者偏移中心频率程度恢复原先信号,这就是解调。以此实现信号的传递。前者称之为调幅调制,后者称之为跳频调制,是最主流两种调制方式。
为啥要这么折腾一发捏,因为世界上有个很神奇的东西,叫带通滤波器。就是说,只有一定频率范围的信号才能通过的滤波器(谐振),其他频率的会被其过滤掉。酱紫的话,同一空间下,不同的信号源使用不同的频率载波,而其对应接收机也分别使用对应频率的带通滤波器就可以仅接收到所需信号源发射的信号啦。带通滤波器看上去很高端很碉堡的感觉,然而实际上是个很常见的现象,举个例子,荡秋千时候,仅当你按照秋千固有晃动频率去推才能小力推的高,而这个带通滤波器就是电路中的“秋千”,一般用LC,RC网络,或者其他晶体谐振器实现。

好啦,到了这一步,我们总算能在同一个空间让多对发射机接收机自由通信互不干扰了,然而这个够了吗?还不行。貌似看上去,载波资源是无线的,可以取100,1000,10000Hz........或者耍赖皮的,100.1,100.11,100.111Hz.......。然而,大自然还是不会让你们人类这么容易就得逞啦。首先,带通滤波器也不是说仅某个范围信号一定能过,其他就一定不能过,也是一个类似正态分布曲线一样的东东:
小科普:说说ANT+和蓝牙4.0的那些事
此外,振荡源发生的载波本身也有一定频率偏移,因此不同设备使用载波不能相差太少。

此外,频率高低还影响着其传输特性和携带数据的能力。物理老师告诉我们,波的频率越高,粒子性越强。这个我们生活中也能体会出来。远处一个音乐会,从远到近最先听到最低音的贝斯和鼓声,最后才能听到高音部分。低音部分往往隔着门还能透出来,高音就不行了。
因此,频率越低,传输数据速度越差(信号频率要比载波频率低很多才行),而且向外辐射能力也很差,但绕过性比较好,穿透性也很好,可以像空气一样充斥整个空间。
频率越高,传输数据速度越好,向外辐射能力越强,但是更接近直线传播,像子弹一样指哪打哪(比如可见光),穿透性和绕过性都很差,一挡就呵呵了。
小科普:说说ANT+和蓝牙4.0的那些事

小科普:说说ANT+和蓝牙4.0的那些事
此外,还有个非常重要的原因,天线尺寸和电磁波的频率(实际是波长影响)有着非常大的关系。为了使天线发射效果达到最好,需要让电磁波输入到天线的波形和反射回来的波形重合,所以根据不同天线类型,天线尺寸基本直接和电磁波波长成正比,而且在相同数量级。这也就是为啥哪些老式收音机天线那么长(100MHz),而手机(950MHz和1500MHz)和Wifi(2.4GHz)天线这么小甚至直接电路板上面拉根走线就够了~下图红色圈内就是大家熟悉的Garmin1000的蓝牙和ANT的天线。(引用了下业内评测大师“刀疤川”的照片~在此表示感谢~~)
小科普:说说ANT+和蓝牙4.0的那些事


所以,无线电也是重要的资源,不是随便能用的。国家根据情况在不同频率段都划分出来了一小块区域给我们这些设备在不需要相关许可证情况下使用,其他频段随意使用是犯法的哦,影响大的话,警察叔叔会上门滴。而蓝牙,ANT,还有最最最熟悉的Wifi所使用的2.4GHz频段就是其中一个,具体范围是2.4GHz到2.5GHz。在这个范围内划分为100个频点,也就是2400MHz,2401MHz,2402MHz一直到2500MHz酱紫,也就是说呢,现在这个无线电大广场里面被划分成了很多个小隔音包间,包间包间之间互不干扰。


为啥要选用2.4GHz这个频段呢,其实原因很简单,ANT,蓝牙,Wifi这类协议主要使用场景都是短距离通信,2.4GHz已经是微波频段了,传输接近视距传输,大体就是人眼看到的地方信号才好,符合这类设备需求,说悄悄话就够啦。此外就是传输速率高,在相同数据量情况下,通过降低传输时间减少发射器工作时间,降低功耗,还可以在同一个频点通过分时方式容纳更多设备通信,不然100个频点,咋够用啊是吧。
这个就好比学霸和学神的区别,学神效率高,早完事早回家睡觉,而且还不用占着自习室位置,一个自习室位子够一堆学神用了哈哈,所以我们要提倡培养学神,而不是学霸哈哈哈哈哈。
此外还有就是前面提到的天线体积小,才能把整个设备微缩到可以接受的尺寸。

由此我们可以知道,我们蓝牙和ANT使用的电磁波频段特点就是直线传输,穿透性差,因而在安装相关传感器时候,尽量能让接收器和传感器之间直线通道净空,尤其是要避开金属,其次是碳纤维(碳纤维也是导体哦)。
先前还有很多车友提到的,Garmin500的信号很差,连有些功率计很容易断线。这个有一方面原因就是Garmin500的天线位置,在设备下方。安装在把立上面时候,那里刚好给把立挡住,安装在延长座上面时候,刚好给弯把挡住。而通过前面的拆解图也能看出,Garmin1000这个在设备侧面,相对而言到各传感器之间的通道就干净很多。当然这只是其中一个方面原因。不过试试看把设备转90度,或许信号会好很多吧哈哈哈。
来一张500的天线图
小科普:说说ANT+和蓝牙4.0的那些事


到现在为止,总算能从物理课本里面跳出来了......下面就来讲讲究竟是怎么样在有限的100个频点内,实现数以亿万计的各类使用Wifi,蓝牙,ANT,还有啥Zigbee,一堆厂商自己搞的2.4G协议设备相互通信而不相互干扰。

2.4GHz低功耗数字无线协议基本原理
其实也就是之前提到的,分时使用同一个频点来进行通信。
所以第一个问题来啦,怎样识别当前正在“讲话”的是不是想收听的设备发出的呢?也很简单,自报姓名就行。以下就是一个基本的数据帧的格式:
小科普:说说ANT+和蓝牙4.0的那些事
其中地址这块就是用来识别各个不同设备用的。接收设备首先会先比对地址这块看是否和设定的相符,如果不相符则丢弃。
此外这里面还有一个比较重要的,错误校验部分,发射时候,通过对前面数据包进行CRC算法计算得出一个16位的数。接收时候,接收部分会再根据实际接收到的数据,用和发射端一样的CRC算法参数计算出一个CRC值,并和接收到的发射端计算出来的进行比对。如果不相符,则表示可能在数据传输时候因为受到干扰导致部分数据不正确,这个数据包也会被丢弃。
由此可见,这类无线协议传输可靠性是非常高的,基本不会存在传输“串线”,或者受干扰导致错误的数据传输,最多直接就接收不到。而有些车友反应心率带啥的在高压线旁边数据会不对,这个不会是无线传输导致的,而是心率测量自身受到干扰。

接下来问题就是,在一个房间里面的各个设备,到底怎么安排“发言”的时间呢?
可能大家会认为,谁有数据要传,谁就发言呗,大不了两个撞到一起了,就重新说一次就好,接收设备就一直等着接收就行,收到不是自己的就丢弃。确实也是可以酱紫,但是有个很重要的事情,这个房间内的“听众”,“监听”这件事情也是非常耗电的,甚至比“发言”还耗电。此外,老是接收到其他设备传输数据本身也会增加处理负担。
这个就是NRF51422规格书里面功耗说明,红色框内就是接收开启时候功耗:
小科普:说说ANT+和蓝牙4.0的那些事
所以,应该怎么来解决呢?
也很简单。首先,功耗要求高的设备,比如传感器,以固定时间间隔来发送数据包,比如每1s发送一次。而有一台功耗要求相对不高的设备,比如表头,先长时间开启接收,一旦收到一个相符的数据包,就可以预测出之后所有发送数据包的时间了。这时候,表头也就可以做到,绝大部分时候在休息,仅在传感器将要发送数据包的时候才开启接收,这样子就可以大大降低功耗了。
当然,实际上,传感器和表头之间往往需要双向传输数据。在上面实现之后,这个实现起来也很容易了。传感器每发送一个数据包之后,短暂开启一下接收,而表头接收到一个数据之后,立刻传输一个数据包,就实现了这种最低功耗开销的双向数据传输了。当然,这个步骤也可以重复几次,实现更高数据吞吐量。
上面提到的表头等待接收从机一个有效数据包的这个过程,被称做“搜索/扫描(search/scan)”,从机这个动作被称做“广播(advertise/broadcast)”,如图所示就是其工作时间图:
小科普:说说ANT+和蓝牙4.0的那些事
一旦表头接收到一次有效数据包,此时就可以和从机同步了,这个时候,即认为主机从机已经建立起连接,将会在固定的通信时隙(timeslot)内进行通信。如果一个通信时隙内有多次数据传输动作,这个被称为“突发传输(burst)”模式。下图即为连接之后的工作时间图。

小科普:说说ANT+和蓝牙4.0的那些事

我们前面提到的从搜索到连接,都是在同一个房间里面进行的操作,然而实际上,主机和从机完成首次同步之后,完全可以共同确定一个“换房间”的规则,之后每次通信完都可以更换一个房间进行通信。
这个好处就太明显啦,可以避免某些频点设备太多,老是“撞车”导致效果差,还可以将可用频点扩展开来,因而总容纳设备量更多,此外还可以大大提高保密性。这个技术其实很古老了,就是“跳频通信”技术。
小科普:说说ANT+和蓝牙4.0的那些事
然而跳频技术仅BLE协议有使用,ANT+是没有使用这项技术的。下图就是BLE的频点分配,其中有3个绿色信道是用于搜索设备时候广播用的,剩下37个信道就是用于数据通信的了。
小科普:说说ANT+和蓝牙4.0的那些事


那接下来,我们再具体看看BLE和ANT+这块具体是怎么处理的。
首先说说ANT+:
ANT+所定义的标准连接参数如下:
数据传输间隔:0.25s~4s(即0.25Hz到4Hz)
这也就是通常大家说的“ANT+1s传输4次数据”。然而并不完全是这样的。只要在这个范围内都符合ANT+规范。而绝大部分码表接收频率实际上是1Hz,即1s传输一次。

通信频率:2457MHz
ANT是没有使用跳频技术的,因此其抗干扰能力和容纳设备能力相对而言要弱一些,周围有较多ANT设备时候信号传输会很容易出现“撞车”现象。

数据帧有效数据尺寸:8个字节
其中第一个字节主要用于指示数据帧数据含义,比如传输的是功率,踏频,电量啥啥的,后面7个字节才是真正数据。

通信速率:1Mbit/s

识别不同设备的方式:1个字节指示传输模式,1个字节指示设备类型,2个字节表示设备序列号
传输模式全部ant+设备都是一样的,双向可连接无共享,因此无视了
设备类型就是指示这个设备属于心率带,功率计,速度踏频传感器等
因此同一类设备唯一区别的就是设备的序列号,2个字节除去最高和最低的两个有特殊用途外,一共可以编号65534个设备。而且各个厂商都是独立编号的。因此出现同号的概率还是不小的。表头是无法识别相同序列号的两种设备的,因此ANT在一定范围内容纳设备能力更加被限制了。而为了避免这个,ANT甚至允许表头设定一个信号强度阈值,仅高于此的设备才能连接。因此,ANT更加容易出现掉线,信号不好等连接问题。

再说说BLE:
数据传输间隔:7.5mS到4S,即0.25Hz到133.3Hz,一般用0.25到1s间隔
这个范围比ANT+要大很多。而且和ANT不太相同的是,ANT一般是传感器固定了一个传输数据间隔,而BLE主机和从机会先进行“谈判(negotiation)”,共同商议一个双方都爽的连接间隔,这样可以避免ANT的表头1Hz接收,传感器4Hz传输时候,传感器4次传输有3次实际上是白传了的情况,降低电量和带宽的损耗。

通信频率:2402MHz到2480MHz,其中3个广播信道,37个数据信道,跳频通信
前面提到了,这种方式可以大大提高传输抗干扰能力和空间内同时容纳的设备数量,同时提高传输保密性。

数据帧有效数据尺寸:20个字节
这里20个字节可以全部用于传输有效数据。

通信速率:1Mbit/s

识别不同设备的方式:48位蓝牙地址
48位共可以编号2的48次方即281474976710656,即10的14.45次方个设备而不重号。直观点的感觉就是,厚度1cm的心率传感器,叠起来可以从地球到太阳跑9个来回。也有人估算过可以给地球上每一粒沙子都编上号还够用。这个地址是生产蓝牙芯片厂商预先刻录在芯片内的,因此不会存在重号的可能。

所以,从基础通信实现这块,基本可以总结出如下结论:
ANT和BLE都是针对低功耗设计的,其功耗都在同一个数量级,但蓝牙使用了跳频技术,因此在抗干扰性,容纳相同设备同时通信,数据保密性上比ANT要好,所以才能有几个表头可以同时接一个ANT传感器数据,而BLE的话仅能一对一。此外,BLE数据帧比ANT长,因此数据吞吐能力要强过ANT。

好啦,我们从物理到硬件都分析完啦,现在可以分析下软件部分这块啦~~

首先先说说ANT这块:
ANT的协议栈主要实现了设备搜索,识别,连接,以及连接之后的通信维持,而每个通信时隙究竟应该传输哪些数据则是由开发者自己来安排实现的,ANT协议栈的程序会在一个发送时隙到来时候通知应用部分的程序进行相关数据发送和接收。
小科普:说说ANT+和蓝牙4.0的那些事
小科普:说说ANT+和蓝牙4.0的那些事

这里面就是功率计大部分需要发送的消息的内容和结构。而其中绝大部分后面都有备注两次发送之间时间间隔。
比如传输功率数据的0x10页面,这个基本就是平时一直在发,大概4Hz,而表示踩踏效率的0x13页面,则是1.25s才会发送一次。而其他一些比如设备信息,电池电量,归零相关信息则是更长时间30.25s才需要发送一次。还有一些交互相关的,比如归零操作,相关的数据回发则在接收到表头归零请求时候才需要发送。
小科普:说说ANT+和蓝牙4.0的那些事
总的来说,ANT协议还是一个比较简易原始的传输协议,其应用层接口并没有完全做到和物理实现脱离,抽象成一个更易用的软件模型。开发者还是需要按照物理实现来自己规划发送的时机和内容,因此相对而言扩展性较差,尤其是在实现交互操作时候。
下面就是对ANT协议栈事件进行处理的回调函数。这个函数在初始化时候告知给ANT协议程序部分,在有ANT事件时候会调用。这里我们仅需处理TX(发送)和RX(接收)时间即可。
小科普:说说ANT+和蓝牙4.0的那些事
而在发送事件处理这里,则需自己计数和保存过往状态,来判断相应应该发送什么数据:
小科普:说说ANT+和蓝牙4.0的那些事
这里面我们首先判断是否在进行归零操作的交互动作,如果当前不处于归零交互,则由ant_tx_sel()函数来根据过往发送情况计算出接下来应该发送的数据属于什么类型,比如是经常发送的还是不经常发送的,然后分配给各个模块。各个模块再根据自己过往发送情况来顺序发送所需要发送的数据。
这个分配方式是我们自己设计的,相对而言有着比较好的扩展性。但总的来讲,还是比较繁琐的。
总结下,ANT协议由于跟物理层结合比较紧密,因此理解好硬件原理之后,就很容易上手进行开发,但其编程模型不够简洁,尤其是实现复杂功能时候会比较繁琐,重用度较低。


下面我们来看看BLE这块。
BLE对传输这块进行了很好的封装和抽象,数据传输的实现被完全隐藏起来了,因而也不需要开发者进行管理。
BLE协议将我们表头和传感器分别抽象为Client(客户端)和Server(服务器),数据的传输也变成Client向Server请求数据和Server主动通知Client的两种大的方式。
形象来讲的话,Server就好比一个书架(设备),书架上面有很多隔(服务Service),每个格子里面有很多书(特性Characteristic),每本书里面有很多有内容的页(值Value)。而Client和Server的通信实际上就是通过对这些页上面的内容进行读和写来进行的。
小科普:说说ANT+和蓝牙4.0的那些事
比如以这个心率计为例,首先这个设备具有几个Service,如图所示是心率测量这个Service。除此以外还会有设备信息啊,电池电量,固件升级之类的。
在这个Service里面包含两个Characteristic,第一个是心率测量的,第二个是指示设备位置的。
而在两个特性里面,有几个值的项。比如心率测量的,第二个就是储存心率测量值的。表头只要对这个特性进行读操作,就可以得到当前心率了。此外比较常用的还有cccd这个值可以用来充当某些有通知和指示的“开关”用的。
而每个特性还有权限Permissions。主要有read读,write写,notify通知,indication指示。这些就有点类似电脑里面文件权限一样。
对于需要从传感器发送给表头的数据,一般采用read和notify的权限。传感器可以随时将值保存在特性中(不需要等待一个通信时隙),当表头调用读的函数时候,协议栈会自动安排数据发出,传感器的应用部分程序对这个过程是不需要知情的。而对于某些实时更新的数据,表头希望能尽早获取,可以采用通知的方式。当传感器需要对数据进行改动时候,调用hvx的函数就可以向表头发出一个通知的事件,其中也包含最新的数据。
而对于交互操作,比如设置某些参数,或者执行某些操作,比如归零,则一般使用write和indicate的操作。
当表头对其中某些特性进行写操作时候,传感器会收到一个写的事件,其中包含着表头写入的数据。而当传感器执行相应的操作之后,通过调用hvx这个函数即可向表头回发一个indicate来指示当前写入或者操作的执行结果。indicate和notify主要区别是indicate需要回应才有效。

因此,BLE传感器部分要处理的事件非常简单,仅需对表头的write事件进行处理就行。
小科普:说说ANT+和蓝牙4.0的那些事

而发送数据则可以在任何时候进行发送操作就可以了。一般就选择在测量完成后。
小科普:说说ANT+和蓝牙4.0的那些事
这种方式基本上就将应用部分代码和数据传输彻底分离开了,应用部分可以按照自己的节奏来进行各项任务,而不需要跟着蓝牙传输的通信步调一致。
此外,这种方式最大化优化数据传输通道的利用效率,比如ANT那边,所有消息都是固定时间间隔进行传输的,然而很多时候可能表头当前并不需要接收这部分数据,比如电量,比如踩踏效率(可能用户没开这个功能),比如设备信息这些,而其仍然需要传输,占用了可能表头最需要接收的数据,比如功率的传输机会。而蓝牙这边则完全由协议栈内部安排数据的传输,要啥给啥,因此通道有效数据利用率更高。即使有更多功能更多数据需要传输,不需要用到的数据也不会占用需要用到数据的传输机会。
此外就是复杂功能实现方面,显然蓝牙更胜一筹。然而蓝牙这套模型理解起来相对比较复杂,因而不容易上手,代码量也很大,因此开发调试时候工作量还是很大的。
下面就是添加一个功率测量特性的函数,一个功率计大概有10多个这样的特性需要添加和配置。
小科普:说说ANT+和蓝牙4.0的那些事
下面就是发送一个功率测量值的函数,而这样的函数还有十几个。
小科普:说说ANT+和蓝牙4.0的那些事

不过呢,ant因为出现的时间比较早,所以有着较多的资源可以参考。甚至功率计直接就有现成的代码挪过来改都不用改就可以用的。
Nordic提供的ANT范例:分别是功率计,速度踏频传感器,心率计,其他运动的速度节奏传感器
小科普:说说ANT+和蓝牙4.0的那些事
这个就是官方提供的功率计的范例代码。
小科普:说说ANT+和蓝牙4.0的那些事
ANT的官网上面还有相关的参考设计的下载。
小科普:说说ANT+和蓝牙4.0的那些事
而BLE由于主要是用在智能硬件这块,大多都是智能硬件相关的范例,自行车传感器参考资料就比较少,很多Profile是需要自己根据规则去编写实现的,比如功率计。这个对于没有多少开发经验的工程师而言还是比较难的,因此也有一些“号称”ANT和蓝牙都支持的功率计,其实蓝牙仅能升级下固件查看电池电量而已,主要原因就是官方仅提供了这部分的参考代码。然而,这简单一步都做不到的话,其他低功耗,算法的做出来的效果更可想而知了~~~
小科普:说说ANT+和蓝牙4.0的那些事

所以,总的来讲,BLE比ANT更加完善,更适合实现复杂功能,相比ANT而言基本就是有过之而无不及了,是未来的大趋势。
此外电子行业有个现象,越多人用,成本越低。由于这几年智能硬件的火爆,BLE的使用更加普遍,因此有更多硬件平台可选,其价格也比ANT要低不少。然而自行车行业暂时还没到打价格战的地步,可能暂时各大老牌公司还是一种懒散心态敝帚自珍,继续使用ANT。不过随着各大互联网公司瞄准这个领域,相信不久后ANT将会彻底被BLE取代。因此再选择传感器和表头时候,支持BLE的应该会比仅支持ANT的有着更长的生命周期。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多