BLE的中心模式的流程在前三篇文章中已经介绍完毕了,这篇文章主要是将开发过程中我个人遇到的一些需要注意的地方,还有一些其他可能会出现的问题,分享给大家。虽然不全面但是还是希望能够给大家起到一定的参考作用,以后再遇到新的问题还会不断的持续更新。大家也可以将自己的已经解决的或者是没解决的问题留言一下,大家可以一起做个交流,共同进步!
还是顺着这个流程往下说:
问题一:搜索不到蓝牙。
一般情况下很少会发生搜索不到蓝牙的这种情况的。。。。如果真有那么先用lightblue测试排除硬件问题,然后仔细检查代码吧骚年。。。一般代码逻辑没问题的话。首先检查在扫描蓝牙设备的时候是否设置了过滤条件,这个过滤条件是不是设置的有问题。其次再看是否是我们已经搜索到了,而是我们没有正确的去显示我们搜索到的设备名字。
问题二:连接不上蓝牙设备。
这个问题很完蛋了,都搜索到了为啥连接上不上呢,这时候最容易暴躁了,但是稳住不要慌。
1.当出现连接不上蓝牙设备的时候,如果没有打印报错信息。我们同样还是可以用lightblue先排除硬件问题,然后仔细检查一下代码。首先检查我们连接的时候是不是做了一些安全措施,这里一定要做一些安全措施,保证传入peripheral不能为空,还有就是传入的这个peripheral一定要有有效的信息,检查一下有没有设置代理啊等等。
2. 还有一种情况是有报错信息的,比如说:打印报错didFailToConnectPeripheral:Error Domain=CBErrorDomain Code=0 "Unknown error." UserInfo={NSLocalizedDescription=Unknown error.}
这种情况如果代码仔细检查过没有问题的话,那么就是你跟设备离得太远了,或者就是硬件的信号强度比较弱,一般靠近点,再次进行连接尝试。这只是其中的一种报错方式,还有一些其他的这里没有记录到,如果可以的话,以后会更新。
问题三:外设名字的显示问题。
蓝牙设备有本身的名字和广播名字之分。我们一般都会让其显示它的广播名字,因为这个可以设置,以便于我们区分是那个蓝牙设备:
我们可以在搜索到设备的回调方法中获取到蓝牙的广播名称,也就是LocalName
-(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI{}
这个方法中有一个参数的advertisementData这是一个字典,我们可以从中获取到广播信息
{ kCBAdvDataIsConnectable = 1;
kCBAdvDataLocalName = SimpleBLEPeripheral;//这个就是蓝牙设备的广播名字
kCBAdvDataServiceUUIDs =(FFF0);
kCBAdvDataTxPowerLevel = 0;
}
这个方法中还有另外一个参数RSSI:这里可以得到信号强度,这是一个负值,要是需要计算距离的话,这是需要根据具体的硬件来进行测试,再来确定计算公式的,网上也可以搜索到一些方法,可以搜索参考。
接下来说一下数据交互过程中可能出现的问题:
问题四:出现程序崩溃错误。
reason: 'Invalid parameter not satisfying: characteristic != nil’。不满足特征值不能为空的条件。
这种错误会出现在你写入数据的时候。
这种错误绝对是你没有扫描到服务和特征,你就直接向某个特征里边写入数据了,或者是发送命令。连接上设备之后,没有搜索到服务和特征的原因有很多,所以还要最大程度的避免这种崩溃,我是这么处理的,只有我搜索到需要的特征值的时候我才发出一个通知,告诉需要写入数据的地方,现在写入是安全的,比如说我们让按钮变为可点击,或者输入框变为可输入等等措施,来达到安全写入的目的。
问题五:出现打印报错。
:Reading is not permitted 读取是不被允许的。
这个错误一般出现在你读取数据,或者订阅数据收取失败的时候。
第一种情况好解决:那就是你写如数据的这个特征的属性只有写入没有读的属性,这个时候就是你特征用错了,更换使用正确的读写特征就好了。
第二种情况就是:如果你确定用的这个特征是正确的那么你就看一下是不是在和硬件通讯前,需要发一些握手数据,比如先发一个12345678的密码啊,什么的。问一下硬件那边。一般都是这里出了问题,所以说交互的时候出现问题什么的,一定要仔细阅读硬件给你的说明文档啊!
在BLE开发中可能会碰到各种各样的崩溃报错的问题,只靠我一个来把这些错误全部犯一遍,这也不可能实现,即使可能这也会是一个很长的时间,所以还是靠大家的力量尽可能的多收集一些问题,集中在一起,给大家做一个参考。还是那句话,少走弯路,共同进步!
网友评论