1. 前期准备工作:查看coreBlueTooth框架,查看一些蓝牙名词:Central(中心设备)、Peripheral(外围设备)、advertisementData(广播数据)、-RSSI: 信号强弱值、Services(服务)、Characteristic(特征);
  2. 实例化对象以及遵守代理

    

.1设置对象

    @property (strong, nonatomic) CBCentralManager *CBManager;

    @property (strong, nonatomic) CBPeripheral *peripheral;

             遵守对应的代理:CBCentralManagerDelegate,CBPeripheralDelegate

    .2实例化中心设备

    //options 后代表的是是否开启alert提示

    self.CBManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil options:@{@"CBCentralManagerOptionShowPowerAlertKey":@NO}];

代理方法实现监控蓝牙开启状态以及连接发送数据
    .1实时监控蓝牙打开状态     - (void)centralManagerDidUpdateState:(CBCentralManager *)central{      switch (central.state) { case :     // 第一个参数填nil代表扫描所有蓝牙设备,第二个参数options也可以写nil,调用下方方法后会开始扫描周围蓝牙设备开始调用3.2中代理方法 [self.CBManager scanForPeripheralsWithServices:nil options:@{CBCentralManagerScanOptionAllowDuplicatesKey : [NSNumber numberWithBool:YES]}]; break; } }     3.2 开始扫描数据,扫描到对应数据后停止扫描     -(void)centralManager:(CBCentralManager*)central didDiscoverPeripheral:(CBPeripheral*)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI { //获取广播数据中的名称 NSString*localName=[advertisementData valueForKey:@"kCBAdvDataLocalName"]; if ([localName hasPrefix:@"HC"]) { _peripheral = peripheral; [self.CBManager connectPeripheral:_peripheral options:nil]; // 扫描到设备之后停止扫描 [self.CBManager stopScan]; } }     .3连接到当前设备     //连接外设成功,开始发现服务     - (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral {      NSLog(@"成功连接 peripheral: %@ with UUID: %@",peripheral,peripheral.identifier);      // 连接设备之后设置蓝牙对象的代理,扫描服务      [self.peripheral setDelegate:self];      [self.peripheral discoverServices:nil];      NSLog(@"扫描服务"); }     3.3 发现服务,然后根据服务查找对应的特征     //已发现服务     -(void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error {      NSLog(@"发现服务.");      for (CBService *s in peripheral.services) {      if ([s.UUID.UUIDString isEqual:ServicesUUID]) {      [peripheral discoverCharacteristics:nil forService:s]; } } }     3.4 根据服务UUID查询对应服务的特征     -(void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error {      for (CBCharacteristic *c in service.characteristics) {      if ([c.UUID.UUIDString isEqual:CharacteristicsUUID]) {     self.characteristic = c;     //把数据进行转NSData编码,转数据成功后写数据给蓝牙外设 NSData *data = [self returnDataWithKey:self.BleId]; [_peripheral setNotifyValue:YES forCharacteristic:c]; [_peripheral writeValue:data forCharacteristic:self.characteristic type:CBCharacteristicWriteWithoutResponse]; } 3.5 读取蓝牙外设返回的数据 //获取外设发来的数据,不论是read和notify,获取数据都是从这个方法中读取。 - (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error { if ([characteristic.UUID.UUIDString isEqual:CharacteristicsUUID]) { NSData * data = characteristic.value; ///<d6c8d6c8 40010000 00000000 00000000 00000000> 成功返回数据 ///<d6c8d6c8 80010000 00000000 00000000 00000000> 校验和错误返回数据 // 比对data数据是否是返回成功的data数据或者失败的数据 ,成功返回,提示用户开门成功 }
  1. 遇到的问题:

4.1连接蓝牙设备发送数据,蓝牙设备收不到,具体原因是不清楚需要连接的硬件具体的服务以及服务对应的特征;

4.2 发送数据是需要发送先把当前的16进制数据转byte,然后转NSData类型数据;

4.2.1 获取到门锁上15位ID号,15位ID字符转16进制数据:

- (NSString *)hexStringFromString:(NSString *)string

4.2.2 转换好的15位ID号进行校验和处理,处理后拼接字符串,把拼接好的16进制字符串转byte然后再转NSData类型数据:

- (NSData *)returnDataWithKey:(NSString *)key

4.2.3 NSData数据转NSString类型:

- (NSString *)convertDataToHexStr:(NSData *)data

4.2.4 获取蓝牙外设发送的数据时,每次接收最大为20字节,获取时需要多次获取拼接data,然后再与对应的协议进行对比;

iOS蓝牙交互(4.0)的更多相关文章

  1. iOS蓝牙开发(4.0)详解

    最近由于项目需要, 一直在研究蓝牙4.0,在这儿分享给大家, 望共同进步. 一.关于蓝牙开发的一些重要的理论概念: 1.当前ios中开发蓝牙所运用的系统库是<CoreBluetooth/Core ...

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

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

  3. iOS蓝牙4.0开发

    文/starfox寒流(简书作者)原文链接:http://www.jianshu.com/p/974d165f78b5著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. iOS 蓝牙4.0 ...

  4. https://github.com/coolnameismy/BabyBluetooth github上的一个ios 蓝牙4.0的库并带文档和教程

    The easiest way to use Bluetooth (BLE )in ios,even bady can use. 简单易用的蓝牙库,基于CoreBluetooth的封装,并兼容ios和 ...

  5. iOS蓝牙开发(二)蓝牙相关基础知识

    原文链接: http://liuyanwei.jumppo.com/2015/07/17/ios-BLE-1.html iOS蓝牙开发(一)蓝牙相关基础知识: 蓝牙常见名称和缩写 MFI ====== ...

  6. ios 蓝牙相关

      ios蓝牙开发项目实战 -(附小米手环实例)   前言 最近一直在开发关于蓝牙的功能,本来是不想写这一篇文章,因为网上关于ios蓝牙开发的文章实在太多了,成吨成吨的文章出现,但是很遗憾都只是一些皮 ...

  7. iOS蓝牙BLE开发

    蓝牙是一个标准的无线通讯协议,具有设备成本低.传输距离近和功耗低等特点,被广泛的应用在多种场合.蓝牙一般分为传统蓝牙和BLE两种模式:传统蓝牙可以传输音频等较大数据量,距离近.功耗相对大:而BLE则用 ...

  8. H5与安卓、IOS的交互,判断微信、移动设备、安卓、ios

    一.通过用户代理可以判断网页当前所在的环境 var browser={ versions:function(){ var u = navigator.userAgent, app = navigato ...

  9. Unity3D与iOS的交互

    1. 关于Unity3D Unity3D(以下简称U3D)是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开 ...

随机推荐

  1. nopCommerce 3.9 大波浪系列 之 可退款的支付宝插件(下)

    一.回顾 支付宝插件源码下载地址:点击下载 上篇介绍了使用支付宝插件进行支付,全额退款,部分退款还有插件的多店铺配置,本文介绍下如何实现的. 二.前期准备 插件主要有3个功能: 多店铺插件配置 支付功 ...

  2. 双向循环链表(C语言描述)(三)

    代码清单 // linkedlist.h #ifndef __LINKEDLIST_H__ #define __LINKEDLIST_H__ #include <assert.h> #in ...

  3. LFLiveKit架构简介

    LFLiveSession LFLiveSession 是整个sdk的核心,提供对外部的主要接口.主要功能有:管理推流开关.管理音视频录制及渲染.管理录制渲染后的音视频编码.管理编码后的数据上传.管理 ...

  4. [入门向选讲] 插头DP:从零概念到入门 (例题:HDU1693 COGS1283 BZOJ2310 BZOJ2331)

    转载请注明原文地址:http://www.cnblogs.com/LadyLex/p/7326874.html 最近搞了一下插头DP的基础知识……这真的是一种很锻炼人的题型…… 每一道题的状态都不一样 ...

  5. OS作业模拟SJF和FCFS

    一个OS的作业, 用于模拟短作业优先 和 先来先服务两种作业调度方式. #!/usr/bin/python3.5 ## Modify the SJF and FCFS algorithm in the ...

  6. 01-artDialog4.1.7常用整理

    关闭弹出框的几种常见方法: 1,artDialog可以通过鼠标双击关闭对话框,esc关闭对话框等.为了在关闭对话框要执行某一方法,不能仅仅在弹框中的关闭按钮中写.这时提供了一个函数:close.无论在 ...

  7. 软件测试学习LINUX常用命令

    测试初学者常用的LINUX命令,不懂得的可加Q群答疑649017887 一.常用管理命令:1. shutdown -h now 关机命令2. shutdown -r now (reboot) 立即重启 ...

  8. 【Shell Basic】Shell脚本编写规范

    shell脚本需要有较高的实用性.可维护.可阅读.方便他人阅读,因而需要建立一定的规范来操作 dream361@master:~$ cat test2.sh #!/bin/bash 所使用的bash程 ...

  9. Redis入门 (CentOS7 + Redis-3.2.1)

    1. 编译安装1.1 下载redis # cd /tmp/# wget http://download.redis.io/releases/redis-3.2.1.tar.gz# tar zxvf r ...

  10. 接口测试之postman简介

    很长时间没有用postman了,今天趁着有点时间,对这个接口测试的利器从以下几个方面简单回顾下. 1.postman介绍 2.Postman安装 3.Postman建立.管理.回放请求 4.Postm ...