BLE GATT mit nRF51822 oder SPBTLE-RF unter MicroPython

Drüben bei BLE GATT auf ESP32 und BLE GATT auf ESP32 mit MicroPython schauen wir, wie wir BLE GATT auf einem vanilla ESP32 am komfortabelsten erschließen können.

Hier schauen wir, wie es um den BLE GATT support in anderen Ökosystemen bestellt ist, wobei im Vergleich zum ESP32 mit dem bereits integrierten Bluetooth Subsystem andere Hard- und Software relevant ist.

BLE GATT with CircuitPython

Einleitung

Nordic nRF51822

Bei der Erforschung des Adafruit-Ökosystems muss man insbesondere hardwareseitig berücksichtigen, dass die ESP32 MCUs ja bereits eingebautes Bluetooth mitbringen, während bei den für die Produktreihe um Cortex-M0 bzw. -M4 Prozessoren externe Peripherie benötigt wird. Nehmen wir doch konkret den Adafruit Feather M0 Bluefruit LE als Referenz bei der Betrachtung aus dieser Perspektive. Adafruit hat sich dabei für den Nordic nRF51822 SoC entschieden [1].

Überblick

Kevin Townsend and Lady Ada schrieben die Basisdokumentation, einige weitere arbeiten an der weiteren Ausreifung der Implementierung.

2014 - 2019

2018

Aktueller Entwicklungsstand


  1. Der nRF51822 von Nordic wurde hier bereits von @weef und @petekmet bei Imker als Datenmuli, Untersuchung und Datensammlung zur Temperaturabhängigkeit des gesamten Wägezellen-Subsystems sowie Bluetooth temperature beacon for in-hive placement by Peter Kmet erwähnt. ↩︎

Beobachtungen

So wie es aussieht, unterstützt Adafruit’s BLE Softwareimplementierung für CircuitPython nur den Nordic Chipsatz und das wiederum vorzugsweise auf Cortex-M0/-M4 Prozessoren mit SAMD-Chipsatz [1].


P.S.: Irgendwie war ich davon ausgegangen, dass das neue CircuitPython sowohl den ESP32 als auch die neu erschlossenen Cortex-M0 über den von Adafruit beigetragenen SAMD-Port für MicroPython unterstützen würde. Das war wohl definitiv ein Irrglaube. Mehr über den aktuellen Stand bei CircuitPython kann man bei State of the onion for CircuitPython nachlesen.


  1. Research about BLE support on SBCs via Adafruit Blinka pending. ↩︎

uble for MicroPython

uble is a lightweight Bluetooth Low Energy driver written in pure Python for MicroPython.

https://github.com/dmazzella/uble

Discussion on the MicroPython Forum

https://forum.micropython.org/viewtopic.php?t=2950

Hardware support

Evaluation

Definitively worth a look…

Auch wenn die Frage von @poesel ursprünglich der Unterstützung für ESP32 MCUs galt, könnte man sich auch andere Hardware ansehen.

Als Entwicklungsboards wurden an verschiedenen Stellen folgende Geräte genannt, auf denen der Nordic nRF51822 integriert ist und die von der oben genannten GitHub - adafruit/Adafruit_CircuitPython_BLE: Bluetooth Low Energy (BLE) library for CircuitPython unterstützt werden sollen.


  1. CircuitPython ist die MicroPython-Distribution von Adafruit, die vor allem für die neue Produktreihe um Cortex-M0 bzw. -M4 Prozessoren entwickelt wird, mit der Blinka Kompatibilitätsbibliothek jedoch auch auf SBCs (RaspberryPi, BeagleBone) eingesetzt werden kann, siehe State of the onion for CircuitPython ff. ↩︎

1 Like

MicroPython nrf port

Der Support für den Nordic Chipsatz ist bereits ab Werk auch im Vanilla MicroPython vorhanden. Bzw. sogar andersherum: Seit MicroPython 1.10 gibt es einen Port für Nordic nRF5x MCUs.

BLE support

Again, we are still interested in BLE support. Links to these resources might reveil relevant things to look into.

Da in dem Nordic Gerät bereits ein Cortex M0 eingebettet ist und kürzlich ein entsprechender Port für MicroPython hinzukam, ist es wahrscheinlich möglich, MicroPython direkt auf einer solchen Briefmarke zu betreiben (und hoffentlich auch per Bluetooth funken zu können)

Bei api_repl.py bzw. MicroPython WebBluetooth REPL gibt es eine MicroPython WebBluetooth REPL basierend auf GAP und GATT.

– via: Bluetooth Low Energy (BLE) library - Page 2 - MicroPython Forum

Hilft uns das weiter?

https://docs.pycom.io/firmwareapi/pycom/network/bluetooth/gatt/

Das ist die Frage! Da kamen wir ursprünglich her drüben bei…

ubluepy

Another C-level library by Glenn Ruben Bakke implemented as an external cmodule to MicroPython supporting the nrf5x device series.

https://github.com/glennrub/ubluepy

…but you still need to link against their SoftDevice S110 blob resp. the underlying OS already has this exact same proprietary thing.

SoftDevice S110

Thanks!

There are some references to the SoftDevice S110 scattered in the code at ble_drv.c. There also seem to be advanced versions or variants like 132, 140.

Integration is done by downloading the appropriate blob while building MicroPython using download_ble_stack.sh, see also Compile and Flash with Bluetooth Stack.

nrfx

See also.

nrfx gets included into MicroPython by means of a Git submodule.