Ein bytearray ist eine Python Datenstruktur, die eine Reihe von Byte-Werten (8-Bit, 0 – 255) enthält. Die Daten können verändert werden.

Diese Datenstruktur gibt es auch in Micropython. Hier wurde sie aber nicht vollständig implementiert. Das soll nun untersucht werden.

Hier habe ich die Beschreibung für Python gefunden: https://python-reference.readthedocs.io/en/latest/docs/functions/bytearray.html und diese mit Deepl.com übersetzt:

bytearray

Beschreibung

Gibt ein neues Array aus Bytes zurück.

Syntax

bytearray ([source[, encoding[,errors]]])

source Optional. Wenn die Quelle:

  • eine Zeichenkette ist, dann ist eine Kodierung erforderlich.
  • eine Ganzzahl ist, das Array hat diese Größe und wird mit Null-Bytes initialisiert.
  • ein Objekt ist, das der Pufferschnittstelle entspricht, ein schreibgeschützter Puffer des Objekts wird zur Initialisierung des Byte-Arrays verwendet.
  • ein Iterable ist, es muss ein Iterable von Ganzzahlen im Bereich 0-256 sein, die zur Initialisierung des Arrays verwendet werden
  • ohne ein Argument wird ein Array der Größe 0 erzeugt.

encoding Optional.

Erforderlich, wenn die Quelle eine Zeichenkette ist. Typische Werte: ‚ascii‘, ‚utf-8‘, ‚windows-1250‘, ‚windows-1252‘. Siehe Codecs-Modul für weitere Informationen.

errors Optional.

Mögliche Werte für errors sind:

  • strict‘: löst bei einem Kodierungsfehler eine Exception aus
  • replace“: ersetzt fehlerhafte Daten durch eine geeignete Ersatzmarkierung, z. B. ‚?‘ oder ‚ufffd‘.
  • ignore“: Fehlgeformte Daten ignorieren und ohne weitere Benachrichtigung fortfahren
  • xmlcharrefreplace‘: Ersetzen durch die entsprechende XML-Zeichenreferenz (nur bei Kodierung)
  • backslashreplace‘: Ersetzen durch Backslashed-Escape-Sequenzen (nur für Encoding)

Rückgabewert

bytearray

Ersetzen durch Backslashed-Escape-Sequenzen

Die führende Escape-Sequenz \x bedeutet, dass die nächsten beiden Zeichen als Hex-Ziffern für den Zeichencode interpretiert werden, also entspricht \xaa chr(0xaa).

Bemerkungen

Der Typ Bytearray ist eine veränderbare Folge von Ganzzahlen im Bereich 0 <= x < 256. Er kann verwendet werden, um mit Low-Level-Binärdaten zu arbeiten, wie z. B. innerhalb von Bildern oder direkt aus dem Netzwerk kommend.

Was geht in Micropython?

Die ersten Quelle (String) probieren. Zuerst in Thonny, dann die Ausgabe auf dem Display:

Funktioniert.

Die zweite Möglichkeit: eine Ganzzahl:

Funktioniert.

Die dritte Möglichkeit lasse ich aus, weil ich nicht weiss was das ist.

Die vierte Möglichkeit ist z.B. eine Liste. Das interessiert mich besonders.

So geht’s nicht. Aber auch im im „echten“ Python geht es nicht.

Nun nochmal mit Zahlen:

So geht’s. Auf ein Bild des Displays verzichte ich hier. Es sieht so aus wie man es erwartet.

Die Ausgabe zeigt die Darstellung in Hex-Schreibweise (\x). Wenn Hexzahlen eingegeben werden sollen ist zu beachten, dass hunter dem b nur einfache Anführungszeichen verwendet werden dürfen (b’…‘).

Nun der Vollständigkeit wegen noch die fünfte und letzte Möglichkeit:

Auch hier verhält sich die Displayausgabe genauso wie die im Terminalfenster.

Demzufolge verhält sich bytearray in Micropython genauso wie im „echten“ Python!

04. Februar 2021 · Kommentieren · Kategorien: M5Stack · Tags:

Was ist REPL ? Read–eval–print loop

MicroPython Interactive Interpreter Mode

Dieser Begriff beschreibt eine interaktive Programmierschleife, ähnlich wie IDLE Es geht darum einen Befehl einzulesen, auszuwerten und das Ergebnis auszugeben. Dazu wird eine Konsole mit einem Computer verbunden. Die Ein- und Ausgabe erfolgt am Terminal, die Auswertung/Verarbeitung im Computer.

Hier bedeutet das konkret, dass der M5Stick Cplus über seine USB-Schnittstelle mit dem PC verbunden wird. Dann wird ein Terminalprogramm wie Putty oder auch eine Python-IDE wie Thonny gestartet und dieses mit dem M5Stick Cplus verbunden. Die Tastenkombination Strg + C (Ctrl + C) gedrückt, ggf. mehrmals und dann kann man Micropython Code interaktiv eingeben. Die Ausgabe erfolgt je nach Kommando im Terminalprogramm oder auf dem Display des M5Stick Cplus.

M5Stick Cplus auf USB-Mode einstellen. Das ist wohl nicht erforderlich.

REPL unter Ubuntu 20.04

Ich hatte große Probleme zuverlässig eine REPL-Verbindung aufzubauen.

REPL mit PuTTY

Mit Putty ist es mir bisher noch nicht gelungen eine REPL einzurichten. Es kommt immer die Meldung, dass die serielle Schnittstelle nicht eingerichtet werden konnte.

REPL mit Thonny

Auch hier gab es spontan funktionierende Verbindungen und dann ging wieder gar nichts mehr. Zuletzt bin ich zu der Ansicht gelangt, das man am besten mit dem Stoppschild oben die letzte Verbindung beendet, mit Ctrl-D einen Softreset ausführt und dann mit Ctrl-C in die REPL gelangt. Das funktionierte zuletzt relativ zuverlässig.