BLE auf ESP32 mit MicroPython

Einleitung

@poesel widmet sich dem Thema Telemetrie über BLE (siehe Markus aus Dortmund - ESP32/Gpy/BLE/LTE) und plant, entsprechende GATT services für Datenübertragung und Gerätesteuerung zu implementieren.

Nachdem drüben bei BLE GATT auf ESP32 mit Arduino-C++ ausgelotet wurde, wie eine entsprechende Programmierung über Arduino/C++ klappen würde, wollen wir hier weiterschauen, wie es u.U. mit MicroPython klappen könnte.

Hierzu haben sich gerade Neuigkeiten ergeben.

Danke Markus!

Ich habe gerade entdeckt, dass das Pycom MicroPython inzwischen(?) auch BLE und GATTServices kann, siehe Pycom driver for the Bluetooth radio in the ESP32 module.

Das ist gut und schlecht. Gut, weil ich damit zu Python wechseln kann und schlecht, weil ich mit der C+±Variante schon relativ weit war… Naja, immerhin was dazu gelernt. :slight_smile:
Falls Interesse besteht, schieb ich das auch auf github. Das ist aber natürlich nicht fertig.

1 Like

Ich glaube das war schon recht früh im Programm, bin aber natürlich auch nicht in allen Dingen 100%ig sattelfest, was die Erschließung der API seitens Pycom angeht.

Ich dachte Du hattest bewusst Arduino/C++ ausgewählt ;].

Gern, ich könnte mir vorstellen, dass bestimmt der ein oder andere Gefallen daran findet, selbst wenn es noch nicht vollständig abgeschlossen ist.

Die GATTServices konnte er “damals” IIRC noch nicht. Deshalb hab ich mit C++ überhaupt angefangen.

Allerdings habe ich gerade im Überschwang der Gefühle übersehen, das nur das pycom Python BLE kann. Das offizielle und der loboro-port können das beide nicht. :frowning:

Kriegt man die pycom Firmware auf einen normalen ESP32 überhaupt drauf? Genauer gesagt einen WROVER mit 4MB + 4MB PSRAM?

Verstehe.

Ok, gut zu wissen. Schade!

Die Pycom Firmware macht natürlich v.a. dort Sinn, weil es die ganzen Peripheriegeräte/Modems ordentlich unterstützt. Ob sie auch gut auf nicht-Pycom Geräten läuft, würde mich ebenfalls interessieren.

Grundsätzlich könnte ich mir vorstellen, dass sie darauf laufen könnte und gerade bei der vom ESP32 bereits mitgebrachten Bluetooth-Hardware auch ihre Funktionalität ausspielen könnte, sofern ich dabei nichts fundamentales übersehe.

Noch ein Tipp zu Deinen Wünschen, GATT mit MicroPython machen zu wollen: Schau doch einmal, ob Du die gewünschte Funktionalität nicht auch im CircuitPython-Universum finden kannst. Das ist das MicroPython-Derivat von Adafruit, siehe auch ESP-IDF and beyond: Lua with NodeMCU, Pycom's MicroPython fork and Adafruit's CircuitPython.

Die Ladies von Adafruit wiederum verwenden für ihre Produkte im Kern vanilla Cortex-M0 sowie ESP32 MCUs und werfen auf die ganze Angelegenheit gerade ebenfalls signifikante Ressourcen. Ich könnte mir vorstellen, dass Adafruit – falls das Vendor-spezifische Implementierungen sind – das Feature zur GATT-Unterstützung mittlerweile ebenfalls schon auf dem Schirm (anfangen / grade dabei / bereits abgeschlossen) hat.

3 posts were merged into an existing topic: BLE GATT mit MicroPython

ESP32 Bluetooth Architecture

Einen Einblick in die Bluetooth-Architektur des ESP32 vermitteln folgende Dokumente.

Unterstützung durch MicroPython

Im offiziellen ESP32-Port für MicroPython [1] ist weit und breit noch keine Modulunterstützung für die Bluetooth-Einheit zu sehen. Die Funktionalität scheint derzeit also weiterhin nur von Pycom auf dem ESP32 erschlossen worden zu sein [2].


  1. Experimental port of Vanilla MicroPython to the Espressif ESP32 microcontroller ↩︎

  2. Pycom MicroPython bindings to the ESP Bluedroid BT class ↩︎

CircuitPython unterstützt den ESP32 (noch?) nicht, was schade ist, denn die Implementierung sieht gut aus.
Hardware wäre wohl dann das:


bzw.:

Beim “offiziellen” MicroPython wird daran gearbeitet:

oder eben ein WiPy.

Das Ding von Adafruit sieht ganz nett aus. Der Preisunterschied zum WiPy (ohne Expansionboard) ist ca. 0. Da aber die Implementierung ein bisschen anders als bei pycom ist, lohnt sich der Mehraufwand wohl eher nicht.
Sollten die ESP32 mal direkt unterstützt werden, wäre das eine andere Sache. Die bekommt man deutlich günstiger.

1 Like

Die ItsyBitsy’s haben aber keinen Nordic Bluetooth Eumel drauf…

Das liest sich doch schonmal nicht schlecht?


Hier drüben bei GitHub - aykevl/micropython at bluetooth kommt die Entwicklung her.
Erst frisch im letzten Monat gebaut scheint modbluetooth.c der letzte Stand der Implementierung zu sein.

D’oh - das hab ich glatt übersehen… :slight_smile:

1 Like

Wenn das eine Option für dich ist, wäre das super, da die anderen Geschichten (Waage, Temperatur, Feuchte) intensiv von uns beackert wurden, du statt BLE auch alternativ später mit einem FiPy oder GPy/LoPy LTE nutzen könntest oder LoRa! Wenn wir dich irgendwie dazu “überreden” können wäre das prima! ;-)

1 Like

Erstmal wäre das wirklich praktisch und da BLE GATT für den ESP32 im MicroPython Universum von Pycom ordentlich erschlossen zu sein scheint (wir werden sehen ;]), will das unbedingt eine weitere mögliche Telemetrie- und Steuerungseinheit für die genannte Firmware werden – sehr gerne früher als später, nachdem wir kürzlich ja auch erst bei Erschließung von LTE Cat M1 und NB1 mit dem Pycom FiPy endlich Land sehen konnten ;].

Mittelfristig wäre es toll, wenn wir die Angelegenheit gemeinsam auch auf andere MicroPython-Plattformen als die von Pycom bringen könnten [1].


  1. Momentan ist die Firmware durch die Benutzung einiger systemnaher Module bislang vermutlich ausschließlich auf Pycom MicroPython lauffähig. Die Anpassungen werden jedoch für die wichtigsten Funktionalitäten nicht dramatisch sein und wir werden demnächst die Gelegenheit haben, die Firmware auf einem Pyboard D-series ausprobieren zu können. ↩︎

Diesmal ganz ohne MicroPython, dafür aber u.U. für eine hostseitige Integration mit SBCs oder Workstations.


Andere sind:

Bei bluetooth — low-level Bluetooth — MicroPython 1.11 documentation ist die kanonische Inline-Dokumentation zu finden. Vielleicht hilft Dir das beim Einstieg weiter, @poesel.

Recht frisch kam hier auch vor drei Tagen examples/bluetooth: Add basic BLE peripheral examples. · micropython/micropython@25a228a · GitHub dazu. Die Beispiele finden sich unter micropython/examples/bluetooth at master · micropython/micropython · GitHub.

@poesel: As we talked about the nitty gritty details of this the other day, I would like to point you out to [1] and [2], where we have outlined our findings regarding implementing custom characteristics on top of the Bluetooth software stack of Pycom MicroPython.


  1. Implementing BLE GATT ESS characteristics with MicroPython ↩︎

  2. BLE custom service/characteristics handles and descriptors | Pycom user forum ↩︎

1 Like

BLE is not too terribly difficult. You can piece most parts together from examples and the documentation. My current problem is proper debugging. I’m not sure if its the code, uPy or iOS whos at fault.
I’m running the temperature example and it shows up as battery level on iOS and as temperature on macOS but without the correct value. Hmmm…
I’m trying to borrow an Android phone. The BLE apps there are much better.

I have a first draft on my github ESP32 branch if anyone is interested.
https://github.com/poesel/hiveeyes-micropython-firmware/tree/esp32/terkin/network

1 Like

Dear Markus,

Right, not in general ;].

Are we talking about the BLE GATT “Temperature Measurement 2A1C” characteristic here? If so, the encode_ieee11073 function might help you along.

We have been using nRF Connect for Mobile recently, see Implementing BLE GATT ESS characteristics with MicroPython.

Good luck!

Cheers,
Andreas.

Please note this has been superseded by

It looks like the implementation for the MicroPython ESP32 port will be based on NimBLE.

About Apache NimBLE

See also