I am a new in Bluetooth connection and I want to add second device in my iOS project. I already have one device, and the new device is very similar with first one, but little bit deferent. I have one process for the two devices, and I did not change a lot of code, just created all value for the new device. My all devices have different name and identifier, first device is working fine. For creating UUID values, I used UUID generator.
Do you have idea, Did I create UUIDs correct?
P.S: Android app works fine with both devices.
Thanks a lot!
Code Block class BleConstants: NSObject { let deviceTwoServiceUUID = “59DE3994-6A63-4654-8FF0-F85C5163B2F5” let deviceTwoFirstCharacteristicUUID = “59DE3994-6A63-4654-8FF0-F85C5163B2F6” let deviceTwoSecondCharacteristicUUID = “59DE3994-6A63-4654-8FF0-F85C5163B2F7” let deviceOneServiceUUID = “A6AF4483-E210-457B-B9D6-B8A621513D1D” let deviceOneFirstCharacteristicUUID = “A6AF4483-E210-457B-B9D6-B8A621513D2D” let deviceOneSecondCharacteristicUUID = “A6AF4483-E210-457B-B9D6-B8A621513D2D” } class BleManager: NSObject, CBCentralManagerDelegate, CBPeripheralDelegate { @objc private(set) static var sharedInstance = BleManager() var cbManager : CBCentralManager? = nil var currentPeripheral : CBPeripheral? = nil var secondService : CBService? = nil var firstService : CBService? = nil var secondFirstCharacteristic : CBCharacteristic! var secondSecondCharacteristic : CBCharacteristic! var firstFirstCharacteristic : CBCharacteristic! var firstSecondCharacteristic : CBCharacteristic! func initCentralManager() { if cbManager == nil { cbManager = CBCentralManager(delegate: self, queue: nil, options: [CBCentralManagerOptionRestoreIdentifierKey : “MyApp”, CBCentralManagerOptionShowPowerAlertKey: true]) } func deinitCentralManager() { cbManager = nil } func isBluetoothAvailable() -> Bool { return cbManager?.state == CBManagerState.poweredOn } func scan() { if (cbManager != nil && (cbManager?.isScanning)!) { return } discoveredPeripherals.removeAll() let serviceUUIDs = [CBUUID(string: BleConstants.deviceTwoServiceUUID), CBUUID(string: BleConstants.deviceOneServiceUUID)] cbManager?.scanForPeripherals(withServices: serviceUUIDs, options: [CBCentralManagerScanOptionAllowDuplicatesKey : 1]) } func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) { if(!discoveredPeripherals.contains(peripheral)) { discoveredPeripherals.append(peripheral) } } func stopScan() { if cbManager != nil && (cbManager?.isScanning)! { cbManager?.stopScan() } } func connect(peripheral: CBPeripheral) { if cbManager?.state == CBManagerState.poweredOn { if currentPeripheral == nil || currentPeripheral?.state != CBPeripheralState.connected { cbManager?.connect(peripheral, options: nil) } else { cbManager?.cancelPeripheralConnection(peripheral) } } } func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) { Device.savePeripheralString(peripheral: peripheral.identifier.uuidString) AutoConnect.stop() DeviceUpdate.updateProgress = .None Device.isDongleConnected = true currentPeripheral = peripheral currentPeripheral?.delegate = self currentPeripheral?.discoverServices(nil) disableSleep() } func disableSleep() { UIApplication.shared.isIdleTimerDisabled = true } func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) { if error != nil { return } if let services = peripheral.services { for service in services { if service.uuid.uuidString == BleConstants.deviceTwoServiceUUID { Device.dongleType = port.second secondService = service peripheral.discoverCharacteristics(nil, for: service) } if service.uuid.uuidString == BleConstants.deviceOneServiceUUID { Device.dongleType = port.first firstService = service peripheral.discoverCharacteristics(nil, for: service) } else { Log.bt("didDiscoverServices for peripheral not found \(peripheral.identifier.uuidString)") } } } } func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) { for characteristic in service.characteristics! { if characteristic.uuid.uuidString == BleConstants.deviceOneFirstCharacteristicUUID { firstCharacteristic = characteristic } else if characteristic.uuid.uuidString == BleConstants.deviceOneSecondCharacteristicUUID { firstSecondCharacteristic = characteristic else if characteristic.uuid.uuidString == BleConstants.deviceTwoFirstCharacteristicUUID { secondFirstCharacteristic = characteristic } else if characteristic.uuid.uuidString == BleConstants.deviceTwoSecondCharacteristicUUID { secondSecondCharacteristic = characteristic } else { Log.bt("didDiscoverCharacteristics not found \(characteristic.uuid.uuidString)") } } if Device.dongleType == .deviceTwo { openPortDeviceTwo() } else { openPortDeviceOne() } }
Do you have idea, Did I create UUIDs correct?
P.S: Android app works fine with both devices.
Thanks a lot!