原文地址:http://blog.sheliw.com/blog/2014/11/11/ibeacon/

categories:

最近有幸研究一番Beacon,并且也和生产Beacon设备的厂家交流了一些关于Beacon的技术。苹果没有使用NFC,而是选择了Beacon自有一定的道理。

什么是Beacon?

Beacon技术最简单的理解可以是一个小型的信息基站,而多个Beacon能构成信息服务网络。Beacon的工作方式是Transmitter-Receiver,即基站-接收机模式的。基站?这个时候不要想到移动、联通的那些大铁塔。这个基站可以是一个运行着Bluetooth 4.0 LE的设备,也可以是经过配置的iPhone、iPad。iPhone4S和之后的iPhone、iPad3或之后的iPad,包括iPad mini都可以配置成Beacon基站。

Beacon技术的优势

Beacon技术的优势其实就是低功耗蓝牙的优势。大部分的Beacon硬件连接范围达到200英尺,而且低功耗蓝牙不像WiFi那样需要网络连接,低功耗蓝牙只要有两个点就能运作起来。

Beacon的应用

  1. 零售 通过Beacon向用户推送优惠信息,收集顾客在店内的消费数据。零售店主显然是第一波吃螃蟹的人。
  2. 支付 零售业同样是最先开始试水的一支,但这项的使用场景还会扩张。比如当用户进入或者离开一个场地时,自动发起一次支付(用于景点之类的购票)。
  3. 交通 机场、火车站、地铁换乘站针对乘客的信息推送。目前只是换乘、导航、天气信息,但未来可以发展成行程服务信息,比如当乘客到达后自动打车。
  4. 家居 同样是基于地理围栏的信息通知,比如告诉父母孩子回到家里了。

Beacon设备的技术原理

一个Beacon基站主要有三部分标识:

  1. UUID,形如:206A2476-D4DB-42F0-BF73-030236F2C756。用来标识某一个公司。比如,某个房地产公司的全部的基站都用同一个UUID。
  2. major,用来标识某一类的beacon。比如这个房地产公司的北京的房子都设定为1,上海的都设定为2。
  3. minor,用来标识某一个特定的beacon。比如某栋楼的某个基站。

Beacon设备发送信号成为一个Beacon基站。然后另一个设备比如iPhone可以用一款App来监听附近某个UUID的Beacon基站,就算程序被关闭后,如果iPhone在附近发现此UUID的Beacon基站,App就能被唤醒,并且在iPhone锁屏界面的右下角会出现App的小图标。

一般情况下如果一个商场在自己商场里面铺设很多的Beacon基站。所有Beacon的UUID应该是一样的。同一楼层Beacon基站的major可以一样,同一商店Beacon的minor值一样。

Beacon在IOS设备上的实现

Beacon需要CoreBluetooth.framework和CoreLocation.framework两个framework,先把他们加到项目中。

发送Beacon信号:


self.peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil options:nil];time_t t;
srand((unsigned) time(&t));
CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:self.beaconRegion.proximityUUID major:rand() minor:rand() identifier:self.beaconRegion.identifier];NSDictionary *beaconPeripheralData = [region peripheralDataWithMeasuredPower:nil];
[self.peripheralManager startAdvertising:beaconPeripheralData];
需要实现CoreBluetooth里的CBPeripheralManagerDelegate的代理方法

//pragma mark - Beacon advertising delegate methods
- (void)peripheralManagerDidStartAdvertising:(CBPeripheralManager *)peripheralManager error:(NSError *)error
{if (error) {NSLog(@"Couldn't turn on advertising: %@", error);return;}if (peripheralManager.isAdvertising) {}
}- (void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheralManager
{if (peripheralManager.state != CBPeripheralManagerStatePoweredOn) {NSLog(@"Peripheral manager is off.");return;}NSLog(@"Peripheral manager is on.");
}

监控附近的Beacon基站


self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;//kUUID可以设置为一个定值,就是监控附近为此UUID的beacon设备。NSUUID *proximityUUID = [[NSUUID alloc] initWithUUIDString:kUUID];
self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:proximityUUID identifier:kIdentifier];
self.beaconRegion.notifyEntryStateOnDisplay = YES;//开始接收
[self.locationManager startMonitoringForRegion:self.beaconRegion];//停止接收
[self.locationManager stopMonitoringForRegion:self.beaconRegion];
需要实现CoreLocation里的CLLocationManagerDelegate的代理方法

//程序会不断调用此方法,beacons包含所有发现的Beacon基站
- (void)locationManager:(CLLocationManager *)managerdidRangeBeacons:(NSArray *)beaconsinRegion:(CLBeaconRegion *)region {
}//进入beacon区域
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
{NSLog(@"Entered region: %@", region);
}//出beacon区域
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
{NSLog(@"Exited region: %@", region);
}//在上面两个方法被调用之后调用
- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region
{}

接受Beacon基站发送的信息


self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;NSUUID *proximityUUID = [[NSUUID alloc] initWithUUIDString:kUUID];
self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:proximityUUID identifier:kIdentifier];
self.beaconRegion.notifyEntryStateOnDisplay = YES;//接受Beacon基站的推送信息
[self.locationManager startRangingBeaconsInRegion:self.beaconRegion];
//停止Beacon基站的推送信息
[self.locationManager stopRangingBeaconsInRegion:self.beaconRegion];

参考

iBeacon的一些介绍:iBeacon 的第一篇(基于Swift实现)

Github开源项目HiBeacons

苹果官方iBeacon例子AirLocate: Using CoreLocation to monitor, range, and configure your device as an iBeacon

探寻Beacon技术相关推荐

  1. 基于Beacon技术的智慧医院解决方案

    长久以来,病人看病"三长一短"问题一直困扰着各大医院,也是影响患者就诊满意率的主要问题.随着技术的成熟和设备价格的降低,越来越多的医院升级分诊导引系统.为了提高患者的就诊体验和医院 ...

  2. 基于Beacon技术的智慧校园解决方案

    近年来,以移动互联网.智能手机为代表的信息技术快速推广普及,对学校信息化形成了巨大的挑战,以智能终端.移动互联.物联网为代表的移动化风潮不但冲击着校园网络建设,更是扭转了信息系统建设的思路与方向.基于 ...

  3. 基于Beacon技术的智慧工厂解决方案

    工业 4.0 时代,随着制造业的全面产业升级,工厂智能化与制造信息化已成为制造企业发展的关键.智能工厂解决方案将助力制造企业持续改进流程.预防问题发生.优化运营时间,重塑制造企业核心竞争力. 推出智慧 ...

  4. 基于Beacon技术的智慧酒店解决方案

    现下星级酒店,它不仅仅是装饰的豪华,还可以把智能化技术最新发明用于酒店的各个领域,使酒店各个方面的应用和管理实现智能化,更重要的是为客人提供舒适的环境.周到快捷优质的服务.能满足客户的各种需求,同时最 ...

  5. 基于Beacon技术的智慧动物园解决方案

    动物园是一个集旅游.休闲的公众活动场所,是重要旅游景点,动物园经不断建设改造,改善了动物活动环境,保障了游客安全,但有些动物饲养区基本未进行改造,部分笼舍设施老化,有些场馆缓冲笼配置不到位,逃生通道不 ...

  6. Beacon技术是什么?

    http://www.cyzone.cn/article/15455.html Beacon技术已经出现有几年时间了,而且一直呈指数级增长.它最初被零售商使用,用来吸引在商店周边一定范围内的消费者,低 ...

  7. Beacon技术应用——新导测温定位手环

    XD-TW-B01型Beacon测温定位手环 XD-TW-B01型体温监测与室内定位手环由新导智能基于Nordic公司的NRF52系列芯片开发,内置蓝牙4.2协议,支持升级到5.0,具有超低功耗的显著 ...

  8. “一束光”让机器人也能拥有触觉?之江实验室这项技术惊艳世界

    来源:浙江日报 传递触觉的"特殊道路" 我们对这个世界最初的感知通常是从触觉开始的--第一声啼哭之前,婴儿经历过诱发哭声的拍打:成长中提笔.拍球:生活中握手,敲击键盘,使用手机-- ...

  9. 技术人的灵魂 3 问,阿里工程师如何解答?

    作者 | 氐宿  阿里云高级前端技术专家 **导读:**在业务团队做事的工程师摸爬滚打了一段时间后,一定会有所疑问.团队同学在最初的一段时间都提出这样的疑惑:如何在业务中发现有技术价值的问题?发现问题 ...

最新文章

  1. a和a数值大小 计算机,Java求s=a+aa+aaa+aaaa+aa...a的值
  2. Python中的张量分解
  3. 三分钟构建高性能 WebSocket 服务 | 超优雅的 SpringBoot 整合 Netty 方案
  4. nGQL知识点总结-20210719
  5. java阻塞超时_JAVA防线程阻塞(超时控制)
  6. hdu 4049 Tourism Planning [ 状压dp ]
  7. 本科计算机应用水平,湖南工程学院全日制非计算机专业本科生参加湖南省计算机应用水平等级考试的规定...
  8. 关于Chrome内核88版本无法正常使用Adobe Flash Player公告
  9. 计算机算法设计与分析 租用游艇问题
  10. 智能媒体管理(IMM) Python SDK DEMO
  11. Anaconda3环境path与notepad++的NppExec插件激活环境与快速运行python脚本与matlab脚本,c代码
  12. 7.java基本数据类型转换包含哪两类?
  13. JavaFX 2 Dialogs
  14. Latex如何在文本中插入数学符号
  15. Oracle12c使用AFD(Oracle ASM Filter Driver)特性部署集群的配置方法
  16. 在Deepin v20系统中安装RTL8821CE无线网卡驱动的步骤
  17. WEB自动化学习路线(转载)
  18. java lame_音视频编解码——LAME
  19. 表白墙微信小程序源码
  20. 在Angular6中使用primeNG UI框架

热门文章

  1. numpy入门详细代码
  2. [235]scrapy分布式爬虫scrapy-redis(二)
  3. (批处理学习)句柄备份——个人见解之“>nul 3>nul“——记录学习过程(详细)
  4. linux命令:cp和scp
  5. NRF24L012.4G模块
  6. 过程计算机系统 pcs,过程控制系统(PCS)
  7. python中.mat的图像数据怎么转换为.npy的数据
  8. libusb的简单使用
  9. MVC框架的原理详解
  10. npm install 报错 Error: EACCES: permission denied解决方案