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.
Kriegt man die pycom Firmware auf einen normalen ESP32 überhaupt drauf? Genauer gesagt einen WROVER mit 4MB + 4MB PSRAM?
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.
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.
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].
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.
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! ;-)
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].
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 ausprobieren zu können. ↩︎
@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.
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.
The problem was not with the content (that will be tackled next) but with the advertisement. Unbeknownst to me there is a 37 byte length limit to the advertisement (in the BT standard). Shortening the name from ‘hiveeyes’ to ‘h’ solved the problem.
I think I’ve been through every (free) BLE app in the Appstore by now.
Apart from “nRF Connect” “BLE Hero”, “BLE”, “LightBlue” & “BLE Scanner” are suitable for our cause.
Short update: I have successfully advertised the existence of an ESP32 node to a GPy central, connected them and sent weight and battery level from the ESP32 to the GPy.
TODO:
add temperature and humidity
add non-standard services for more sensors
add a means to give an unique name to a node through a service
handle several nodes on the central
synchronise time between central and node
synchronize sleep between devices
The code is behind the link below. Its a standalone test and not integrated into the firmware, yet. That speeds up debugging.