闲来无事,稳固下对蓝牙开发的知识点,顺便记录下博客,仅供参考。纯手打,请轻喷。
-
iOS蓝牙开发分为手机作为Central(中心设备),Peripheral(外设)两种情景,其中中心设备和外设传输数据,还有一种名字叫做,上行、下行。 本文主要讲述手机作为Central的开发情景,并且只针对单一Peripheral连接,不过会讲解到连接不同型号的Peripheral。
- 关于蓝牙开发,除了中心设备和外设需要搞清楚以为,还要明白几个名词,Service(服务)、Characteristic(特征)。针对Peripheral来讲,一个Peripheral有多个Service,每个Service有多个Characteristic,整体结构类似于一个二维数组。参考API可以证明上述论点,也可以nRF Connect、LightBlue等第三方蓝牙调试工具。
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(nullable NSError *)error; - (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(nullable NSError *)error;
- 业务需求中,基本都需要连接指定的Per,针对该需求,安卓可以直接获取Per信息的Mac地址,但是iOS并不支持,针对这种情况,可以让硬件方面将mac地址加入广播中,当手机扫描到该per时会触发回调。可以通过回调中的“advertisementData”获得mac,进行匹配操作
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI;
- 实际开发中,大多需要保持对同一设备的稳定连接,以及自动连接。可以根据项目需求情况,来决定采用什么方式,我先简单阐述下目前我发现的方案,后面会详细讲解。①保存mac,每次启动蓝牙的时候扫描匹配 ②断开连接的时候,调用请求连接方法
- 可能部分app的业务需求,需要app在后台长期和蓝牙进行数据交互,针对这种需求,建议 per与app间建立心跳连接,频率我采用的是一分钟。
- 关于数据传输,其实类似和后台的数据请求,主要区别的是数据格式的问题。 数据传输中,需要注意的是,当向per传数据时,Characteristic是否是response或者是withouResponse,如果写错,是无法正常传输的。
- 数据传输中,请注意数据长度的问题,适当进行分包操作。
- 关于订阅(通知),请注意不要重复订阅。
- 固件升级(DFU),主要分为两种方式,看与硬件厂商的协定。第一种是DFU升级,直接通过DFU官方提供的第三方进行升级,第二种是根据协议,将固件包通过分包方式发送到per
- 需要注意CBCentralManager初始化方式,CBCentralManagerOptionRestoreIdentifierKey 涉及到app唤醒操作,请注意使用。
- 固件升级操作,可能会导致mac地址变化,具体和厂商协定。
是我写的不好吗???都没人看第二篇的吗???
纯手打,不足之处请指出,谢谢。
具体开发讲解。请看第二篇~