BLE - команда записи не работает с характеристиками (bb8a27e0-c37c-11e3-b953-0228ac012a70) в swift4.2 и iOS - PullRequest
0 голосов
/ 26 апреля 2019

Мы используем ядро ​​Bluetooth framework.CBCentralManager и CBP Периферийные классы.BLE -UART Светодиодная подсветка вкл / выкл.ниже приведены шаги для делегата конфигурации.

1) создан CBCentralManager & CBPeripheral Objects и назначен делегат.

2) проверьте состояние центрального менеджера.

3) отсканированные периферийные устройстваи получил рекламные данные.и подключил устройство.

4) Затем службы получения устройств и их характеристики.

5) сохраняют характеристики записи в других объектах.

Когда мы отправляем команду данных для записи наСохранены характеристики, что команда данных не работает.При вызове одной и той же команды данных для сохраненных характеристик более одного раза она работает нормально и включает устройство BLE.мы отправили 19 байтов команды.Мы отправляем команду, используя нажатие кнопки.

Мы пробовали много других демонстраций и кода для решения, но ничего не работает.ниже приведены ссылки на демонстрации, которые я упоминал.

https://www.google.com/amp/s/amp.reddit.com/r/swift/comments/4g1gvn/problem_with_peripheralwritevalue_on_ble/

https://ericasadun.com/2017/03/21/bluetooth-lessons-ii-characteristics/

https://github.com/adafruit/Basic-Chat

шаг 1: -

override init() {
    super.init()

    cManager = CBCentralManager(delegate: self, queue: nil)
    cPeripheral?.delegate = self
}

шаг 2: -

 func centralManagerDidUpdateState(_ central: CBCentralManager) {

    switch central.state {

    case .poweredOn:
        //Step 1
        isblueToothOn = true
        let options = [CBCentralManagerScanOptionAllowDuplicatesKey: false, CBConnectPeripheralOptionNotifyOnConnectionKey: true]
        cManager?.scanForPeripherals(withServices:nil, options: options)

        break
    case .poweredOff:

        isblueToothOn = false
        appDelegate.hideIndicator()
        delegate?.trunonBluetooth()

        break

    case .unauthorized :

        print("unAuthorized")
        break

    default:
        break
    }
}

шаг 3: -

 func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {

Получить Devie и подключиться.}

шаг 4: -

функциональное периферийное устройство (_ периферийное устройство: CBPeripheral, ошибка didDiscoverServices: ошибка?) {// Шаг 5: защитите let services = периферийные.сервисы else {return} для обслуживания вуслуги {

        if service.uuid.uuidString.lowercased() == CharacteristicUUID.UUID_SERVICE {

            appDelegate.cbServices = service
            peripheral.discoverCharacteristics([CBUUID(string: CharacteristicUUID.UUID_RX),CBUUID(string: CharacteristicUUID.UUID_TX)], for: service)
        }
    }
}

шаг 5: -

func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {

    if let characteristics = service.characteristics {
        for characteristic in characteristics {

            if characteristic.uuid ==  CBUUID(string: CharacteristicUUID.UUID_RX) {
                rxCharacteristic = characteristic

                //Once found, subscribe to the this particular characteristic...
                peripheral.setNotifyValue(true, for: characteristic)
                peripheral.readValue(for: characteristic)

                let characteristicUuid = characteristic.uuid.uuidString.lowercased()
                print("discovered characteristic: \(characteristicUuid) Read=\(characteristic.properties.contains(.read))")
                // print("Rx Characteristic: \(characteristic.uuid)")
            }
            if characteristic.uuid == CBUUID(string: CharacteristicUUID.UUID_TX){

                let characteristicUuid = characteristic.uuid.uuidString.lowercased()
                print("discovered characteristic: \(characteristicUuid) write=\(characteristic.properties.contains(.write))")

                appDelegate.txCharacteristic = characteristic

                if characteristic.uuid.uuidString == "BB8A27E0-C37C-11E3-B953-0228AC012A70"  {

                }
            }
            cPeripheral.discoverDescriptors(for: characteristic)
        }
    }
}

шаг 6: -

func write () {

    if appDelegate.txCharacteristic != nil && appDelegate.command.count > 0{

        print("Arr Command : - \(appDelegate.command)")

        if appDelegate.txCharacteristic!.uuid.uuidString == "BB8A27E0-C37C-11E3-B953-0228AC012A70" {
                let arr:[UInt8]  = appDelegate.command//[0x3A,0x11,0x05,0x40,0x40,0x03,0x00,0x00,0x00,0x00,0x1e,0x01,0x18,0x00,0x00,0x00,0x00,0x00,0x58]
                let sendData:Data = Data(bytes: arr)

                    self.cPeripheral.writeValue(sendData , for: appDelegate.txCharacteristic!, type: .withoutResponse)                
        }
    }
}

следуетвключить свет.

...