CircuitPython 8.0b2 erschienen – browserbasierter Workflow und andere Neuerungen

AdaFruit leistet sich mit CircuitPython seit längerer Zeit einen auf “einsteigerfreundlichere Bedienung” optimierten Fork von MicroPython. Die derzeit in Betaphase befindliche Beta 8.0 erweitert die Hardwareunterstützung (Stichwort WLAN am Pico W) und bietet neben einigen Komfortsteigerungen einen browserbasierten Workflow an. Diese Newsmeldung stellt besonders interessante Neuerungen en Detail vor.

(Bildquelle: AdaFruit)

Eine Frage der Zielhardware

CircuitPython unterstützt diverse Zielboards – vollständig stabil sind dabei die folgenden Portierungen:

1 atmelsamd: Microchip SAMD21, SAMx5x
2 cxd56: Sony Spresense
3 espressif: Espressif ESP32S2
4 nrf: Nordic nRF52840, nRF52833
5 raspberrypi: Raspberry Pi RP2040
6 stm: ST STM32F4 chip family

Im Beta- bzw Instabile-Status werden einige weitere Plattformen angeboten:

1These ports are considered alpha and will have bugs and missing functionality:
2 broadcom: Raspberry Pi boards such as RPi 4, RPi Zero 2W
3 espressif: ESP32S3, ESP32C3
4 litex: fomu
5 mimxrt10xx: NXP i.MX RT10xxx
6 stm: ST nonSTM32F4 chip families

Der Autor wird in den folgenden Schritten einen Adafruit CLUE und einen Raspberry Pi Pico W verwenden. Unter der URL https://circuitpython.org/board/clue_nrf52840_express/ findet man ein downloadfertiges Archiv der aktuellsten Beta (adafruit-circuitpython-clue_nrf52840_express-en_US-8.0.0-beta.1.uf2), die sich wie gewohnt auf den CLUE installieren lässt.

Fortgeschrittener .env-Parser erleichtert Konfiguration

CircuitPython 8.0 bringt – siehe auch https://docs.circuitpython.org/en/latest/docs/environment.html – einen .env-Dateiparser mit, der an Linux und Co erinnernde Umgebungsvariablen realisiert. Der wichtigste Anwendungsfall dafür ist die Konfiguration eines WLANs, unter dem ein unkonfiguriertes Board Kontakt zu Funknetzen aufzunehmen sucht.
Die im Rahmen des Start-Prozesses eingelesene Datei muss dabei nach folgendem Schema im Stammverzeichnis entstehen:

1tamhan@TAMHAN18:/media/tamhan/CIRCUITPY$ sudo touch .env
2tamhan@TAMHAN18:/media/tamhan/CIRCUITPY$ sudo gedit .env

Für eine grundlegende Exponierung des Web-Interfaces reicht folgender Inhalt aus:

1CIRCUITPY_WIFI_SSID=Tamoggemon Holding k.s. WiFi BA2
2CIRCUITPY_WIFI_PASSWORD=pwhierrein
3CIRCUITPY_WEB_API_PORT=80
4CIRCUITPY_WEB_API_PASSWORD=hallotam

Nach dem Abspeichern empfiehlt sich ein beherzter Druck auf den Reset-Knopf, um den Prozessrechner neu zu starten. Er präsentiert dann das in Abbildung eins gezeigte Schirmbild.

Bildquelle: Tamoggemon Holding KS.

Auffällig ist hier die am oberen Bildschirmrand eingeblendete Statusleiste, die über den Zustand des Boards informiert.

Browserbasierte Interaktion mit dem Evaluationsboard

Das Ausliefern und Ausführen von Code wird in der Welt von CircuitPython als „Workflow“ bezeichnet. Unter der URL https://docs.circuitpython.org/en/latest/docs/workflows.html finden sich weitere Informationen zu den verschiedenen möglichen Workflows. Wir wollen hier – schon im Interesse der Lustigkeit – den neuen, browser basierten Workflow verwenden. Er setzt eine WLAN-Verbindung voraus, die durch Nutzung der .env-Datei konfiguriert werden kann.
Da der Clue kein WLAN-Modul mitbringt, müssen wir an dieser Stelle auf den Raspberry Pi Pico W umstellen. Der „für ihn“ vorgesehene Python-Port liegt unter der URL https://circuitpython.org/board/raspberry_pi_pico_w/, und lässt sich wie jede andere .UF 2-Datei installieren.
Nach einem Neustart kann ein Nmap-Lauf für Klarheit sorgen – zum Zeitpunkt der Abfassung dieses Artikels scheint der Raspberry Pi Pico W allerdings noch nicht im WLAN auf. Nach dem Starten des Mu-Editors können Sie in der REPL nach folgendem Schema die IP-Adresse überprüfen:

1>>> import wifi
2>>> print(“My IP address is”, wifi.radio.ipv4_address)
3My IP address is 0.0.0.0

Das Zurückgeben von 0.0.0.0 informiert uns dann darüber, dass der automatische Verbindungsaufbau fehlgeschlagen ist. Dies lässt sich auf der Kommandozeile nach folgendem Schema beheben:

1>>> wifi.radio.connect(“Tamoggemon Holding k.s. WiFi BA2”, “passhier”)
2>>> print(“My IP address is”, wifi.radio.ipv4_address)
3My IP address is 192.168.2.133

Leider funktioniert der Workflow zum Zeitpunkt der Drucklegung überhaupt nicht – ein Nmap-Scan zeigt nun wie in der Abbildung gezeigt, dass keine offenen Ports zur Verfügung stehen.

Bildquelle: Tamoggemon Holding K. S.

Unter der URL https://www.youtube.com/watch?v=Lgo6Eq1EIuc&t=550s bietet Adafruit allerdings ein Video an, das die Nutzung des Webeditors auf einem ESP32-Board demonstriert. Besonders interessant ist daran, dass der Codeeditor – analog zu Threema Web – den Gutteil der Ressourcen nicht aus dem Speicher des Boards, sondern aus dem Internet beschafft.

Bildquelle: AdaFruit

Wer die URL https://code.circuitpython.org/ aufruft, findet ausserdem schon jetzt den in der Abbildung gezeigten Codeeditor.

Bildquelle: Screenshot

DMA-AD und DMA-DA

Dass DMA-Modi bei AD- und DA-Konvertern insbesondere im Zusammenspiel mit emulierten Sprachen zu einer Performance-Steigerung führen, dürfte bekannt sein – Interaktionen mit der HAL sind und bleiben nun mal Performance-ineffizient.
Mit dem unter https://docs.circuitpython.org/en/latest/shared-bindings/analogbufio/index.html#module-analogbufio im Detail beschriebenen analogbufio-Feature bekommt CircuitPython nun eine neue Funktion, die – derzeit nur am RP 2040 – nach folgendem Schema ganze Puffer ein- oder ausliest:

1import analogbufio
2import array
3from board import *
4
5length = 5000000
6mybuffer = array.array(“H”, 0x0000 for i in range(length))
7adc_in = analogbufio.BufferedIn(GP26, mybuffer, length)
8analogbufio.read()
9print(*mybuffer)
10adc_in.deinit()

Mehr erfahren

Die in den Release Notes angeführten Änderungslisten fallen im Allgemeinen sehr kompakt aus. Unter der URL https://docs.circuitpython.org/en/latest/ findet der geneigte Leser allerdings eine Version der Onlinedokumente, die auf die aktuellste Betaversion der Runtime zugeschnitten sind.

Zuerst erschienen bei Mikrocontroller.net News

Quelle: Read More