Benutzer-Werkzeuge

Webseiten-Werkzeuge


software:controller:vzlogger:vzlogger_rpi_pico

Vorwort

Die Portierung des vzloggers auf den Raspberry Pico W war/ist ein „Bastelprojekt“ insb mit der Motivation „das müsste doch gehen“ und der aktuelle Zustand ist „funktioniert mit ein paar noch zu behebenden Schönheitsfehlern“ (siehe ganz unten TODO), wozu jede Hilfe gern angenommen wird. Eine weitere Motivation war die Verfügbarkeit von analogen GPIO Ports (on-board ADC).

Der RPi Pico W („W“ für on-board WiFi - alles andere macht es noch komplizierter und lohnt vermutlich nicht) ist im Gegensatz zum „normalen“ Raspberry Pi ein „Microcontroller“ mit einem RP2040 Chip. Dies bedeutet insb:

  • kein Betriebssystem (es gibt quasi nur ein einziges Executable)
  • damit kein Filesystem (damit kein logging, kein config, …)
  • rudimentärer Satz von POSIX System calls, insb keine pthreads
  • sehr eingeschränkter RAM sowie Flash-Memory

Versuche, libcurl zu portieren, hatten sich als sehr aufwändig herausgestellt und wurden beendet. Vorhanden ist eine IP Implementierung „lwip“ (sowie bei Bedarf sogar „mbedtls“ als TLS Implementierung, bisher nicht genutzt).

In der Konsequenz heisst das:

  • Embedded config als JSON-String
  • Logging nach stdout, über USB sichtbar, solange der Pico an einem „richtigen“ Computer am USB-Anschluss hängt (gleichzeitig Stromversorgung)
  • Ersetzen von pthreads durch main-loop Konzept
  • Minimale Implemetierung (kein embedded httpd, kein Push-Server, kein MQTT, keine SML/S2/D2/mbus/… Protokolle - diese könnten aber vermutlich noch hinzugefügt werden)
  • Ersetzen von Curl durch lwip-API

Dies wiederum erforderte ein paar Umstrukturierungen - der resultierende Code ist aber sowohl auf dem RPi Pico als auch einem normalen RPi lauffähig (muss natürlich separat gebaut werden).

Install PICO Dev-Kit

Siehe Doc hier:

https://www.raspberrypi.com/documentation/microcontrollers/c_sdk.html
https://datasheets.raspberrypi.com/pico/getting-started-with-pico.pdf
$ mkdir ~/projects/pico
$ cd ~/projects/pico
$ git clone https://github.com/raspberrypi/pico-sdk.git --branch master
$ cd pico-sdk
$ git submodule update --init
$ cd ..
$ git clone https://github.com/raspberrypi/pico-examples.git --branch master

Clone GIT repo

$ mkdir ~/projects/vzlogger/pico
$ cd ~/projects/vzlogger/pico
$ git clone https://github.com/tge12/vzlogger

Es gibt 2 CMakeLists.txt Varianten - linke die Passende (ja, das ist hässlich, noch TODO):

$ ln -sf CMakeLists-pico.txt CMakeLists.txt

Clone json-c lib sources

Diese müssen selbst compiliert werden, da eine „fertige“ lib für den RPi Pico nicht zu finden war/ist.

$ cd ~/projects/vzlogger/pico/libs/json-c
$ git clone https://github.com/json-c/json-c .

Auch hier sind ein paar Anpassungen nötig, um die lib json-c kompilierbar zu machen für den RPi Pico (TODO auch hässlich und zu verbessern, evtl sind Erweiterungen im Bauprozess in der lib json-c nötig):

$ cp ../json-c-vz/* .

Bauen

$ cd ~/projects/vzlogger/pico
$ mkdir build
$ cd build
$ cmake -DPICO_BOARD=pico_w ..
...
$ make
...

Wenn alles klappt, kommt ein File namens …/build/src/vzlogger.uf2 dabei raus, welches auf den RPi Pico kopiert werden kann wie in der Pico SDK Doc beschrieben.

TODOs

  • Die cmake Infrastruktur ist noch sehr unschön
  • Das handling von malloc/free usw funktioniert offenbar anders, so dass auch ohne erkennbare memory leaks nach einer Weile der verfügbare Heap-Space aufgebraucht ist und das Programm „abstürzt“. Dies wird im Moment abgefangen und mit einem hardware reset beendet, so dass alles direkt weiterläuft. Dies funktioniert allerdings auch nur 90% zuverlässig. Weitere Erkenntnisse u Details gern auf Nachfrage …
  • Das neu implementierte VZ Protokoll „SCT013“ funktioniert an sich sehr gut, es fehlt aber noch ein Spannungssensor, um korrekte Wirk/Scheinleistung zu berechnen. Grundlage dafür ist (derzeit nur irms):
https://github.com/openenergymonitor/EmonLib

Eine noch nicht realisierte/getestete Lösung könnte das hier sein:

https://boredomprojects.net/index.php/projects/home-energy-monitor#h3-1-1-hardware
software/controller/vzlogger/vzlogger_rpi_pico.txt · Zuletzt geändert: 2024/06/05 17:03 von tge