Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Android BLE Verbindung (https://www.delphipraxis.net/209542-android-ble-verbindung.html)

Rapunzel 19. Dez 2021 10:56

Android BLE Verbindung
 
Hallo,

ich scheitere gerade am BLE Verbindungsaufbau zu einem BLE Gerät unter Android. Es handelt sich um ein Custom Device auf Basis eines ESP32.

Auf Plattform Windows funktioniert derselbe Code einwandfrei. Hier ist Aufruf von DiscoverServices ausreichend, um eine Verbindung aufzubauen. Das erkenne an einer Status LED des Gerätes. Dann rufe ich für zwei Characteristiken SetCharacteristicNotification auf und schon erhalte ich über das Ereignis BluetoothLECharacteristicRead Daten von dem Gerät. Ganz easy.

Auf Plattform Android rufe ich Connect auf, dann DiscoverServices und schließlich SetCharacteristicNotification. Funktioniert alles fehlerfrei. Aber die Status LED zeigt keine Vebindung an und ich erhalte natürlich auch keine Daten. Ich gehe im Prinzip wie in den Heart Rate Monitor Beispiel vor.

Auch mit der Nordic RF Connect App kann ich keine vollständige Verbindung aufbauen. Connect wird zwar angezeigt. Aber die LED bleibt auch hier im Status keine Verbindung.

Habt ihr einen Tipp für mich was hier unter Android noch zusätzlich zu beachten sein könnte, um eine Verbindung aufbauen?

Gruß + Danke

jobo 19. Dez 2021 13:09

AW: Android BLE Verbindung
 
Klassiker wären die Android Permissions und vielleicht Manifesteinträge.
Ggf ist das Device auch in einem anderen WLAN oder in einem abgeschirmten WLAN, das nur nach draußen geht.

Rapunzel 19. Dez 2021 13:36

AW: Android BLE Verbindung
 
Permissions habe ich, ansonsten würden doch die ganzen BT Funktionen nicht fehlerfrei funktionieren. Das Gerät ist in keinem WLAN. Mit der Nordic geht es ja auch nicht.

Unter Windows funktioniert es mit dem gleichen Gerät und der gleichen App eine Minute später perfekt. Durch die WinRT Funktion IBluetoothLEDevice3.GetGattServicesAsync wird die Verbindung erfolgreich aufgebaut, sehe ich an der Status LED. Irgendwas muss an dieser Stelle unter Android anders sein. Werde mal den Enwickler der Firmware fragen.

Rapunzel 19. Dez 2021 15:57

AW: Android BLE Verbindung
 
Interessant, über die Write Charakteristik kann ich Befehle an das Gerät senden. Diese werden auch richtig interpretiert. Aber auf der zweiten Read Charakteristik, die für die Antworten zuständig ist, erhalte ich auch keine Daten zurück.:?:

Rollo62 20. Dez 2021 07:38

AW: Android BLE Verbindung
 
Zitat:

Zitat von Rapunzel (Beitrag 1499329)
Auch mit der Nordic RF Connect App kann ich keine vollständige Verbindung aufbauen. Connect wird zwar angezeigt. Aber die LED bleibt auch hier im Status keine Verbindung.

Dann stimmt womöglich was mit dem ESP32-Programm nicht.
Es gibt aber auch BLE firmware die bewusst die Verbindung nach ein paar Sekunden abwirft, wahrscheinlich um Strom zu sparen.
Ich vermute mal Du hast Notify characteristics, die Du dann im Nordic RF subscriben möchtest.
Womit hast du das denn auf dem ESP32 programmiert, mit den EspressifTools oder mit Arduino Framework ?
Ich bin jetzt bei ESP32 noch nicht so tief eingestiegen, das wollte ich aber noch,
ich würde erstmal mit einem kleinen Demo entweder von Espressif oder Arduino anfangen und sehen wie sich das verhält.
Dazu habe ich schon mal mit PlatformIO herumprobiert, das sah ziemlich gut aus.

Rapunzel 20. Dez 2021 12:06

AW: Android BLE Verbindung
 
Problem mit Hilfe des Entwicklers der ESP32 Firmware gelöst. RequestMtu nach Connect lautet der Zauberspruch, den der ESP32 gerne für ein "vollständiges" Connect haben möchte. Offensichtlich macht Windows das bei DiscoverServices automatisch im Hintergrund.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz