2017-10-05 1 views
0

J'utilise une carte BLE Arduino plume et tente de créer une application iOS qui peut envoyer des données au tableau via BLE. Je peux me connecter mais je ne peux pas avoir accès au txCharacteristiciOS Bluetooth Low Energy (BLE) ne découvrant pas la caractéristique TX

func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) { 
    guard let characteristics = service.characteristics else { 
     return 
    } 

    for characteristic in characteristics { 
     if characteristic.properties.contains(.write) || characteristic.properties.contains(.writeWithoutResponse) { 
      writableCharacteristic = characteristic 
     } 

     //   if(characteristic.uuid == CBUUID(string: "6e400002-b5a3-f393-e0a9-e50e24dcca9e")) 
     //   { 
     //    txCharacteristic = characteristic 
     //   } 

     var txUUID = CBUUID(string: "6e400002-b5a3-f393-e0a9-e50e24dcca9e") 
     let temp = characteristic.uuid.uuidString; 
     switch characteristic.uuid { 
     case txUUID: 
      txCharacteristic = characteristic; 
      break; 
     default: 
      break; 
     } 

     peripheral.setNotifyValue(true, for: characteristic) 
    } 
} 

Ce code fonctionne, mais ne les découvre UUID suivantes:

temp String "00001532-1212-EFDE-1523-785FEABCD123" 
temp String "00001531-1212-EFDE-1523-785FEABCD123" 
temp String "00001534-1212-EFDE-1523-785FEABCD123" 

J'ai compris que ces UUID sont DFU UUID. Comment puis-je découvrir le txCharacteristic à la place?


Ajouté pour plus d'informations comment je fais appel discoverCharacteristics():

extension SimpleBluetoothIO: CBPeripheralDelegate { 
func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) { 
    guard let services = peripheral.services else { 
     return 
    } 

    targetService = services.first 
    if let service = services.first { 
     targetService = service 
     peripheral.discoverCharacteristics(nil, for: service) 
    } 
} 
+1

Êtes-vous sûr que ce le bon service sur le bon appareil? Avez-vous appelé 'discoverServices' et' discoverCharacteristics' avec les bons arguments? Essayez de télécharger un navigateur BLE et vérifiez ce qu'il voit. – Kevin

+0

Bonjour, et merci pour votre aide. J'ai appelé discoverServices (nil) qui devrait découvrir tous les services. Et j'ai ajouté le code pour appeler discoverCharacteristics() à ma question ci-dessus. – Megan

Répondre

0

j'ai pu comprendre cela, en lisant les informations sur ce site: https://learn.adafruit.com/getting-started-with-the-nrf8001-bluefruit-le-breakout/adding-app-support

particulièrement cette partie (Notez que UART est le service et TX et RX sont les caractéristiques du service):

UART Service UUID: 6E400001-B5A3-F393-E0A9-E50E24DCCA9E 
TX Characteristic UUID: 6E400002-B5A3-F393-E0A9-E50E24DCCA9E 
RX Characteristic UUID: 6E400003-B5A3-F393-E0A9-E50E24DCCA9E 

J'ai donc dû appeler périphérique.discoverServices() avec l'ID de service UART. Dans mon exemple ci-dessous self.serviceUUID = "6e400001-b5a3-f393-e0a9-e50e24dcca9e"

func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) { 
    //peripheral.discoverServices(nil) 
    //peripheral.discoverServices([CBUUID(string: "6e400001-b5a3-f393-e0a9-e50e24dcca9e")]) 

    // Disover peripheral with service UUID that was given to us during initialization (self.serviceUUID) 
    peripheral.discoverServices([CBUUID(string: self.serviceUUID)]) 
} 

alors en service didDiscoverCharacteristicsFor je devais chercher la caractéristique TX ID:

// Did Discover Characteristics 
func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) { 
    guard let characteristics = service.characteristics else { 
     return 
    } 

    for characteristic in characteristics { 
     if characteristic.properties.contains(.write) || characteristic.properties.contains(.writeWithoutResponse) { 
      writableCharacteristic = characteristic 
     } 

     // TX Characteristic UUID: 6E400002-B5A3-F393-E0A9-E50E24DCCA9E 
     // https://learn.adafruit.com/getting-started-with-the-nrf8001-bluefruit-le-breakout/adding-app-support 
     let txUUID = CBUUID(string: "6e400002-b5a3-f393-e0a9-e50e24dcca9e") 
     switch characteristic.uuid { 
     case txUUID: 
      txCharacteristic = characteristic; 
      break; 
     default: 
      break; 
     } 

     peripheral.setNotifyValue(true, for: characteristic) 
    } 
}