蓝牙的实现原理网上很多 在此就不一一描述了 有需要的可以看以下的文章学习
在ios 的开发中iBeacon和BLE的区别
iBeacon介绍
iOS蓝牙空中升级(固件升级)

本文主要是写实现过程:
github 上完整Demo地址,大家可以下载看看:ZYiBeacon

项目需求:
业主反馈拿出门卡开门这一动作繁琐,想要手机蓝牙连接门口机进行摇一摇或者点击对应的大门,实现开门功能。

实现步骤:

1.  扫描蓝牙设备,将设备列表展示
2.  连接其中一台设备
3.  连接成功后,向外设发送一串开锁指令
4.  发送成功后,断开和外设的连接

代码实现思路:
1. 需要蓝牙管理者mgr 管理者可以扫描外围设备 遵守CBCentralManagerDelegate协议
2. mgr扫描到外设,与外设进行连接断开连接信息交流等一系列反馈回调 需要遵循CBPeripheralDelegate协议

主要实现:
封装一套管理类,在工程的任何地方 只要shareSYSearchPeriphalsMgr 就可以得到管理者

+ (SYSearchPeriphalsMgr *) shareSYSearchPeriphalsMgr{static SYSearchPeriphalsMgr * mgr;if (mgr == nil) {mgr = [[SYSearchPeriphalsMgr alloc]init];dispatch_queue_t centralQueue = dispatch_queue_create("no.nordicsemi.ios.nrftoolbox", DISPATCH_QUEUE_SERIAL);mgr.bluetoothManager = [[CBCentralManager alloc] initWithDelegate:mgr queue:centralQueue];mgr.peripherals = [NSMutableArray array];mgr.orinPeripherals = [NSMutableArray array];mgr.filter = NO;//初始化mgr->UART_Service_UUID = [CBUUID UUIDWithString:uartServiceUUIDString];mgr->UART_TX_Characteristic_UUID = [CBUUID UUIDWithString:uartTXCharacteristicUUIDString];mgr->UART_RX_Characteristic_UUID = [CBUUID UUIDWithString:uartRXCharacteristicUUIDString];[mgr starScan];}return mgr;
}

是否扫描设备:

/** 是否扫描设备*/
- (int) scanForPeripherals:(BOOL)enable{if (self.bluetoothManager.state != CBManagerStatePoweredOn) {return -1;}dispatch_async(dispatch_get_main_queue(), ^{if (enable) {NSDictionary * options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES],CBCentralManagerScanOptionAllowDuplicatesKey, nil];if (self.filterUUID != nil) {[self.bluetoothManager scanForPeripheralsWithServices:@[self.filterUUID] options:options];}else{[self.bluetoothManager scanForPeripheralsWithServices:nil options:options];}self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(timerFireMethod:) userInfo:nil repeats:YES];}else{[self.timer invalidate];self.timer = nil;[self.bluetoothManager stopScan];}});return 0;
}

连接设备:

[self.bluetoothManager cancelPeripheralConnection:self.bluetoothPeripheral];// 通过UART服务查看是否是自己的蓝牙设备 是的话建立连接后 则可以向设备发送信息 不然设备会接收不到
// 设备接收到信息后,经过处理,验证成功后则开锁
/** 设备特征值*/
-(void) peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(nonnull CBService *)service error:(nullable NSError *)error{NSLog(@"向设备发送开锁指令 === %@",peripheral.name);if (error){NSLog(@"Characteristics discovery failed");NSLog(@"error : %@",error);}else{NSLog(@"Characteristics discovered");if ([service.UUID isEqual:UART_Service_UUID]) {CBCharacteristic *txCharacteristic = nil;for (CBCharacteristic *characteristic in service.characteristics){NSLog(@"Characteristics ==== %@ ",characteristic);if ([characteristic.UUID isEqual:UART_TX_Characteristic_UUID]){NSLog(@"TX Characteristic found");txCharacteristic = characteristic;}else if ([characteristic.UUID isEqual:UART_RX_Characteristic_UUID]){NSLog(@"RX Characteristic found");self.uartRXCharacteristic = characteristic;// 3. 向设备发送开锁指令// 发送数据[self send:@"1234567" withByteCount:7];NSString *command = self.sendText;[self send:command withByteCount:20];NSLog(@"向设备发送开锁指令 === %@",command);// 4. 失去设备连接[self disconnectDevice];}}}}}

iOS - 蓝牙开门智能门锁相关推荐

  1. 低功耗蓝牙模块智能门锁应用案例

    要说我们接触最多的智能产品应该就是手机吧,随着科技的不断发展,各种各样的智能产品现在都前赴后继的出现在我们眼前了,其中智能家居的迭代也如雨后春笋一般.层出不穷的产品除了让用户感受到科技感以外也便捷了生 ...

  2. iOS蓝牙开发---CoreBluetooth[BLE 4.0] 初级篇[内附Demo地址]

    一.蓝牙基础知识 (一)常见简称 1.MFI  make for ipad ,iphone, itouch 专们为苹果设备制作的设备,开发使用ExternalAccessory 框架(认证流程貌似挺复 ...

  3. iOS蓝牙原生封装,助力智能硬件开发

    代码地址如下: http://www.demodashi.com/demo/12010.html 人工智能自1956年提出以来,一直默默无闻,近年来人工智能的发展得到重视逐渐发展起步,智能硬件.智能手 ...

  4. iOS蓝牙BLE4.0通信功能

    概述 iOS蓝牙BLE4.0通信功能,最近刚学的苹果,为了实现蓝牙门锁的项目,找了一天学习了下蓝牙的原理,亲手测试了一次蓝牙的通信功能,结果成功了,那么就把我学习的东西分享一下. 详细 代码下载:ht ...

  5. iOS 蓝牙开发 BabyBluetooth蓝牙库介绍

    BabyBluetooth 是一个最简单易用的蓝牙库,基于CoreBluetooth的封装,并兼容iOS和Mac OS X. 特色: 基于原生CoreBluetooth框架封装的轻量级的开源库,可以帮 ...

  6. 今日分享-ios蓝牙

    1. ios蓝牙库的基本介绍-CoreBluetooth 2. CoreBluetooth使用详解 3. 相关问题 1. ios蓝牙库的基本介绍-CoreBluetooth 首先熟悉相关名词:Cent ...

  7. iOS 蓝牙开发资料记录

    一.蓝牙基础认识:   1.iOS蓝牙开发:   iOS蓝牙开发:蓝牙连接和数据读写   iOS蓝牙后台运行  iOS关于app连接已配对设备的问题(ancs协议的锅)          iOS蓝牙空 ...

  8. iOS蓝牙学习(一)

    最近在学蓝牙开发,就去网上收集了一些文章看,自己做了一个总结,下面就分享出来. 前提: iOS蓝牙开发使用的API是:Core Bluetooth 正常情况下需要两台真实的蓝牙4.0设备(当然也可以使 ...

  9. IOS蓝牙4.0与读卡器通讯

    IOS学习也一段时间了,该上点干货了.前段时间研究了一下IOS蓝牙通讯相关的东西,把研究的一个成果给大家分享一下. 一 项目背景 简单介绍一下做的东西,设备是一个金融刷卡器,通过蓝牙与iphone手机 ...

最新文章

  1. VC知识点:关于没有提示的内存泄露
  2. php 当地天气预报,PHP实现采集中国天气网未来7天天气
  3. 后处理安装_你所不了解的国六后处理
  4. Monkey测试简介
  5. gomod和govendor的简单理解
  6. matlab读取suffer,MATLAB调用surfer时出错
  7. 【最好的伪原创工具】特别是你的描述中的关键字布局
  8. 高德车道级导航已上线8城 新增支持小米11 Pro
  9. 案例:对比使用Java代码与EL表达式获取信息
  10. 面向过程(或者叫结构化)分析方法与面向对象分析方法到底区别
  11. 《SQL 入门经典》读书笔记(1)
  12. Java 简单TCP文件传输
  13. 何为编码 GBK 和 UTF8编码?GBK,GB2312与区位码有何关系?
  14. 西瓜创客的python_西瓜创客Python客户端
  15. 【canvas 太阳系的动画】
  16. 《第一行代码》总结之简介、Activity(一)
  17. MyBatis 的基本工作原理
  18. 【Mac新技能】教你告别单调的Mac电脑自带系统提示音!
  19. NLPCDA —— 基于SimBERT的相似文本生成
  20. android 广播监控手机电量

热门文章

  1. 阿里“钉钉”挑战企业社交
  2. 关于软件工程----一线城市与二三线城市的区别
  3. html那些标签可以实现页面布局,网页的布局一般用什么来实现
  4. 自学C++编程,掌握这三项技能就可以工作了
  5. RK3128 Linux 源代码,firefly rk3128 linux 内核适配问题
  6. [ctf.show.reverse] re2
  7. brew Error: Cask ‘adoptopenjdk8‘ is unreadable
  8. 即使面对好莱坞,周星驰也可以五次[视而不见]
  9. 转:网络安全法重点解读
  10. 【场景化解决方案】慧穗云开票,让钉钉与业务数据流转更灵活