tag 标签: beacon

相关帖子
相关博文
  • 热度 24
    2015-9-12 11:07
    1408 次阅读|
    0 个评论
    很多尝试进入移动互联网行业的人,对室内定位系统很感兴趣,这项技术带来了很多创新的O2O商业模式,包括产品思路。 但对室内定位的技术商业化前景,用WiFi还是Beacon?我想目前很多人都是不太确定的。BAT几个巨头也是一波WiFi大战过后又来Beacon大战。在此,EDN的编辑采访整理了一些业界工程师的非官方观点,供大家讨论交流。 精度/成本/开发难度,三个角度PK定位方式Beacon与Wi-Fi 知乎网友猴八斤供职于上海矽睿科技有限公司(联系请至:business@qstcorp.com)。以下整理转发了他的个人见解,包括这两种定位方式在精度、网络建设成本和上层应用开发容易程度。他拜托EDN小编在此声明以下为其个人观点,如有纰漏欢迎大家一起留言讨论。 1.精度 首先我们弄清楚一点。2.4GHz因为是ISM band没有license,所以大家都喜欢用。Wi-Fi 802.11BGN、 蓝牙、Zigbee甚至Project Loon的通信链路都是它,看起来无所不能。但是这是不是意味着这个频段就适合做所有的工作呢?答案是否定的,最起码对于室内定位这一项来说。 先来说一个可能很多人都不知道的事实吧,大家有没有注意到甚至好奇为什么Wi-Fi信道的频率上限大概是2.45 GHz。(见下图,来源wikipedia by Michael Gauthier) 恩...其实主要的原因之一是因为微波炉的主要辐射的中心频率是2.45 GHz。而即使有很好的电磁屏蔽,微波炉泄露的功率仍然可以大大影响Wi-Fi的信号。 曾经去朋友家做客,在我说完上述这段话后他恍然大悟:“难怪我一微波网就断了!” 那么,微波炉是靠什么加热的呢?让水分子振动,分子摩擦碰撞产生热能。这个过程是电磁波能量被吸收转化成热能的过程。这个过程同样会发生在Wi-Fi和蓝牙的身上,换言之,人体会对信号产生极大的衰减! 同事说过这样一句话,在你和iBeacon之间站个特别大的胖子,定位误差一下子就上去了。很可悲的是,这是事实。 有观点说对比于Wi-Fi,iBeacon的信号衰减很快速,线性区间很小。我假设X轴是距离,Y是接收到的信号强度或者路径衰减吧。Wi-Fi和蓝牙同样是2.4GHz,难道信道特性差了很多?怎么可能!距离和衰减之间的关系无论是直接用线性拟合还是套用其他更复杂的公式,从来没有看到过说发射功率的不同会对衰减特性有影响!附上最简单的一幅图,"FSPL for common 802.11 frequency bands" by Sss41,来自wiki。 好,再转回精度的问题吧。 Wi-Fi和iBeacon的定位精确度谁好谁坏非常不好说,精度很大程度取决于应用环境 ,影响因素主要是节点的密度、布设位置、环境的复杂程度以及ibeacon是否使用三边定位。 多数情况下,Wi-Fi节点密度太低,不能给出十分精确的定位结果。我很难想象会有人为了更精准的定位而在现有的Wi-Fi系统中新加入路由器。Wi-Fi指纹采集将会让精度有一个质的飞跃,只可惜指纹会随着建筑物内部环境的变动而变动。就我本身的知识而言,每三个月或半年就需要重采一次以保证高精度。更复杂的指纹匹配算法能在保证精度的同时降低采集频率,这里就不展开说了。另外一个提高精度的方法就是和惯性导航结合起来,在瞄准的客户端都是智能手机的前提下这种方案几乎被所有的厂商采用,并且事实证明确实能提高精度(各家的算法在惯导上拼得跟绝对定位一样激烈)。 iBeacon系统因为属于新设系统,保证不串扰过度的情况下可以布得很密,当然这个要考虑成本。Proximity系统我们就不说了,根据POI的个数和位置可以自由调整所需节点的个数。这里我们重点讨论和Wi-Fi定位同样的,需要覆盖使用场景的三边定位。现在几乎所有的iBeacon节点都是用电池供电的,每个iBeacon节点的发射功率并不能调的过高否则后续维护频率会过高。这就意味着iBeacon节点不能太稀疏。以我目前的经验来看,假定使用的是普通纽扣电池,电池使用寿命不少于6个月(如果可以容忍很慢的位置刷新频率的话,电池使用寿命可以更长),想实现三边定位的话节点的密度大概为三十平方米左右一个(办公区域)到七八十平方米一个(室内或室外开阔空间)的水平。使用以上的布置,我们的团队做到了3米的精度(只靠BLE),对于大多数应用还是可以接受的。 这里就有一个我很喜欢强调的观点:定位精度、硬件成本以及算法复杂度之间肯定是要有互相妥协的,三个变量函数对应等号的另外一端是你要求达到的客户体验。个人观点:Wi-Fi的定位精度对于大多数室内应用来说应该是足够的,5m哪怕是10m以内,左右走两步看看就基本上可以找到你要找的东西。而且Wi-Fi暂时有一个iBeacon短期之内做不到或者很难做的优势:可以反向定位。 2.网络建设整体成本 首先,一个室内定位系统的成本一定会包含地图制作的成本,这个成本可大可小。有了室内建筑蓝图,还是可以很容易地制作出精度比较高的室内地图的。但是如果是像笔者知道的有的企业靠人工丈量——时间成本就不提了,精度有保证么? 就定位系统成本来说,如果不考虑新加节点的话,Wi-Fi三边定位可以认为是最小的。你需要的仅仅是软件层面的适配,不论是正向还是反向定位。Wi-Fi指纹匹配系统的话,成本就要高很多,主要是收集和更新指纹的成本。 如上文所说,如果要实现三边定位的话iBeacon系统需要布设大量的蓝牙节点。对于大型应用场景来说节点的数量不容小觑。以一个三万平米的商场为例,平均五十平方米布置一个节点的话,覆盖全部范围需要600个节点。以大量生产每个三十RMB左右的成本计算,需要18K RMB。听起来还可以对吧?但是!在目前的BLE框架下实现全自动的电量监测汇报很困难。如果使用诸如CSR MESH之类的技术的话操作不当甚至会更快地耗尽电池,得不偿失。那么,商场或者需要派人经常性巡检,或者需要每年把全部节点的电池换一遍,还要担心在商场里随时会出现service outage(这不是开玩笑,蓝牙节点里总会有次品,会用数倍于其他节点的速度烧干电池!)。我想这对于商家来说是近乎不可接受的。 3.上层应用开发 应用开发层面从上往下包含UI、地图、算法等几个部分。据我所知,Wi-Fi和iBeacon在这几个方面的难易程度几乎没有任何区别。除了一点,iOS系统在iOS5还是iOS6时代(具体我记不清了),下架了所有的Wi-Fi扫描类APP并且关闭了公用的API。后续的类似应用或者是基于Wi-Fi的定位APP几乎都是用私有API实现的,而且结果似乎都不理想。但是好像最近在iOS8上情况有了变化,请知道的同学不吝赐教,多谢。 总的来说我的观点是:对于中小型应用场景,在布设成本和维护成本可以接受的情况下,可以考虑用iBeacon系统来做比较高精度的室内定位。而对于大型应用场景,使用Wi-Fi和惯导覆盖大部分的区域,配合在关键路口、POI布设的iBeacon节点进行临近定位校准,方为上上之策。 【分页导航】 第1页: 精度/成本/开发难度,三个角度PK定位方式Beacon与Wi-Fi 第2页: 定位算法业者眼中的Beacon与Wi-Fi 第3页: 两点驳斥 + iBeacon的真正优点缺点   《电子技术设计》网站版权所有,谢绝转载 定位算法业者眼中的Beacon与Wi-Fi 很多朋友对Beacon的定位方案与Wi-Fi定位在准确度、网络建设整体成本和上层应用开发容易程度上存在疑问,来自知乎的网友沈晓龙是一位WiFi/beacon等多种无线信号定位算法从业人员,以下是他的分享: 1.准确度: 本身,WiFi的定位精度呈现出 一个方差较大的高斯,均值在5m左右 ,而决定因素通常来说取决于建设成本。而这里面的建设成本又分为硬件成本和初始化成本。通常来说, 实验室环境我见过0.7m的,而通常工业应用大概在4~6m之间 ,而还有一些仁兄不知道为什么还是做到了10m开外。具体什么什么,在下面的分析中再讲吧。 对应的,beacon的定位精度呈现出 一个方差较小的高斯,均值在3m左右 ,而决定因素通常来说不受太多东西的影响了,真的看过beacon的信号,你会发现它是一个非常漂亮的快速衰落到平稳后的样子,而几乎线性衰落的区间真的是很容易很短...所以这东西适合用来做什么呢,做近距离的近场确认。但是这东西就如同给了一个小范围的圈圈,那么理想情况下,是 可以做到2~3m的精度的 。但是本身蓝牙没办法做很好的基于RSSI的方案来实现一个连续性很高的定位,所以如果要实现一个还不错的,连续性的,可定位的系统,对于安装布设的要求会很高。 2.建设成本: 按照刚才说的, 不同的精度对应了不同的建设成本 。 WiFi定位的实现方式,有很多种,总的来说分成我需要自己安装硬件的壕方案,和我就用现成信号的壕方案。 那么安装硬件的方案呢,我现在看过的除了一些创业者的工作,还是主要说cisco/高通/Aruba之类的做的吧,这些的部署成本 大概一个商场需200万RMB,定位精度呢,平均在7m左右 。 那么用现成信号的方案呢,经典的做法大概没什么硬件成本(不排除有些大厂会带着自己的设备采集...不过会被保安大大打出去吧),但是时间成本比较高,大概一个商场按平均 5 层算起来大概需要个15天能够完成初始化设置(采信号嘛)。。。而现在我看到的最快的方案同等量级也大概在2天左右吧。而且初始化的时候大概需要专业的工程师(人员成本)。某种程度上,这里付出的 时间成本会在很大程度上与精度相关联。 而大部分我看到的方案,大概也能做到7m左右的精度。 我们就假设精度差不多的条件下,WiFi就是硬件方案的成本为采购成本(200W RMB),而软件方案的成本为时间成本(ave 5days)和人员成本(工程师工资)。 那么beacon的建设成本就好估量很多了,如果按照精度保持2m的这个优势的状况的话,那么请以3平方米一个beacon的价格估算建设成本,再加上布设 这些的人员成本..如果客官您说也要7m行不行,原来的我我只能说,臣妾做不到啊,这个要不然就超出了有效范围,要不就没法用RSSI对吧,可是如果, 嗯,您愿意用大概5平米一个beacon的价格建设呢,我差不多做个7m的精度出来也是满满当当可以的。 所以精度差不多的情况下,beacon的建设成本约为5平米(有效面积,墙里面又不用做)加布设成本(人员工资)。 3. 应用开发难度: 显然, 对于WiFi软件方案和beacon提供的定位,就是SDK、API的调用, 无论WiFi还是beacon的方案。自然功能提供商可能要跟手机硬件厂商扯皮,不过这个也不是开发者关心的了吧。 不过这里面值得一提的便是, WiFi硬件解决方案的话,需要连接他们的WiFi来实现定位功能。 而WiFi的那种我反正不用连你们路由器,我就用你们信号的机(liu)智(mang)的实现方式就大概没这个问题了。 剩下的,就是 精度对于您app开发的难度的影响了 ,如果您足够机智,可以在拿到相关信息之后自己再写算法啊,优化啊,跟地图app拿到原始GPS结果之后做的大量算法优化一样,把结果搞的好看一点,那么,sorry了,这个难度貌似是不小... 4. 成功应用案例: 各位大大啊,beacon不是设计来做定位的啊,你们实在是强求了啊... 做个近场checkin,发发优惠券,传达传达必要信息就好了嘛...硬要拿它做定位,然后用定位的精度去要求也是不那么合理的.. 因为本身,你定位精度准了,不也就是用来实现一些功能么,那么实话就是,更精细的定位精度,beacon也做不了,在它精度范围内的功能,就是check-in能够做到的事情,那么,的话,你管它准不准呢,位置服务从来都是用来支持 service不是么~ 【分页导航】 第1页: 精度/成本/开发难度,三个角度PK定位方式Beacon与Wi-Fi 第2页: 定位算法业者眼中的Beacon与Wi-Fi 第3页: 两点驳斥 + iBeacon的真正优点缺点   《电子技术设计》网站版权所有,谢绝转载 两点驳斥 + iBeacon的真正优点缺点 最后,附上网友猴八斤对iBeacon优缺点的解读。 两点驳斥: 作为一个目前正在做相关系统的人,首先我先驳斥一下iBeacon或者更广层面说BLE技术可以做到毫米级别定位精度的说法:信道衰减模型描述实际信号的衰减有多么不靠谱你造么?芯片发射功率有多不稳定你造么?2.4GHz被人体吸收得多厉害你造么?! 其次,再来驳斥一下有关只能做到5米左右还需要一大堆节点的说法,这个我只能说您并没有真正摸过系统。排除多次平均以及结合地图信息不说,如果室内的环境不是特别复杂而且算法所使用的模型基本匹配的话,每三十平方米一个节点做到3-5米的精度(我指半径)还是可以的。多次平均加错误结果排除的话在中心区域精度高于两米也是完全OK的!最起码我们用自己的办公区域实验(哎。。可以说是最差的实验环境之一)也做到了三米的精度。 再补充点iBeacon相对于其他定位系统的优势: 一、功率小可以做到无源,普通的节点可以工作几个月到一两年没有问题。这个优势可大可小,有些实用场景譬如说商场的户外部分或者是停车场很难找到电源插座。 二、基于第一点iBeacon系统可以布得比较密,一个Wi-Fi router可以动不动就覆盖上千平米的面积,所以在你想用Wi-Fi定位的时候自然不会为了定位这个附加功能而故意加大路由器的密度。消费者电子领域中,目前能在密度上和它相提并论的也就是LED室内定位了。不过我士就是学这个的,负责任的说虽然欧美都已经开始了先行的实验,理论也很美好但是现实生活中问题一大堆。我就说最要命的一点,现在的系统架构要求LED系统中,始终开着前摄像头。所以当你悠哉悠哉逛了半个小时手机突然告诉你亲没电了哦,你会不会抓狂。 三、iBeacon节点的成本目前大概在二三十人民币一个的水平,相对于其他定位的物理层实现要低一些。别再说LED定位只是每个灯几块的成本添加了,还是那句话,问题一大堆… 四、iBeacon在移动平台要求的是蓝牙,所以相对于UWB、RFID等技术,对于消费电子平台要友好得多。相应的支持像微信摇一摇、未来的各种O2O平台也有优势。 接下来缺点也来了: 一、定位精度不高,这个是相对的。相对于目前Wi-Fi号称的三米级(其实是10米左右,不要跟我提指纹,每六个月甚至每三个月一采还是很要命的)的精度还是可以的。当然你可以说我用WiFi+PDR啊,问题来了,BLE不能加PDR?!当然了,相对于UWB以及LED三角定位中的厘米级精度还是只有哭晕的份儿。 二、成本。咦?上面不是说成本是优势之一么?恩,问题就是出在主要竞争对手Wi-Fi这里。精度要求不高的情况下Wi-Fi定位要求的额外硬件成本为零。这一点iBeacon无论如何都做不到。 三、维护。无源是好事也是个坏事。比起别的系统出问题再需要维护来说,你总得惦记着哪天哪个节点没电了。现在的标准下,BLE系统比不了Zigbee,状态监控和数据汇总简直就是一个噩梦。这个还等看后续蓝牙标准的发布。 四、最后一点单独说吧,现在的室内定位并不是技术和成本所限,而是你要拿它干嘛,商业模式是什么样子。室内导航听起来很酷,但是你很快就会发现并没有钱给商家赚。如果没有钱赚,成本再低也不会有人去做这明显赔本的买卖。当然,商家一时的心血来潮,想要提供跟别人不一样的客户体验是一种可能,但并不会持久而且普遍性太差。我们也是费了很大心思才终于找到了适合的商业模式。 小结:正如网友猴八斤所说的那样,“每个人的知识面都有限,我也是一样。”希望有问题、有疑惑都可以留言,我们一起讨论,为各种应用场景实现最理想的定位方式,并找到更好的商业模式来使用这些技术。 【分页导航】 第1页: 精度/成本/开发难度,三个角度PK定位方式Beacon与Wi-Fi 第2页: 定位算法业者眼中的Beacon与Wi-Fi 第3页: 两点驳斥 + iBeacon的真正优点缺点   《电子技术设计》网站版权所有,谢绝转载
  • 热度 10
    2015-8-1 09:03
    2560 次阅读|
    0 个评论
    什么是Beacon 基于 Bluetooth 技术的Beacon,最简单的理解就是一个小型的信息基站,可以应用在室内导航、移动支付、店内导购、人流分析、物品跟踪等等所有与人在室内流动相关的活动之中。随着时代的发展,现代人对移动设备越来越依赖,也有越来越多的活动在室内进行,而GPS这样的室外导航在室内中有些死角及易受建筑物的干扰,且从精准度和耗电量上不能满足室内定位的需求。因此,基于蓝牙技术的Beacon应运而生,成为理想的室内数据解决方案。Beacon技术做到的是通过Bluetooth Smart向通信覆盖范围内的移动设备捕捉和推送信息。2014年已经有许多机构开展了一些实验性项目,并有预测指出,2015年Beacon将在全球范围内将得到大力部署、并带来更多新型服务。ABI Research预测到2019年市场上的Beacon设备总数将达到六千万台,市场规模之大,可见一斑。 多数情况下,通过Beacon可以进行室内定位并提供相应的服务,如在百货商场及时推送品牌促销信息、在机场为旅客定位登机口和餐饮设施的位置、或在博物馆向游客推送身旁的文物信息等。在这些应用场景中,Beacon的位置是固定的,用户通过智能手机APP可以获取这些位置信息。但最近也有一些移动的Beacon应用出现。例如Lighthouse公司推出的一款可穿戴式的Beacon解决方案,对需要特殊帮助的学生进行位置追踪并保障他们的安全。在中国,每到春运或旅游旺季,总有老人或儿童在拥挤的人流中走散,而未来这种基于移动和可穿戴式Beacon的解决方案可以帮助人们更快速准确地在公共场所找到走失的亲人。 延伸阅读:NFC技术和Beacon技术的差异解读 规划Beacon ID,准确判断相对位置 Beacon的首要任务就是允许APP确认两者之间的相对位置,并借助这一位置信息实现更多功能。APP必须拥有相应数据的访问权限,并将蓝牙广告数据包中所传输的Beacon ID与实际位置分布信息相对应。位置信息的表达越简单越好,以便于APP读取和分析。例如,而对于商场的Beacon应用,根据店铺ID规划Beacon ID会更合适,这样APP就能够判断出用户是走进了左边的这家李宁,还是右边的那家耐克。 根据位置信息规划Beacon广告数据包中的Beacon ID,是Beacon实现诸多应用的重要前提。Beacon ID 数据可以通过设备上安装的APP在本地进行设置,也可发送至云端或网络以便远程操作。本地数据存储的好处在于它便于访问,而且没有网络也照样能够运行。而远程数据存储的情况下,用户使用的数据是相同的,但网络访问难免更耗时,因此要加倍注意确保用户体验不受影响。有时最佳的解决方案是采用“混搭”的方式,即将本地数据及时进行远程同步、并存储在APP的本地数据库中。这样,在没有网络的情况下,APP也能够使用最新的数据了。 APP后台自动运行,无需用户干预 对于用户来说,最好无需特意开启APP就能够探测到附近的Beacon。也就是说APP最好能够自动在后台运行,而不需要用户干预。这就需要开发时注意系统资源(如电源电量)的合理使用。当然,前提是要确保您的智能手机开启了蓝牙功能。 相对距离视情况而定 到底多近才算近,这是所有Beacon应用开发者需要考虑的问题。实际上,这需要根据实际情况决定。对一些应用来说,只要有一两个Beacon (多个Beacon即可定义”区域“) 的信号,就可以触发动作了,例如针对走进商场或店铺的顾客、机场里走近值机柜台的旅客等。而对于其他一些应用,可能需要用户十分靠近特定的Beacon时,才会提示用户。比如占地较小、陈列物密集的博物馆或美术馆的导览系统,就需要在参观者十分靠近特定的展品时才会提示相应的展品信息。 通过Beacon可以推算用户的相对距离。因为广告数据包中包含了距离与信号强度的对照数据(比如距离为一米时,信号强度是多少多少),所以我们就可以通过接收器(比如手机)测量到的信号强度推算出相对应的距离。如果你使用了API(Application Programming Interface, 应用程序编程接口),就会发现API其实能够很方便地实现距离测算。但是,必须指出距离是推算的、而非精确计算的结果(虽然测算的准确度已经可以满足当前大部分应用的需求)。 Beacon广告数据形式多种选择 关于Beacon的文章已经有很多了,尤其是关于iBeacon的。iBeacon是苹果的广告数据形式,是苹果公司的专利。iOS设备对iBeacon提供原生支持,但有些情况下还需要满足特定的认证要求。关于iBeacon的更多信息可访问Apple.com。 但是,还有一些其他的Beacon广告形式规格,例如Radius Network的AltBeacon。AltBeacon是开源的,可应用于任何平台而不受限制。它最近还发布了面向安卓系统的开源API。 如何开启运用 零售商与市场营销领域是Beacon的大舞台,可以为通路营销与更佳的消费者体验提供无限的想象空间。可以预见,Beacon的运用将会有光明的前景:通过Beacon将产品和促销信息发送给顾客;博物馆和美术馆等也可以开发专门的应用,向走进展厅的参观者发送展厅主题介绍、或对在展品前驻足的参观者发送详细的展品信息等;机场还可以用Beacon追踪所有旅客的动向。对于有开发Beacon应用想法的读者,可以注册下载最新的开发工具Bluetooth Developer Studio,开启自己的Beacon开发之旅。 【分页导航】 第1页: Beacon的一些基础知识 第2页: 手把手教你开发AltBeacon安卓APP 第3页: 如何量身定做自己的专属Beacon 《电子技术设计》网站版权所有,谢绝转载。 手把手教你如何开发AltBeacon安卓APP 前面已经介绍了Beacon的一些基础知识,以及AltBeacon和它的蓝牙广告形式。下面将用一个实际的开发案例,指导读者学习如何用AltBeacon安卓API开发Beacon原型APP。 运用Beacon进行博物馆导览 将Beacon应用于博物馆导览,这样当游客靠近展品时,APP可以提示该展品的相关信息,走过路过就再也不会错过!想象一下,如果故宫有了这款APP, 当游客走到一个不明觉厉的青铜方樽面前,只要拿起手机就能快速了解它的主人、出土信息和花纹的寓意,再也不用担心被人嘲笑没文化了。 这个设计的设想是:首先,博物馆内安装的所有的Beacon基站都在APP能够探测到的范围内,而且APP能够默默地在后台运行并探测附近的Beacon,但只有当游客与Beacon基站的距离靠近至2米范围内时才会跳出弹窗,提示与这一Beacon相关的展品信息;其次,针对同一展品,APP不会不识趣地反复跳出提示窗;最后,还能够查阅APP系统日志底层Beacon相关事件。下面请看实地操作! 如果你也是第一次创建Beacon应用APP,看这里! 绑定服务,设定“区域” 对于首次建立应用程序类别的开发者,以下几点需要注意:首先,用AltBeacon API BeaconManager将APP与后台运行的AltBeacon库中的服务绑定。另外,要着手设定一个或多个“区域”。这里所说的“区域”是指一个或一组Beacon,由AltBeacon Beacon ID 域值来规定。Beacon ID域将20个八位字节的标识域分成1个16字节的主ID、1个2字节的二级ID、1个2字节的三级ID。在我的这个APP中,主Beacon是我所关注的,因此只设定了主ID,因此我将二级和三级ID设为空值。 图1 – 基本初始化步骤 更多干货往下看! APP程序类别 针对不同的显示界面(包括主要展品信息界面、Beacon事件日志界面)的活动类别、以及其他一些辅助性的Java类别,这个APP包括一个自定义应用程序类和一个Actiivity类别。AltBeacon API自身就是一个库,它负责APP后台运行弹出,并提供一系列接口来支持与Beacon探测相关的回调函数。这些都通过自定义应用程序类“GyboApplication.java”执行。 图2 – AltBeacon API 关键接口 测定距离,更新范围 AltBeacon API支持“监测”与“测距”功能。监测功能会在APP进入某一个或某一组Beacon区域时生成事件。这其实是一个二进制的概念,因为只有两种可能——APP在区域内、APP不在区域内。测距功能可以追踪游客距离某一组Beacon的距离,当两者近到一定程度时,就可以触发功能。 我们还必须对应用程序类别执行的RangeNotifier接口中的单实例对象方法“didRangeBeaconsInRegion(Collection beacons, Region region)”进行编码。AltBeacon库的后台蓝牙扫描进程能够发现附近的Beacon,而“didRangeBeaconsInRegion”每秒钟调用一次,并提供当次扫描到的Beacon列表。APP绝大多数功能都在此基础上实现。 Beacon分类则代表物理意义上的Beacon, 它有着一系列属性,包括:Beacon类型标示、蓝牙MAC地址和名称、接收信号强度指示器RSSI(Received Signal Strength Indicator)、(制造过程中设定的)校准传输的Beacon发射功率、与Beacon相对距离的估算值(以米为单位计量、通过RSSI和Beacon发射功率计算得出)。 定义最近的Beacon,判断信息推送时间 有了Beacon列表以及每个Beacon与游客的距离估算值,要推算出哪个Beacon离游客最近应该是不成问题的。但是在测试过程中也有一些问题。有的Beacon明知道就在范围内,却没有出现在didRangeBeaconsInRegion方法获取的Beacon列表中,到底哪里出了问题?经分析,原因可能是Beacon广播频率与安卓APP扫描的频率和持续时间不匹配,导致有时扫描过程无法接收到实际范围内所有Beacon的广告数据包。这就引出了另一个问题:如何控制安卓APP里的这些参数? 当APP收到范围更新时,就要判断是否需要执行相应的功能。具体来说,就是看哪个Beacon离游客最近、有没有近到需要向游客提示Beacon所对应的展品信息。如果最近的Beacon发生了变化,游客会收到提示信息。例如,游客离开刚刚驻足的展品,下一次范围更新之后,离他最近的Beacon可能就不是之前那一个(组)了。当然,还要判断距离最近的Beacon是近到什么程度,才能向游客发送通知信息。实验中的APP把这一数值设定为2米。当然你也可以允许用户手动设置、自定义这一类配置。 扫描配置又是什么? BeaconManager类允许开发者对APP进行广告数据包扫描时长、活动间歇时长等参数进行配置。可以在初始代码中添加如下的代码。 图4 – 扫描配置 想要做好适合APP的扫描配置,需要考虑很多方面。扫描过程的电量消耗是很大的,因此扫描频次过高或时长过长就会增加电池电量的消耗。但如果扫描频次跟不上,Beacon探测结果的更新就会延迟,进而影响用户体验。 因此,根据实际应用场景的需要,我们必须在耗电水平和用户体验之间进行权衡取舍。例如,一个用来探测路途中经过的店铺的APP,就需要比博物馆导览APP拥有更快的Beacon广告探测和反应速度。 还需要考虑Beacon的广播频率。如果扫描频率高于Beacon广告,有时就会由于最近一次扫描活动中的广播数据包丢失而导致实际范围内的Beacon没有出现在API回调的报告中。 现实世界中的Beacon探测 不得不承认,现实世界总是不完美的。为了让APP能够更好的为人民服务,程序猿编写代码时也不得不考虑现实中的问题种种。在测试过程中,尽管我们很认真地设置了扫描配置,Beacon扫描偶尔还是会有漏网之鱼。现实中,由于游客和Beacon之间的物理屏障(如人群、其他物品等)、或Beacon配置与之前设想的不同,也会出现一些纰漏。物理屏障的存在会导致游客在展厅内行走时,APP数据回报出现短暂的异常。因此,Beacon应用不应当仅根据最近一次的数据回报就立刻作出回应。认识到这一点让我们收获颇多:与其中规中矩地根据AltBeacon库回调的数据行事,不如对算法进行适度的“模糊”处理,也许能改善Beacon APP的表现。为了改善算法,我们决定采用更复杂一些的方法来追踪范围内的Beacon。 模糊的Beacon追踪 我们的方法简单而有效——保留了最近15秒的报告中提示位于范围内的Beacon的相关数据缓存,以及每个Beacon最近一次被探测到的精确时间。通过计时器任务,把最近15秒内没有被探测到的Beacon视为“过期”、移除缓存。 在可以称得上“重中之重”的didRangeBeaconsInRegion方法中,我们更新了Beacon数据缓存和回调的Beacon对象列表,然后评估全部的缓存数据,以判定目前距离最近的Beacon。于是测试的结果有了改善。这类似于数据平滑处理,相关代码片段如下图。 图5 – GyboApplication.java中的Beacon缓存设置和使用 图6 –BeaconEvent类别 图7 –负责终止BeaconEvent对象的计时器任务 最后的最后,提醒用户! 一旦实际执行了获取范围内Beacon报告的代码、采取了某种方式追踪Beacon、并根据获得的数据判断哪一个Beacon离游客最近,那么就只剩最后一步了:在合适的情况下提示游客Beacon所关联的展品信息。怎样判断是否“合适”呢?主要看最后一次生成的通知是否为同一Beacon相关的,因为没有必要反复提示用户同一个展品的信息。还需要将估算的Beacon距离与既设的(触发行为的)最小距离值进行对比,判断游客是否足够靠近Beacon(也就是展品),然后决定是否发送展品信息。 如果APP是在前台运行,提示游客的方法就很简单:更新主要展览信息页面、显示最近的展品介绍。我们使用内存中有关Beacon及其对应展品的数据结构,每个Beacon都有自己的ID,就可以分别对应各自的展品信息,并在APP本地映射了这些数据的对应关系,但正如第一篇中所讲到的,对于除了原型以外的任何APP,最好从远程服务器上获取相关数据,根据位置或其他信息配置Beacon。 图8 –Beacon Information类别 图9 –ThingOfInterest类别 通知列表下拉菜单中的通知,并将其链接到定义展品信息页面的Activity。 图10 – 安卓系统通知,提示附近发现Beacon 下图是安卓通知的代码。 图11 – 创建通知 原文链接:http://blog.bluetooth.com/get-your-beac-on-part-2/ 【分页导航】 第1页: Beacon的一些基础知识 第2页: 手把手教你开发AltBeacon安卓APP 第3页: 如何量身定做自己的专属Beacon 《电子技术设计》网站版权所有,谢绝转载。 量身定做自己的专属Beacon 前面已经介绍了Beacon应用开发的概念和AltBeacon广播形式,并详细讲解了如何利用AltBeacon安卓API开发博物馆导览APP原型。下面将向大家介绍如何测试这一博物馆导览APP。 选择蓝牙开发板,启动你的专属Beacon! 我们暂时还没有现成采用AltBeacon形式的Beacon,但手上有不少蓝牙开发板。蓝牙开发板是具有智能蓝牙功能的微控制器(MCU),其内部一般都内置了蓝牙协议栈。由于开发板一般都具有丰富的外设接口和引线,因此开发板通常用来搭建产品的原型可以将编译生成的固件直接烧入到开发板当中,甚至可以直接做成产品功能展示,或是单纯用于试验或学习。我决定用自己手上既有的几块开发板来创建Beacon应用,然后测试一下安卓博物馆导览APP。 我使用的是Bluegiga DKBluetooth Low Energy开发套件和英特尔Edison开发板。Bluegiga开发板的编程采用BGScript脚本语言。英特尔Edison运行的是则Linux,编程语言有多项选择。我习惯用由JavaScript框架驱动的Node.js,这样能找到适用的智能蓝牙的功能包或是库文件。 Bluegiga变身AltBeacon Bluegiga的BGScript脚本语言简单易懂,且配有Bluegiga框架所提供的丰富的功能库。用BGScript创建Bluegiga应用涉及用文本编辑器创建脚本文件和其他项目配置文件。通过Bluegiga SDK中的软件更新工具,就可以直接通过USB将编译生成的固件烧入到开发板上。 脚本包括变量和数组声明、事件处理器回调函数。回调是编程模型的重要部分,调用标准Bluegiga功能函数会促发相关的回调函数。同样,框架也可以调用事件处理器,以回应脚本之外的情况。 在任何平台上实现Beacon都涉及与通用访问配置文件(Generic Access Profile, GAP)协作,要求设置广播数据包内容、配置广播参数。 Bluegiga AltBeacon实施的要素如下图: 先从变量声明开始。 图11 – 数组声明 广播的设置可以在Bluegiga标准事件处理器“system_boot”中完成,开发板接通电源或重置之后,系统会调用“system_boot”。我先设置了包含Flags字段数组,Flags字段包括许多位,从每一位都能看出Bluetooth Smart和/或Bluetooth BR/EDR的支持方式。 广播数据包中可能包含的字段称为广播数据类型(ADV data types),蓝牙核心规格附录的A部分(数据类型规格)对其有明确定义。广播数据类型的标准结构,包括一个单一字节长度字段 (它的值不包括长度字段本身占有的字节)、一个单一字节数据类型字段。GAP编号文档中定义了数据类型值。 下面是初始过程的首部分代码: 图12 –在system_boot事件处理器中定义flags广播类型 在本系列文章的第一篇中,我介绍了AltBeacon形式并解释了GAP 制造商特定数据广播字段中编码的数据。我在同一数组内的后20字节中填入了这些数据。 图13 – 定义制造商特定数据字段中的AltBeacon数据 然后为Beacon设备设置名称,这一名称今后可以显示在Central设备(主要是智能手机)返回的扫描结果中。它的值是另一个广播类型,因此我将它设立在它自己的数据里。可以看到,指定的本地名称就是AltBeacon。 图14 – 建立用于扫描响应的本地名称 配置广播参数包括调用Bluegiga的一些功能、数组。 图15 – 配置GAP 广播 这样,我的Bluegiga定制AltBeacon准备就绪。 图16 –蓝兆科技DKBLE上的AltBeacon 另一种选择:英特尔Edison上的AltBeacon Node.js是模块化设计,有多种用途的模块供选用。对于Node.js来说,模块与库类似。“Bleno”模块能够为担任蓝牙GAP外设的应用提供诸多功能,如GATT配置文件的定义和实施。它是开源的,由Sandeep Mistry创建。SandeepMistry还创建了Noble模块,可以用来创建GAP中央模式设备的相关软件。Bleno和Noble都位于github上。 Bleno的标准分布不支持AltBeacon形式,但却支持iBeacon。因此,我复制了Noble github 仓库并改写了Bleno,这样就可以生成AltBeacon形式的GAP广播了。下面就跟大家介绍一下是怎么改写的。 我在标准的bleno.js源文件上添加了新功能,然后就可以根据node.js应用的一系列既设参数启动广播了。新功能代码就长以下这个样子: 图17 –bleno/lib/bleno.js中的新功能 这一代码基本上就是将必须的AltBeacon数据填充到缓冲区,然后调用添加至Linuxbindings.js源文件中其他功能。Bleno可以与Linux上的BlueZ蓝牙协议栈协作,当在基于Linux的平台上执行功能时,Bleno所引出的用于多种应用的功能最终被映射到针对BlueZ功能的调用。我只好对Bleno中Linux相关的部分作一些修改,这样才能支持AltBeacon。 图18 –bleno/lib/linux/bindings.js中的新功能 图19 –bleno/lib/linux/hci-ble.js中的新功能 这些功能所作的就是准备一个和Bluegiga开发板类似、包含所有必需广播数据的缓冲区,然后将其传递至、并通过Bleno API层,最终到达BlueZ的主机控制接口(Host Controller Interface,HCI)。 AltBeacon Node.js 应用 Bleno经修正之后就可以支持AltBeacon了, 剩下的就是使用新的bleno模块来创建node.js应用,然后使用AltBeacon形式开始广播。整个应用就是下图中的7行代码。 图20 –AltBeacon node.js 应用 为运行AltBeacon APP,我使用Putty通过SSH或是telnet建立了与英特尔Edison的终端会话,然后运行命令行里的node app.js。 图21 – Putty建立终端对话 原文链接:http://blog.bluetooth.com/get-your-beac-on-part-3/ 【分页导航】 第1页: Beacon的一些基础知识 第2页: 手把手教你开发AltBeacon安卓APP 第3页: 如何量身定做自己的专属Beacon 《电子技术设计》网站版权所有,谢绝转载。 如您对蓝牙技术感兴趣,欢迎参加 2015年IIC-China秋季展 (8月31日~9月3日,深圳会展中心3号馆),我们设有蓝牙开发者论坛。提前注册抢座,请点击或扫描下面的二维码:
相关资源
  • 所需E币: 1
    时间: 2021-9-15 18:38
    大小: 613.45KB
    上传者: Argent
    FPGA是一个技术密集型的行业,没有坚实的技术功底,很难形成有竞争力的产品。从技术上来看FPGA未来的发展有广阔的空间,嵌入式开发需要了解不同领域的产品工作原理,包括快速读懂数据手册,搜集了部分数据手册,第三方教育机构的指导性文档,希望对您有所帮助。
  • 所需E币: 0
    时间: 2021-3-29 18:49
    大小: 613.45KB
    上传者: Argent
    现在的无线蓝牙,Zigbee产品不断涌现,做为电子工程师必须了解一些软硬件开发知识,BLE通信协议,网络架构,电机驱动都是常备技术课题,收集了关于BLE应用,智能门锁方面的开发资料,欢迎下载学习。
  • 所需E币: 0
    时间: 2020-7-7 14:50
    大小: 1.82MB
    上传者: 帘卷笙声寂
        VG02是一款蓝牙Beacon设备。蓝牙Beacon 是一种基于蓝牙BLE 协议的广播协议,也指代拥有这种广播协议的BLE外围设备。 VG02作为一个蓝牙Beacon 设备, 它通常被安装在一个合适的位置, 同时它将连续周期性地向它的周围环境进行广播,并且它是不应该被BLE的中心设备进行连接的。 VG02的广播内容按照一定的规则进行排布。        VG02是基于NrodicnRF528XX的蓝牙Beacon。VG02用电池供电,电池使用寿命与VG02内部参数设置有关。此外,VG02内部的PCB板上留有烧录口和一对UART串口。
  • 所需E币: 0
    时间: 2020-7-7 14:51
    大小: 1.91MB
    上传者: 帘卷笙声寂
       Beacon是建立在低功耗蓝牙协议基础上的一种广播协议,同时它也是拥有这个协议的一款低功耗蓝牙设备(从机)。作为一款Beacon设备,它通常是放在室内的某个固定位置,借此向周围进行连续性广播,但是它不能和任何低功耗蓝牙主机进行连接。所有广播数据在特定规则下进行排列。        SKYLAB Beacon配置是由SKYLAB研发团队针对“SKYLAB Beacon”进行配置的一款手机应用。使用这款手机应用就能把手机和“SKYLAB Beacon”进行连接并且进行参数修改,如:UUID, Major,Minor,Beacon名称等。这些参数在广播模式开启后会进行广播信息,因此被大型商场用作商品促销!
  • 所需E币: 0
    时间: 2020-7-7 14:52
    大小: 2.43MB
    上传者: 帘卷笙声寂
    VG05是一个蓝牙4.2信标设备。蓝牙4.2信标是一种基于BLE协议的广播协议,也指具有该协议的BLE外围设备。VG05通常放在一个固定位置,作为蓝牙4.2信标设备,它可以使用BLE低功耗蓝牙广播的方法,利用其支持的通用属性配置文件在第37、38、39三个信道上连续发送无定向性的广播包。连续广播信标信号如UUID,Major,Minor,RSSI等信息。VG05在广播模式下无法连接,所有广播数据在特定规则下进行排列。VG05基于NordicnRF52832蓝牙芯片。VG05由2节ER14250电池供电,电池寿命与VG05的内部参数有关。另外,VG05内部PCB板有一个烧录口,一对UART串口。        相较于VG01,BLE4.2BeaconVG05广播范围可达100米。VG05在VG01的基础上增加了硅橡胶垫圈,达到IP67级防水!
  • 所需E币: 0
    时间: 2020-7-7 15:01
    大小: 1.96MB
    上传者: 帘卷笙声寂
    VG03是基于NrodicnRF52840的蓝牙5.0Beacon。VG03用一个CR2477纽扣电池供电,电池使用寿命与VG03内部参数设置有关。此外,VG03内部的PCB板上留有烧录口和一对UART串口。VG03是一款蓝牙5.0Beacon设备。蓝牙5.0Beacon是一种基于蓝牙BLE协议的广播协议,也指代拥有这种广播协议的BLE外围设备。VG03作为一个蓝牙5.0Beacon设备,它通常被安装在一个合适的位置,同时它将连续周期性地向它的周围环境进行广播,并且它不会被BLE的中心设备进行连接的。VG03的广播内容按照一定的规则进行排布。