Bluez im BLE-Peripheriemodus: Android kann die Diensteliste nicht abrufen, OK mit iPhone und Win10

Bluez im BLE-Peripheriemodus: Android kann die Diensteliste nicht abrufen, OK mit iPhone und Win10

Ich versuche, einen Raspberry Pi 3B+ als BLE-Peripheriegerät zu nutzen.

Ich habe die neueste Version (5.50) von Bluez Stack hier heruntergeladen:https://git.kernel.org/pub/scm/bluetooth/bluez.git. Ich führe die bereitgestellten Beispiele im Verzeichnis /test/ aus.

Wenn ich „example-advertisement“ und „example-gatt-server“ gleichzeitig unter Root mit Python 2.7 oder Python 3.5 ausführe, kann ich das neue BLE-Peripheriegerät mit Linux Mint-, Win10-, iOS- und Android-Geräten sehen. Obwohl Linux, iOS und Win10 erfolgreich eine Verbindung herstellen und die Liste der Dienste und Merkmale abrufen können, kann Android (4.4, 5.1 oder 7.0, getestet mit 5 verschiedenen Marken von Smartphones und Tablets) keine Verbindung zum Gerät herstellen.

Ich habe dieses Thema gesehen:https://raspberrypi.stackexchange.com/questions/90696/bluetooth-low-energy-gatt-services-not-found-on-androidaber ich verwende im Moment nicht meine eigene App. Sogar verschiedene BLE-Scan-Anwendungen, die wir im Play Store finden, schaffen es nicht, eine Verbindung herzustellen und die Serviceliste abzurufen.

Es scheint nicht mit Raspberry Pi-spezifischer Hardware oder Software zusammenzuhängen, da ich es auch mit einem anderen Single Board Computer (Variscite DART-6UL,https://www.variscite.com/product/system-on-module-som/cortex-a7/dart-6ul-freescale-imx-6ul) und ich erhalte genau das gleiche Verhalten.

Hat jemand eine Idee?

Danke.

Antwort1

Ich habe nach langem Suchen aufgegeben. Die App „nRF Connect“ kann eine Verbindung zu meinem Gerät herstellen und die Merkmalsliste abrufen, aber nicht immer: – Auf manchen Android-Geräten muss ich nur auf „Verbinden“ klicken. – Auf manchen anderen muss ich im Untermenü mit den drei Punkten auf „AutoConnect“ klicken.

Allerdings stellen viele andere Apps, einschließlich meiner, überhaupt keine Verbindung her, mit oder ohne Autoconnect.

Durch das Hinzufügen einiger Verzögerungen (100 ms zwischen Peripheriegeräterkennung und Verbindung und 100 ms zwischen Verbindungsstatus und Diensteerkennung) wird die Verbindung bei einigen, jedoch nicht bei allen Geräten erfolgreich hergestellt.

verwandte Informationen