最近项目用到了蓝牙,需要蓝牙和外设的交互,基本的蓝牙知识网上有很多就不说了,但是我们遇到一个读取数据的问题:我们在与外设连接后需要需要获取外设的很多信息,比如外设扫描的WIFI列表,如果数据一次性返回过长会出现丢包的问题,经过测试一次性返回数据最多为134字节,超过就会丢包。
蓝牙读取外设信息的方式有两种:Notify方式和手动读取,一般蓝牙开发硬件会告诉你他们用的哪种方式传输
1.Notify方式
1540800042322.jpg
扫描到对应的特征值之后,读取之前需要添加监听,只要有数据就会执行
-
(void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(nonnull CBCharacteristic *)characteristic error:(nullable NSError *)error
直到读取完成。
2.手动读取
image.png
扫描到对应的特征值之后,读取之后执行
- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(nonnull CBCharacteristic *)characteristic error:(nullable NSError *)error
根据自己项目情况判断数据,如果184字节,继续执行
[peripheral readValueForCharacteristic:characteristic];
直到所有数据拼接是一个完整的json串
网友评论