So erkennen Sie ein benutzerdefiniertes Bluetooth LE-Gerät

Ich habe eine kundenspezifische Platine, die einen Bluetooth LE-Chip von Nordic Semiconductor verwendet. Ich werde mit einer iOS-App mit diesem Gerät sprechen und bin neu bei BTLE und etwas verwirrt durch den gesamten Entdeckungs-/Kopplungsablauf. Unser Gerät sendet einfach ASCII-Text, der ein benutzerdefiniertes Datenformat ist.

Der EE, der dieses Board entwickelt hat, hat mir nicht viel Anleitung gegeben, wie ich es verbinden kann. Wenn ich die LightBlue iOS-App verwende, kann ich das Gerät und seine UUIDs sehen. Die UUIDs, die ich sehe, sind genau die gleichen wie die UUIDs in der Nordic nRF UART App .

Meine Hauptfragen sind:

  • Welche UUIDs müssen meine Boards verwenden? Es wird mehr als nur ein Board geben, also scheint es, als hätte jedes seine eigene UUID?
  • Muss mein Gerät eine "spezielle" UUID von bluetooth.org erhalten?

Ich weiß, dass es sowohl für den Dienst als auch für die Merkmale unterschiedliche UUIDs gibt ... meine Fragen gelten für alle diese.

Sie sagen Boards, werden Sie das eigentliche BLE-Gerät programmieren oder sprechen Sie darüber, welche UUIDs Sie in Ihrer iOS-App benötigen? Eine "spezielle" UUID wird nur benötigt, wenn Sie die standardisierten Profile von Bluetooth SIG verwenden (Herzfrequenz, Näherung, Glukose ... usw.)
Hier ist die Diensterkennung gut dokumentiert: devzone.nordicsemi.com/documentation/nrf51/5.0.0/html/…
Ja, ich (oder mein EE) werde das Gerät programmieren. Ich spreche also von den UUIDs, die das Gerät sendet (was natürlich vorgibt, wonach wir in der iOS-App suchen).
welchen Chip verwendest du?

Antworten (1)

Nein, die UUID sollte für alle Ihre Boards gleich sein. Ich weiß, warum Sie das vielleicht seltsam finden, aber es sind die Dienste, die gleich aussehen und sich gleich verhalten, die Boards müssen das nicht. Aber wenn Ihre Boards unterschiedliche Aufgaben übernehmen, könnten Sie vielleicht jedem von ihnen unterschiedliche, spezifischere Dienste hinzufügen. Um zu erkennen, welches das eine und wer das andere ist, sollten Sie den Namen des Geräts ändern. Eine gängige Methode, dies zu tun, besteht darin, nach derselben UUID von iOS zu suchen und dann eine Liste mit Gerätenamen abzurufen, die diese bestimmte UUID übertragen. Wenn Sie ein nRF51822-Gerät verwenden, teilen Sie Ihrem EE mit, dass er eindeutige Namen anstelle eindeutiger UUIDs haben kann, indem Sie diese Zeile in is main.c ändern, um Ihre verschiedenen Boards leichter zu identifizieren.

#define DEVICE_NAME                          "Device_name" // <<-- this line

// In gap_params_init
sd_ble_gap_device_name_set(&sec_mode,(const uint8_t *)DEVICE_NAME, strlen(DEVICE_NAME));

Wenn Ihr Gerät einen Dienst vom Typ Bluetooth SIG (Special Interest Group) ankündigen soll, muss die UUID ein standardisierter 16-Bit-Wert von der SIG sein. Diese finden Sie hier. Wenn Sie einen Chip von Nordic Semiconductor verwenden, werden Sie sehen, dass in deren Bibliotheken alle Dienst- und Merkmalsdefinitionen bereits definiert sind.

Auszug aus diesen Dokumentationsseiten :

#define BLE_UUID_ALERT_NOTIFICATION_SERVICE                      0x1811     /**< Alert Notification service UUID. */
#define BLE_UUID_BATTERY_SERVICE                                 0x180F     /**< Battery service UUID. */

Andererseits ist der Nordic UART-Dienst ein kundenspezifischer Dienst. Um einen benutzerdefinierten Dienst zu verwenden, müssen Sie eine zufällige 128-Bit-UUID generieren und diese selbst zum Dienst hinzufügen. Da Ihr EE dies bereits getan hat, ist es kein Problem, es einfach auszutauschen.