Objective-C로 BLE를 동시에 2대 접속한다
4241 단어 iOSFirstVRObjective-CBluetoothLE
어째서 그런 일을 할까라고 생각했는가라고 하면 FirstVR을 양손으로 사용해 보려고 생각했지요. SDK 자체는 있지만 양손의 대응은 아직 같고 다른 장면에서도 사용할 수 있을까라고 생각해 2개의 디바이스로부터 동시에 BLE로 통신하는 방법을 조사하기 시작한 것이 계기였습니다. 그건 그렇고, FirstVR은 개발자가 상담 할 Slack이있는 것 같습니다 [FirstVR 개발자 Slack]"h tps://오. gl/w 푸 63X "
1개의 디바이스와 연결해 데이터를 읽는 것은 있습니다만 원래 BLE의 접속 방법조차 모르는 상태로부터 시작했기 때문에 엄청 고전했습니다.
솔직히 보통 연결하는 방법을 잘 이해하면 두 연결 방법을 쉽게 할 수 있지만, Objective-C에서 BLE 연결 방법조차 모르는 상태에서 시작했다는 것도 있고 2 연결 빠져서 정리했습니다.
원래 Objective-C에서 BLE 연결의 흐름을 모르는 사람은 다음 기사를 읽으십시오. (자신도 이하의 기사를 참고로 했습니다.덧붙여서 이 쪽이 쓴 「iOS x BLE 프로그래밍」이라고 하는 책도 가지고 있습니다.)
htps : // 코 m/슈 223/있어 ms/78614325 세 25bf7f4379
1,CBPeripheral형의 변수를 2개와 디바이스가 연결되어 있는 수를 보관 유지하는 변수를 준비한다.
@property (nonatomic, strong) CBPeripheral *peripheral1;
@property (nonatomic, strong) CBPeripheral *peripheral2;
@property (nonatomic) int deviceNum;
2, 주변 장치가 발견된 후 함수 중 하나 연결되어도 기다리는 코드를 작성
-(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(nonnull CBPeripheral *)peripheral advertisementData:(nonnull NSDictionary<NSString *,id> *)advertisementData RSSI:(nonnull NSNumber *)RSSI{
NSString *peripheralName = [advertisementData objectForKey:@"kCBAdvDataLocalName"];
if(peripheralName){
if([peripheralName containsString:FVR_DEVICE_NAME]){
if(self.deviceNum < 1){
self.peripheral1 = peripheral;
self.peripheral2.delegate = self;
self.deviceNum += 1;
}else if(self.deviceNum == 1 && ![peripheral.identifier.UUIDString isEqualToString:self.peripheral1.identifier.UUIDString]){
self.keepScanning = NO;
self.peripheral2 = peripheral;
self.peripheral2.delegate = self;
[self.centralManager connectPeripheral:self.peripheral1 options:nil];
[self.centralManager connectPeripheral:self.peripheral2 options:nil];
[self.centralManager stopScan];
}
}
}
}
3, 서비스 탐색
-(void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral{
NSLog(@"Connected!!!");
self.peripheral1.delegate = self;
self.peripheral2.delegate = self;
[self.peripheral1 discoverServices:nil];
[self.peripheral2 discoverServices:nil];
}
4, 캐릭터리스틱을 탐색한다
- (void) peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(nonnull CBService *)service error:(nullable NSError *)error{
if(error){
NSLog(@"error %@",error);
return;
}
NSArray *characteristics = service.characteristics;
NSLog(@"Found %lu characteristics! : %@", (unsigned long)characteristics.count, characteristics);
[peripheral setNotifyValue:YES forCharacteristic:characteristics[1]];
[NSThread sleepForTimeInterval:0.001];
[peripheral readValueForCharacteristic:characteristics[1]];
}
5, 읽기
- (void) peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error{
if(error){
NSLog(@"error %@",error);
return;
}
NSString *test = [[NSString alloc] initWithBytes:[characteristic.value bytes] length:[characteristic.value length] encoding:NSUTF8StringEncoding];
//次の1行で1つのデバイスで2つのインスタンスを掴んでしまっていないかperipheral.identifier.UUIDStringを表示してチェックする。
NSLog(@"characteristic %@ Peripheral UUID:%@“,test,peripheral.identifier.UUIDString);
[peripheral readValueForCharacteristic:characteristic];
}
이런 느낌으로 체크합니다.
Reference
이 문제에 관하여(Objective-C로 BLE를 동시에 2대 접속한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/popopi/items/8a65a69074cbd6ebdb62텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)