13.5. MicroPython-Tools

Das MicroPython-Projekt liefert neben der Sprache selbst auch eine Host-seitige Toolchain mit. Zwei dieser Tools sind für jeden OpenMV-Cam-Workflow nützlich, der außerhalb der IDE stattfindet; beide lassen sich mit einem einzigen Befehl von PyPI installieren und beide arbeiten mit derselben USB-Seriell-/Dateisystem-Schnittstelle, die die Cam ohnehin bereitstellt.

13.5.1. mpremote

mpremote ist eine CLI-Alternative zur OpenMV IDE. Ein einziger Befehl deckt das ab, was die IDE über ihren Dateibrowser, das Terminal und die Schaltfläche zum Ausführen von Skripten erledigt: über USB-Seriell eine Verbindung zu einer Cam herstellen, die REPL steuern, Dateien in das Dateisystem der Cam hinein- und herauskopieren, ein Host-seitiges Skript auf der Cam ausführen, ohne es hochzuladen, und Drittanbieter-Pakete mit mip installieren:

$ pip install --user mpremote
$ mpremote                          # interactive REPL
$ mpremote cp main.py :             # upload to cam
$ mpremote run local_script.py      # run host script on cam
$ mpremote ls                       # list cam filesystem
$ mpremote mip install aioble       # install package on cam

Dies ist das richtige Tool für automatisierte Testaufbauten, Headless-Deployments, CI-Skripte, die ein frisches Image flashen und einen Smoke-Test ausführen, sowie für jeden Workflow, bei dem der Einsatz einer GUI überdimensioniert wäre. Die mpremote-Referenz dokumentiert jeden Befehl und jede Option.

13.5.2. mpy-cross

mpy-cross ist der Cross-Compiler, der eine .py-Quelldatei in einen binären .mpy-Container umwandelt, der auf der Cam importbereit ist. Das vorzeitige Kompilieren erspart der Cam das Parsen des Quellcodes beim Import, sorgt für einen kleineren Speicherbedarf auf der Festplatte und ist der einzige Weg für mit @native und @viper dekorierte Funktionen, die einen auf die MCU-Architektur der Cam abgestimmten Build benötigen:

$ pip install --user mpy-cross
$ mpy-cross foo.py
$ mpremote cp foo.mpy :

Für eingefrorene Module, die in das Firmware-Image eingebettet sind, sowie für ROMFS-Partitionen, die zusammen damit ausgeliefert werden, läuft dasselbe Tool automatisch als Teil des Firmware-Builds – das Build-System ruft mpy-cross für jede .py unter scripts/ auf, während es die .bin erzeugt. Der direkte Aufruf ist das, worauf eine Anwendung zurückgreift, wenn sie eine .mpy getrennt von der Firmware ausliefern oder den Compiler aus einem Build-Skript heraus steuern möchte.

Der Abschnitt zu mpy-cross der .mpy-Dateienreferenz behandelt die Befehlszeilen-Flags, die Optimierungsstufen, die -march-Matrix und die Python-Modul-Einstiegspunkte.