Bluetooth デバイス (BR-LE4.0-S2) からデータを読み込もうとしています。BLE デバイスは接続できたが、データを読み取ることができなかった。BLE サービスとその特性に関する仕様はありません。ここで私の問題が- (void)peripheral:didUpdateValueForCharacteristic:error:
呼び出されていません。チュートリアル「https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/PerformingCommonCentralRoleTasks/PerformingCommonCentralRoleTasks.html#//apple_ref/doc/uid/TP40013257-CH3-SW2」に従いました。コード。
私の要件は、BLE デバイスから連続してデータを読み取ることです。どんな助けでも大歓迎です。
- (void)viewDidLoad
{
self.myCentralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
self.peripheral = [[CBPeripheral alloc] init];
self.peripheral.delegate = self;
[super viewDidLoad];
}
- (void) centralManagerDidUpdateState:(CBCentralManager *)central {
switch (central.state) {
case CBCentralManagerStatePoweredOn:
[self.myCentralManager scanForPeripheralsWithServices:nil options:nil];
break;
default:
NSLog(@"Central Manager did change state");
break;
}
}
- (void)centralManager:(CBCentralManager *)central
didDiscoverPeripheral:(CBPeripheral *)peripheral
advertisementData:(NSDictionary *)advertisementData
RSSI:(NSNumber *)RSSI {
NSLog(@"Discovered %@", peripheral.name);
[self.myCentralManager stopScan];
NSLog(@"Scanning stopped");
if (self.peripheral != peripheral) {
self.peripheral = peripheral;
NSLog(@"Connecting to peripheral %@", peripheral);
// Connects to the discovered peripheral
[self.myCentralManager connectPeripheral:peripheral options:nil];
}
}
- (void)centralManager:(CBCentralManager *)central
didConnectPeripheral:(CBPeripheral *)peripheral {
NSLog(@"Peripheral connected");
NSLog(@"Peripheral services : %@",peripheral.services );
[self.peripheral setDelegate:self];
[peripheral discoverServices:nil];
}
- (void)peripheral:(CBPeripheral *)peripheral
didDiscoverServices:(NSError *)error {
if (error) {
NSLog(@"Error discovering service: %@", [error localizedDescription]);
return;
}
for (CBService *service in peripheral.services) {
[peripheral discoverCharacteristics:nil forService:nil];
}
}
- (void)peripheral:(CBPeripheral *)peripheral
didDiscoverCharacteristicsForService:(CBService *)service
error:(NSError *)error {
int i = 0;
for (CBCharacteristic *characteristic in service.characteristics) {
[peripheral setNotifyValue:YES forCharacteristic: characteristic];
}
}
- (void)peripheral:(CBPeripheral *)peripheral
didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic
error:(NSError *)error {
NSData *data = characteristic.value;
NSString *value = [[NSString alloc] initWithData:characteristic.value encoding:NSUTF8StringEncoding];
NSLog(@"Value %@",value);
NSString *stringFromData = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"Data ====== %@", stringFromData);
}
- (void)peripheral:(CBPeripheral *)peripheral
didUpdateNotificationStateForCharacteristic:(CBCharacteristic *)characteristic
error:(NSError *)error {
if (error) {
NSLog(@"Error changing notification state: %@",
[error localizedDescription]);
}
NSString *value = [[NSString alloc] initWithData:self.interestingCharacteristic.value encoding:NSUTF8StringEncoding];
NSLog(@"Value %@",value);
NSLog(@"description: %@, descriptors: %@, properties: %d, service :%@, value:%@", characteristic.description, characteristic.descriptors, characteristic.properties, characteristic.service, characteristic.value);
NSData *data = characteristic.value;
if (characteristic.isNotifying) {
NSString *stringFromData = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
[peripheral readValueForCharacteristic:characteristic];
NSLog(@"Data ====== %@", @"ccdc");
} else {
[self.myCentralManager cancelPeripheralConnection:peripheral];
}
}
- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error
{
NSLog(@"Peripheral Disconnected");
self.peripheral = nil;
// We're disconnected, so start scanning again
NSDictionary *scanOptions = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO] forKey:CBCentralManagerScanOptionAllowDuplicatesKey];
[self.myCentralManager scanForPeripheralsWithServices:nil options:scanOptions];
}