2016-12-28 8 views
0

Ich muss die Daten vom externen Gerät (Datalogger Thermometer) mit BLE holen. Bitte sehen Sie sich das Bild für dieses Gerät an.Senden und Empfangen von Daten von einem externen Gerät mit BLE im iOS SDK

Dieses Gerät sendet nur Daten, wenn wir einen Befehl senden. Ich meine, wir müssen zuerst statische Daten an das Gerät senden, und dann werden die Daten der Werte T1, T2, T3 und T4, die in das Bild eingeblendet werden, zurückgesendet.

Ich kann Daten senden mit BLE zu einem iOS-Gerät zu einem anderen mit BTLE Central Peripheral Transfer Demo und diesem answer. Aber ich kann auf diese Weise keine Daten an dieses externe Gerät senden und empfangen.

Wie in dieser Demo erwähnt, verwende ich CBPeripheralManager und CBCentralManager zum Senden und Empfangen von Daten mit BLE. Auch ich kann die Liste aller in der Nähe von BLE-Verbindungen mit EAAccessoryManager zeigen. Wenn ein Benutzer auf ein beliebiges Gerät in der Liste klickt, ruft es die UUID dieses Geräts ab und versucht, Daten mit dieser UUID zu senden und zu empfangen.

Gibt es eine andere Möglichkeit zum Senden und Empfangen von Daten über Bluetooth an ein iOS-Gerät an ein externes Gerät?

Ich würde gerne teilen, Android-Entwickler hat dies in Android mit SSP, nicht BLE implementieren. Ist dies mit BLE in iOS möglich?

Jede Hilfe wäre willkommen.

+1

Sind Sie sicher, dass das Gerät tatsächlich BLE unterstützt? Klassisches Bluetooth und BLE sind zwei verschiedene Protokolle/Stacks. Geräte, die über 'EAAccessoryManager' sichtbar sind, sind klassische Bluetooth-Geräte, keine BLE-Geräte. Um nach BLE-Geräten zu suchen, verwenden Sie 'CBCentralManager scanForPeripheralsWithServices: options:'. – jcaron

Antwort

1

ich immer die CoreBluetooth diese Protokolle Implementierung (CBCentralManagerDelegate, CBPeripheralDelegate) und das Überschreiben dieser Methoden:

func centralManagerDidUpdateState(_ central: CBCentralManager) 

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

func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) 

func centralManager(_ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, error: Error?) 

func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) 

// Check if the service discovered is a valid Service 
func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) 

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

// And for getting the value changes in the BLE Device... 
func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) 

func peripheral(_ peripheral: CBPeripheral, didWriteValueFor characteristic: CBCharacteristic, error: Error?) 

Ich hoffe, dass es

1

hilft Bevor Sie schreiben oder Werte lesen, müssen Sie wissen, was charakteristisch ist lesbar und schreibbar, als Sie es lesen oder schreiben können. Einfach der Prozess der BTLE ist:

peripheren Scan -> conenect -> Dienstleistungen finden -> entdecken Eigenschaften -> ... Operationen, die Sie

benötigen, wenn Sie Wert schreiben möchten Eigenschaften beschreibbar, was Sie brauchen Bestätigen Sie, dass das Peripheriegerät diese Schreibanforderung beantwortet, andernfalls erhalten Sie einen Fehler beim Rückruf: peripheral(_:didWriteValueFor:error) vielleicht "Unknow error".

andere, wenn Sie versuchen Wert von Eigenschaften lesen Sie rufen müssen: readValue(for:) oder setNotifyValue(_:for:), die Ergebnisse der Aktualisierung des peripheren wird Antwort in peripheral(_:didUpdateValueFor:error:)

Oben, ist mein Verständnis von BTLE Datenübertragung. hoffe, dir zu helfen.

Verwandte Themen