Frage

Ich bin ziemlich neu in der Bluetooth-Kommunikation.Mein erstes Projekt zielt darauf ab, Daten von einem iOS-Gerät auf ein BLEshield (kleiner Chip) zu übertragen.

Um meinen zentralen Code zu testen, habe ich beschlossen, ein iPhone als Peripheriegerät (die Rolle, die der Chip spielen wird, sobald ich ihn habe) und ein iPad als zentrales Gerät einzurichten.

Ich kann die Geräte anschließen und auch Daten von der Peripherie an die Zentrale senden.Dabei ist es ganz einfach:

- (void)startService {
    _readChar = [[CBMutableCharacteristic alloc] initWithType:[CBUUID ...] properties:CBCharacteristicPropertyNotify value:nil permissions:CBAttributePermissionsReadable];
    _writeChar = [[CBMutableCharacteristics alloc] initWithType:[CBUUID ...] properties:CBCharacteristicPropertyNotify value:nil permissions:CBAttributePermissionsWriteable];

    _service = [[CBMutableService alloc] initWithType:[CBUUID ...] primary:YES];
    [_service setCharacteristics:@[_readChar, _writeChar]];

    _peripheral = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil];
    [_peripheral addService:_service];

    [_peripheral startAdvertising:@{CBAdvertisementDataServiceUUIDKey: @[[CBUUID ...]], CBAdvertisementDataLocalNameKey: @"ServiceName"}];
}

- (void)peripheralManager:(CBPeripheralManager *)peripheral central:(CBCentral *)central didSubscribeToCharacteristic:(CBCharacteristic *)characteristic {
    [_peripheral updateValue:[@"HELLO WORLD" dataUsingEncoding:NSUTF8StringEncoding] forCharacteristic:_readChar onSubscribedCentrals:nil];
}

ABER ich kann die andere Richtung nicht zum Laufen bringen.Um Daten von der zentralen Seite zu senden, habe ich folgenden Code:

[_activePeripheral writeValue:[@"PONG" dataUsingEncoding:NSUTF8StringEncoding] forCharacteristic:_writeChar type:CBCharacteristicWriteWithoutResponse];

Ich gehe davon aus, dass eine dieser Methoden auf dem Peripheriegerät aufgerufen werden sollte:

- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveReadRequest:(CBATTRequest *)request
- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveWriteRequests:(NSArray *)requests
- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
- (void)peripheral:(CBPeripheral *)peripheral didWriteValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error

Aber eigentlich passiert nichts.Leider wird mein Hardwareprojekt einen Chip verwenden, der nur im Peripheriemodus arbeiten kann, und am Ende werde ich fast ausschließlich auf die Peripherie schreiben, da diese ein Sender für Steuersignale ist.

Ich hoffe, jemand kann mir helfen!

War es hilfreich?

Lösung

Die Eigenschaften für:

  • _readChar sollte sein CBCharacteristicPropertyRead
  • _writeChar sollte sein CBCharacteristicPropertyWriteWithoutResponse

Sehen Hier für mehr Details. CBCharacteristicPropertyNotify Das Merkmal ist weder beschreibbar noch lesbar, es ist nur benachrichtigbar (abonnieren/abmelden).

Andere Tipps

Verwenden Sie einfach https://github.com/lgbluetooth/lgbluetooth Es wird das Leben leichter machen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top