Ios 使用CoreBluetooth从RN4020读取特性

Ios 使用CoreBluetooth从RN4020读取特性,ios,objective-c,core-bluetooth,Ios,Objective C,Core Bluetooth,我一直在开发一款使用rn4020蓝牙模块的设备。 我们需要更改输出并从设备读取输入。 我已经用CoreBluetooth编写了一个代码,并在iOS上实现了这一点。我能够(经过一些努力)将设备设置为命令模式并更改输出 现在我想要的是读取输入(基本上是高电平和低电平)。 要设置输出,我使用以下代码: -(void)OutputOn{ NSData *data = [@"|O,08,08" dataUsingEncoding:NSUTF8StringEncoding]; NSMutableData *

我一直在开发一款使用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=不允许读取。}

总而言之,我似乎无法更新特征值,因为read函数总是产生错误

如果我使用Microchip上的SmartData应用程序,我就能够使用前面提到的命令读取输出(请参见附图)

有人知道如何读取特征值吗

谢谢


“我确保特征是可读的(实际情况是这样)”:在
特征中的
didWriteValueForCharacteristic:
?您是否可以改为编写
[self.discoveredPeripheral readValueForCharacteristic:elf.MLDPDataCharacteristic]
另外,奇怪的是
-ReadPIO2
写一个值(这很奇怪)。如果我使用[self.discoveredPeripheral readValueForCharacteristic:elf.MLDPDataCharacteristic],谢谢你的回答;我得到了相同的结果,实际上我在回调函数中收到的特征是MLDPDataCharacteristic。关于readPIO2,我必须发送一条消息来接收输入值,这就是为什么我必须为读取一个值而编写一个值。“确保特征是可读的(这种情况下)”:在
特征中
didWriteValueForCharacteristic:
?您是否可以改为编写
[self.discoveredPeripheral readValueForCharacteristic:elf.MLDPDataCharacteristic]
另外,奇怪的是
-ReadPIO2
写一个值(这很奇怪)。如果我使用[self.discoveredPeripheral readValueForCharacteristic:elf.MLDPDataCharacteristic],谢谢你的回答;我得到了相同的结果,实际上我在回调函数中收到的特征是MLDPDataCharacteristic。关于readPIO2,我必须发送一条消息来接收输入值,这就是为什么我必须为读取值编写一个值。