NimBLE Server-Client Multi-Role Coexistence auf dem ESP32

OP #8047973
Lesenswert?

Ich komm gerade nicht weiter bei der Migration von Bluedroid auf NimBLE.

Das Arduino Framework v3.x (based on ESP-IDF 5.x) für den esp32 classic ESP32-WROOM-32E (ESP32-D0WD-V3) läuft noch auf Bluedroid, während alle anderen (esp32c3, ...) bereits auf NimBLE migriert sind.

https://github.com/espressif/arduino-esp32/discussions/10991

Im alten Bluedroid habe ich einen BLE-Server und einen BLE-Beacon Scanner gleichzeitig laufen. Nun hab ich den Code auf h2zero/NimBLE-Arduino v2.5.0 aktualisiert, nun bekommt der BLE Scanner keinen Zugriff mehr, der BLE Server dominiert.

Bisheriger Workaround (für NimBLE-Arduino) ist, das Advertising zu stoppen, zu warten bis der Controller frei wird, dann zu scannen, und vice versa.

1
pAdvertising->stop();
2
delay(500);
3
pBLEScan->start(0.5, false);
4
delay(500);
5
pAdvertising->start();

Das funktioniert miserabel bis gar nicht, Timeslots sind viel zu kurz um den BLE Beacon zu finden, und der BLE-Server ist auch nicht mehr responsive.

Sollte ich auf das Arduino Framework v4.0 warten (Stage 2) und wird dieses dann besser funktionieren als der h2zero Port? Oder komme ich nicht umhin auf der ESP-IDF Ebene zu programmieren, an allen Wrappern vorbei?

: Bearbeitet durch User
OP #8048494
Lesenswert?

Ich habe es nun andersrum gelöst: Der BLE-Scanner wird vom BLE-Server über einen Callback gestoppt. Sobald sich ein Smartphone mit dem BLE-Server verbindet wird ein BLE Beacon für mich sowieso uninteressant, brauche den BLE-Scanner in der Zeit nicht.

1
void onConnect(NimBLEServer* pServer) {
2
  pBLEScan->stop();
3
}

Eine echte Koexistenz scheint es mit diesem virtuellen HCI Controller nicht zu geben. Im Datenblatt ist auch nur von "Simultaneous advertising and scanning" die Rede, nicht von bonding.

: Bearbeitet durch User

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren