我一直在使用rn4020蓝牙模块的设备上工作。 我们需要更改输出并从设备读取输入。 我使用CoreBluetooth编写了一个代码,并在iOS上工作。我能够(在经过一番努力之后)将设备设置为命令模式并更改输出。
现在我想要的是读取输入(基本上是高和低)。 要使用以下代码设置输出:
-(void)OutputOn{
NSData *data = [@"|O,08,08" dataUsingEncoding:NSUTF8StringEncoding];
NSMutableData *mData = [NSMutableData dataWithData:data];
unsigned char f8[1] = "\r";
[mData appendBytes:f8 length:1];
[self.discoveredPeripheral writeValue:mData forCharacteristic:self.MLDPDataCharacteristic type:CBCharacteristicWriteWithResponse];
}
-(void)OutputOff{
NSData *data = [@"|O,08,00" dataUsingEncoding:NSUTF8StringEncoding];
NSMutableData *mData = [NSMutableData dataWithData:data];
unsigned char f8[1] = "\r";
[mData appendBytes:f8 length:1];
[self.discoveredPeripheral writeValue:mData forCharacteristic:self.MLDPDataCharacteristic type:CBCharacteristicWriteWithResponse];
}
就像我说的那样有效。现在,为了阅读输入,我已经编写了以下代码
-(void)ReadPIO2{
NSData *data = [@"|I,02" dataUsingEncoding:NSUTF8StringEncoding];
NSMutableData *mData = [NSMutableData dataWithData:data];
unsigned char f8[1] = "\r";
[mData appendBytes:f8 length:1];
[self.discoveredPeripheral writeValue:mData forCharacteristic:self.MLDPDataCharacteristic type:CBCharacteristicWriteWithResponse];
}
一旦我收到回调" didWriteValueForCharacteristic"我使用以下功能
[peripheral readValueForCharacteristic:characteristic];
在此之前,我确保特征是可读的(在这种情况下)。在回调函数" didUpdateValueForCharacteristic"我总是收到以下错误:
更新值回调错误错误域= CBATTErrorDomain代码= 2"不允许读取。" UserInfo = {NSLocalizedDescription =不允许阅读。}
总结一下,我似乎无法更新特征值,因为读取函数总是会产生错误。
如果我使用Microchip的SmartData应用程序,我可以使用前面提到的命令读取输出(参见附图)。
有人对如何阅读特征值有所了解吗?
由于