最近做了个智能硬件的项目,具有蓝牙功能。在这里做个总结,一方面查漏补缺,一方面希望能有助于有这方面需求的人。我的项目是以智能硬件作为外设的,所以只介绍这部分。鉴于文章篇幅问题,分为两篇,第一篇介绍蓝牙的连接和发送数据,第二篇介绍固件升级,这是第一篇。
一.基本介绍
CBCentralManager:中心,连接蓝牙外设的设备
CBPeripheral:外设,一个外设可以有多个服务,项目中我的智能硬件作为外设,连接蓝牙之后,在代理方法- (void)centralManager:(CBCentralManager*)central didDiscoverPeripheral:(CBPeripheral*)peripheral advertisementData:(NSDictionary*)advertisementData RSSI:(NSNumber*)RSSI中可以发现外设
CBService:服务,一个服务可以有多个特征,在代理方法- (void)peripheral:(CBPeripheral*)peripheral didDiscoverServices:(NSError*)error中发现服务
CBCharacteristic:外设的特征 代理方法- (void)peripheral:(CBPeripheral*)peripheral didDiscoverServices:(NSError*)error
二.代码部分
主要操作都封装在一个model类中
(1)BlueToothModel.h文件,用到的block和代理方法,都有注释
主要用到的两个方法:
(2)BlueToothModel.m里边主要是一些代理方法
蓝牙状态的监听:-(void)centralManagerDidUpdateState:(CBCentralManager*)central
扫描到外设之后进行连接:
外设和中心 连接成功,扫描services:- (void)centralManager:(CBCentralManager*)central didConnectPeripheral:(CBPeripheral*)peripheral
发现服务:- (void)peripheral:(CBPeripheral*)peripheral didDiscoverServices:(NSError*)error,发现之后调用代理方法发现服务特征 [peripheraldiscoverCharacteristics:nil forService:service];
发现特征:- (void)peripheral:(CBPeripheral*)peripheral didDiscoverCharacteristicsForService:(CBService*)service error:(NSError*)error
从外设读取数据- (void)peripheral:(CBPeripheral*)peripheral didUpdateValueForCharacteristic:(CBCharacteristic*)characteristic error:(NSError*)error
外设断开连接:- (void)centralManager:(CBCentralManager*)central didDisconnectPeripheral:(CBPeripheral*)peripheral error:(nullableNSError*)error
发送数据:
向外设发送数据之后,会有回调函数检测是否发送成功,- (void)peripheral:(CBPeripheral*)peripheral didWriteValueForCharacteristic:(CBCharacteristic*)characteristic error:(NSError*)error,如果发送成功,在外设读取数据的代理方法中可以收到外设传回的数据
三.开发中遇到的一些问题
1.由于我的外设需要在整个工程中响应,所以把BlueToothModel的初始化方法是放在入口类里边的。
2.所有外设的uuid是一样的,这个起初我以为是不一样
3.外设连接成功之后,要停止扫描外设
4.向外设发送命令的时候,需要把命令字符串转换成16进制数据
结束语:第一次写文章,手抖,写的不好,有问题的随时联系
网友评论