iOS 关于蓝牙4.0 BLE 的一点点总结

CoreBluetooth之数据的读取与发送 此文要理清的的问题是:使用CoreBluetooth框架发送与读取数据。数据传输于  CBCentralManager CBPeripheral 之间。 首先明确iDevice是客户端,即 CBCentralManager端,是中心。CBPeripheral 为服务器端,是外围设备。然后按照逻辑一步步理下去: 1.首先工程倒入CoreBluetooth框架: #import ,这就是蓝牙开发 阅读详情
蓝牙知识从零开始,摸索了一年多,做出了一堆比较渣的东西,觉得有些知识还是有必要记录一下的

蓝牙4.0(低功耗蓝牙)
首先,官方的蓝牙API有几个比较重要的代理方法得实现:

  • 检测当前蓝牙状态,创建CBCentralManager管理类,遵循其代理时,就会触发以下的监听
//检测当前蓝牙状态
- (void)centralManagerDidUpdateState:(CBCentralManager *)central
{
    switch (central.state) {
        case CBCentralManagerStatePoweredOn:
        {
            NSLog(@"Bluetooth is currently powered on.");
        }
            break;
        case CBCentralManagerStatePoweredOff:
        {
            NSLog(@"Bluetooth is currently powered off.");
        }
            break;
        case CBCentralManagerStateUnauthorized:
        {
            NSLog(@"The application is not authorized to use the Bluetooth Low Energy Central/Client role.");
        }
            break;
        case CBCentralManagerStateUnsupported:
        {
            NSLog(@"The platform doesn't support the Bluetooth Low Energy Central/Client role.");
        }
            break;
        case CBCentralManagerStateResetting:
        {
            NSLog(@"The connection with the system service was momentarily lost, update imminent.");
        }
            break;
        case CBCentralManagerStateUnknown:
        {
            NSLog(@"State unknown, update imminent.");
        }
            break;
        default:
            break;
    }
}
  • 发现蓝牙设备,一旦有CBPeripheral被搜寻到,这个代理方法被调用
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI{
    //在这里可以获取到发现的设备的信息,例如名字和标识等;也可以通知业务那边,已经发现了符合的设备
    NSLog(@"发现蓝牙:[名字:%@](标识:%@)",peripheral.name,peripheral.identifier);
    **需要注意的是,发现的peripheral.identifier是NSUUID类型,需要做处理来使用或者保存(记住这个标识可以在下一次发现时自动;连接)**
   //连接发现的蓝牙设备
   self.peripheral = peripheral;
   [self.BLEManager connectPeripheral:self.peripheral options:nil];
}
  • 连接上蓝牙,下面的connect回调会告诉我们连接的结果
- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral
{
    //一定要设置代理,否则下面的回调接收不到
    [self.peripheral setDelegate:self];
    //让peripheral发现自己的服务
    [self.peripheral discoverServices:@[[CBUUID UUIDWithString:ServiceUUID]]];//这里可以指定需要发现的服务,也可以为nil,如果为空就是发现所有的
}
  • 断开蓝牙,下面的didDisconnect回调会告诉我们断开的结果
- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error{
    NSLog(@"!!!!!!!!!!蓝牙断开!!!!!!!!");
    //在这里做蓝牙断开的处理
}
  • 蓝牙连接失败
- (void)centralManager:(CBCentralManager *)central didFailToConnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error
{
    NSLog(@"didFailToConnectPeripheral【%@】",error);
}
  • 发现设备的服务,连上蓝牙后,发现设备的服务会回调到下面这个方法
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error
{
    if (error) {
        NSLog(@"%s,error=%@",__PRETTY_FUNCTION__,error);
    } else {

        for (CBService *service in peripheral.services) {
            NSLog(@"发现UUID:[%@]",service.UUID);
            if ([service.UUID isEqual:[CBUUID UUIDWithString:ServiceUUID]]) {
                //读取特征,筛选到要使用的服务,去发现特征,每个服务一般都有多个特征,它们的值不一样,用途也不一样,这个看设备的指定
                [self.peripheral discoverCharacteristics:@[[CBUUID UUIDWithString:Characteristic1UUID]] forService:service];
            }
        }
    }
}
  • 发现服务中的特征,发现设备服务中的特征后会回调到下面这个方法
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error
{
    //这里边就可以对特征做一些操作了,例如读设备的数据或者是向设备写入数据,发送指令
    for (CBCharacteristic *characteristic in service.characteristics) {
         if ([characteristic.UUID isEqual:[CBUUID UUIDWithString:Characteristic1UUID]]) {
         **特别重要:特征分为两种,一种是设置为通知,有更改,自动更新,一种是要订阅的,value需要自己提取**
         self.characteristic = characteristic;
         [self.peripheral setNotifyValue:YES forCharacteristic:self.characteristic];
         //[self.peripheral readValueForCharacteristic:self.characteristic];

        [self.peripheral writeValue:data forCharacteristic:self.characteristic type:CBCharacteristicWriteWithResponse];
         }
     }
}
  • 接收特征返回的数据,向特征获取数据或者是写入命令,设备底层接收到了,会回调回来(注:并不是所有指令都会有数据返回,这个要看蓝牙底层的实现)
- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
{
//这里能拿到需要的东西
NSData *data = [characteristic value];
}
  • 更新特征的通知状态(注:必须在这边设置读取特征的值,否则特征值更新不会调用返回值的方法)
- (void)peripheral:(CBPeripheral *)peripheral didUpdateNotificationStateForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
{
    if (error) {
        NSLog(@"%s,%@",__PRETTY_FUNCTION__,error);
    }

    //已经发送通知
    if (characteristic.isNotifying) {
        //NSLog(@"Notification began on %@",characteristic);
        [peripheral readValueForCharacteristic:characteristic];
    } else {

    }
}

以上只是个人在蓝牙4.0开发中的一点点见解,不喜勿喷,写得不是很好,可能有错误或者漏洞,恳请大神斧正。可能还有一些开发过程中遇到的问题没有写上,如有需要交流的童鞋可以留言给本人,共同学习进步。

iOS开发 之 可穿戴设备 蓝牙4.0 BLE 开发 1 前言当前有越来越多的可穿戴设备使用了蓝牙4.0 BLE(Bluetooth Low Energy)。对于iOS开发而言,Apple之前专门推出CoreBluetooth的Framework来支持BLE的开发。对于硬件开发有了解的朋友应该知道,在之前使用低版本的蓝牙的设备,要连接到iOS设备上,需要注册MFI,拥有MFI协议才能进行相应的开发。如果大家关注我之前对LEGO EV3的研究,就可以发现 阅读详情

相关推荐

iOS开发之蓝牙4.0 -- BLE开发

前言—— 常用概念用语: MFI ( make for ipad ,iphone, itouch)  -------- 专们为苹果设备制作的设备 BLE (buletouch low energy)                  --------  蓝牙4.0设备因为低耗电,所以也叫做BLE peripheral                             

xinzhaoyu的博客 3084

iOS 蓝牙开发基础

参考SDK:Core Bluetooth Programming Guide1,框架总览 2,中心和外设 中心:需要数据方 外设:提供数据方3,中心,外设,外设数据的表示 3.1 中心侧对象 3.2 外设侧对象 4,中心侧任务 4.1 建立中心管理者对象 myCentralManager = [[CBCentralManager alloc] initWithDel

阿党的专栏 642

iOS蓝牙BLE4.0通信功能

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

findhappy117的博客 977

蓝牙开发总结

蓝牙开发总结 最近项目中的一个功能需要手机通过蓝牙设备与硬件通讯,先就本篇文章记录一下开发过程中遇到的问题以及上架注意事项。本篇文章的代码是把蓝牙作为中心模式去连接外设设备使用的。 遇到的问题 自定义蓝牙权限未开启提醒 系统的提示只有在运行使用时候会提醒权限,如果此时用户没有去开启蓝牙,在不重启应用的情况下是不会在提醒第二次的。 解决办法:初始化蓝牙的时候关闭系统弹窗,在需要检测...

WJ的博客 1018

Android 低功耗蓝牙BLE连接通信

简介 蓝牙(Bluetooth®):是一种无线技术标准,可实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换(使用2.4—2.485GHz的ISM波段的UHF无线电波)。蓝牙技术最初由电信巨头爱立信公司于1994年创制,当时是作为RS232数据线的替代方案。蓝牙可连接多个设备,克服了数据同步的难题。 蓝牙 4.0 蓝牙技术联盟于2010年6月30日正式推出蓝牙核心规格4.0 。它包...

hwx865的专栏 3161

macOS-BLE蓝牙4-0开发

macOS-BLE蓝牙4.0开发 !!!中心模式 !!! macOS的BLE程序代码和iOS差不多,只需要修改一些UI组件就可以把iOS的代码放在macOS上使用,下面列举移除不同之处。 1 蓝牙状态一直CBManagerStateUnsupported的问题 在Xcode中打开targets中的沙盒蓝牙设置,具体路径: TARGETS - Signing & Capanilities - App Sandbox - Handware - Bluetooth info.plist 里面添加NSBl

ForgetSou | Blog 1621

Bluetooth Packet Structure

Bluetooth Packet Structure The Bluetooth®Special Interest Group (SIG)[1]and[2]defines different packet structures for Bluetooth low energy (BLE) and Bluetooth basic rate/enhanced data rate (BR/EDR) devices. BLE Packet Structure Bit Ordering in BLE ...

生命不息,奋斗不止! 1347

蓝牙透传模块芯片的BLE和SPP有什么区别?如何理解

蓝牙透传芯片的BLE和SPP有什么区别?如何理解呢? 首先要明确几个关键词,蓝牙芯片,蓝牙透传,蓝牙BLE,以及蓝牙SPP

qyvhome的博客 9368

【iOS官方文档翻译】iOS的蓝牙连接、数据接收及发送

翻译iOS官方蓝牙开发文档,实现了iOS设备对外围蓝牙设备的搜索、连接、数据的接收及发送。

dolacmeng的专栏 1万+

DFU固件升级 蓝牙BLE4.0

最近研究DFU固件升级,由于网上的资源非常少,也走了很多弯路。经过一段时间的研究,写出了一个demo测试可用。可以使用2019最新的官方库。希望能够帮到大家。 进入正题,现在的DFU固件升级基本都是使用NRF的github开源库,公司和厂商也有合作,中国区只有代理,如果有技术问题可以发邮件给欧洲的厂商。但是经过最终确认厂商不提供技术支持,所以只能自己翻文档,看代码了。官方提供的资源如下 1&g...

lee727n的博客 4080

iOS开发之蓝牙使用

本文介绍了蓝牙的简单使用 一.蓝牙概念 蓝牙2.0为传统蓝牙,传统蓝牙也称为经典蓝牙. 蓝牙4.0因为低耗电,所以也叫做低功耗蓝(BLE).它将三种规格集一体,包括传统蓝牙技术、高速技术和低耗能技术. 二.BLE支持两种部署方式 双模式 低功耗蓝牙功能集成在现有的经典蓝牙控制器中,或在现有经典蓝牙技术芯片上增加低功耗堆栈,整体架构基本不变,因此成本增加有限.

路漫漫其修远兮,吾将上下而求索. 2932

蓝牙BLE(协议栈、OSAL、蓝牙APP工具)

蓝牙配对和绑定 蓝牙4.0 BLE 信道(RF Channel) BLE协议栈分层 PHY层(Physical layer 物理层) LL层(Link Layer 链路层) HCI层(Host controller interface 主机控制接口层) L2CAP层(Logic link control and adaptation protocol 逻辑链路控制和自适应协议) SMP层(Secure manager protocol 安全管理协议) GAP层(Generic access profile

zhuguanlin121的博客 3万+

iOS开发者蓝牙BLE4.0技术实践范例

蓝牙低功耗技术,即Bluetooth Low Energy(BLE),是蓝牙技术的一个子集,专为低功耗通信而设计。BLE自推出以来,一直是可穿戴设备和物联网应用中的关键技术之一。

weixin_42430341的博客 946

iOS - 蓝牙BLE4.0开发

蓝牙BLE4.0开发

chaneylauok的博客 1636

BLE测试程序.zip

iOS 低功耗BLE 蓝牙连接

【论文泛读|附源码】如何进行动力学重构? 神经网络自动编码器结合SINDy发现数据背后蕴含的方程

这一篇文章叫做 **数据驱动**的**坐标发现与方程发现算法**。想回答的问题很简单,就是根据数据写方程。 想想牛顿的处境,如何根据各种不同物体下落的数据,写出万有引力的数学公式的。这篇文章就是来做这件事的。当然,这篇论文并没有从牛顿视角,完全去思考牛顿所想。而是利用现有的**深度学习技术** 和 **动力学重构的方法** 。提出了一种框架,基于现有的计算机技术,去发现物质运动背后的物理规律。 这里直接给出这篇方法的核心思路图,我们后面会逐个讲解。

qq5q13638的博客 2456

IOS BLE4.0蓝牙和外设连接和收发数据的流程

前言: 苹果在IOS 6系统之后开始支持BLE 4.0,iPhone4s,iPod 5,iPad 3等之后的机型开始内嵌BLE4.0硬件,因此在开发前请先确认你的开发环境符合上述要求,并且苹果在BLE4.0之后,对外部的连接设备已经不在需要MFI认证了,当然你的外设肯定得要有蓝牙4.0模块了 综述: 开发BLE4.0的App,你需要在你的项目里面导入框架: CoreBlue

春风得意,马蹄仍急;少年豪情,一笑难回。 1万+

【数据分析八步法】将模糊需求转化为可验证的分析问题

国内访问Huggingface官方源常遇网络问题,可通过切换国内镜像提升下载速度。三种配置方式:1)设置HF_ENDPOINT环境变量;2)在from_pretrained中直接指定镜像参数;3)修改本地Huggingface配置文件。常用镜像包括hf-mirror.com、阿里云ModelScope和清华镜像源。注意镜像同步延迟、私有模型限制,建议配合huggingface-cli工具使用,必要时取消代理设置。合理配置镜像源可显著改善Huggingface生态使用体验。

Mr数据杨 858

Arduino使用蓝牙BLE模块

通过这篇文章,你可以了解到以下内容: 什么是蓝牙BLE 4.0 如何设置蓝牙BLE 的 AT 指令 Arduino 连接蓝牙 BLE 与 iOS 设备互联实践 了解 BLE 4.0BLE 全称是 Bluetooth Low Energy 低功耗蓝牙的缩写,是蓝牙 4.0 的一个分支。 BLE 支持 iPhone4s 以上的 iOS 设备,并且无需做 MFI 认证,因此对于个人开发者及一些中

SpeculateCat 1万+

(八)DDR_PHY架构及功能——(PUB组成、初始化及Training流程、Clock关系)

文章目录一、DDR_PHY结构组成1.1、DDR Memory子系统1.2、DDR_PHY架构组成1.3、PUB模块功能实现流程1.3.1、DDR系统初始化流程1.3.2、PLL初始化流程 一、DDR_PHY结构组成 1.1、DDR Memory子系统   Memory子系统主要由DDR Controller和DDR_PHY(含DDR_IO)两个部分组成。DDR Controller主要承担其它子系统(如CPU)与Memory子系统进行数据交互时的传输效率及调度,DDR_PHY主要负责数据交互过程中的传输速

Mr.翟的博客 1万+

玩转Docker小游戏项目系列: Docker部署中国象棋网页小游戏

玩转Docker小游戏项目系列: Docker部署中国象棋网页小游戏

jks212454的博客 440

iOS蓝牙Ble开发

最近做的项目主要是iphone与平常的一些设备进行蓝牙连接,通信等功能。所以整理了一下蓝牙方面的一些知识。 iOS蓝牙开发主要有种方式。

奋斗的菜鸟ing 5500

YOLOv11改进 | 检测头篇 | 利用动态蛇形卷积DySnakeConv改进yolov11分割检测头(全网独家首发,Segment)

本文给大家带来的最新改进机制是一种我进行优化的专用于分割的检测头,在分割的过程中,最困难的无非就是边缘的检测,动态蛇形卷积(Dynamic Snake Convolution)通过自适应地聚焦于细长和迂回的局部结构,准确地捕捉管状结构的特征。这种卷积方法的核心思想是,通过动态形状的卷积核来增强感知能力,针对管状结构的特征提取进行优化,所以将这个卷积针对于YOLOv11的分割头进行融合是非常合适的,当然本文的检测头也支持用于目标检测,但是我将其设计出来是主要为了分割的读者使用的。

Snu77的博客 3431
上一篇: AFNetWorking3.0 实现同步请求
下一篇: iOS10 审核 NSCameraUsageDescription 等描述问题
Phyky
博客等级 码龄12年 8粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值