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!

11. Januar 2021 · Kommentare deaktiviert für Herzlich Willkommen auf meiner Website! · Kategorien: Allgemein

Diese Website ist ein rein privates Projekt. Es verfolgt keinerlei kommerzielle Ziele. Deshalb werden von mir auch keine persönlichen Daten gespeichert. Deshalb kann sich auch niemand auf dieser Website anmelden und Kommentare hinterlassen. Der Provider (1blu.de) speichert die Verbindungsdaten für einen begrenzten Zeitraum.

Dieser Blog dient mir dazu meine Projekte zu dokumentieren und meine Erfahrungen damit festzuhalten. Er ist im Internet frei zugänglich, damit auch Andere von meinen Erfahrungen profitieren können. Schließlich muss nicht jeder das Rad selbst erfinden.

Mein Beiträge sind keine Bauanleitungen! Es besteht kein Anspruch darauf, dass die vorgestellten Projekte bei einem Nachbau funktionieren! Sollten dabei Schäden entstehen, so ist dafür der Nachbauer verantwortlich. Schließlich sollte jeder wissen was er tut. Ich schließe jede Haftung aus.

Die Beiträge können nur als Anregung angesehen werden.

Wenn Du mir etwas mitteilen möchtest, so schicke mir unter peter@peters-bastelkiste.de eine Email.

Viel Spaß beim Stöbern.

Peter

Ich würde gerne in einem ESPNow-Netzwerk auch mit dem PC mitmachen. Vor allem, um einem Programm auf dem PC den Zugriff auf Geräte im ESPNow-Netzwerk zu ermöglichen. Deshalb habe ich mit einem M5ATOM lite ein entsprechendes Programm entworfen.

Hier ist der erste funktionsfähige Entwurf:

Der erste funktionsfähige Entwurf von E2S (ESPNowAdapter_001.m5f)

An diesem Entwurf gibt es noch viel zu tun. Die grundlegende Brückenfunktion zwischen ESPNow und PC funktionieren aber schon. Bisher können auf der ESPNow Seite aber nur Broadcast-Nachrichten benutzt werden. Später wird es erforderlich sein auch mit einzelnen Geräten direkt zu kommunizieren.

Die Variable serialmode wurde eingebaut, um ggf. den Echobetrieb, wie er standardmässig von Putty verwendet wird zu unterstützen. Sonst sieht man nicht was man schreibt. Das ist aber nur für Terminalbetrieb sinnvoll. Man kann natürlich auch im Terminalprogramm den Echomodus abschalten. Wenn ein Programm auf das ESPNow-Netzwerk zugreift, weiß es was es tut und benötigt die Rückmeldung nicht, es wird dadurch eher verwirrt.

Die serielle Schnittstelle (UART) ist mit den Pins 1 und 3 verbunden. Das ist der Anschluß des Seriell zu USB-Wandlers. Deshalb kann der PC einfach mit einem USB-Kabel angeschlossen werden. Über die entsprechende COM-Schnittstelle kann dann das ESPNow-Netzwerk erreicht werden.

Fortsetzung folgt …

2. Anlauf

Beim ersten Versuch habe ich als Hardware einen M5ATOM lite genommen. Nun wollte ich aber mehr Kontrolle über das Geschehen haben und auf einen M5Sick C+ zurückgegriffen, der gerade auf dem Arbeitsplatz herum lag. Die empfangenen Daten werden jetzt auf dem Display angezeigt.

So sieht das ganze Programm aus:

Das Zweite Programm für den M5Stick C+ (ESPNowAdapter_004.m5f)

Da die Einzelheiten darauf nur schlecht zu erkennen sind folgen jetzt die 3 Blöcke einzeln:

Das Hauptprogramm

Hauptprogramm

Display darstellen.

Diese Funktion stellt die Informationen auf dem Display dar. Allerdings nur halbherzig. Es gibt nur die seriell empfangenen Daten aus. Da es mir in diesem Programm nicht auf ein perfektes Design, sondern auf den Funktionalität ankommt, habe ich keine weitere Zeit inverstiert. Wird vielleicht später nachgeholt.

Funktion: refresh_screen

Die ESP Now Empfangsroutine

ESP Now arbeitet interruptgesteuert. Wenn eine Nachricht eintrifft, wird ein Inerrupt ausgelöst, das Hauptprogramm unterbrochen und die Interrupt Service Routine abgearbeitet. Also das was im nächsten Bild zu sehen ist. Anschließend wird das Hauptprogramm dort fortgesetzt wo es unterbrochen wurde.

Die Interrupt Service Routine für den ESP Now Empfang

Auf der seriellen Seite sieht es in einem Terminal u.B. so aus:

Terminalfesnster

Die letzte, die drittletzte und die fünftletzte Zeile wurden vom Terminal zum ESP Now Netz geschickt.

Es gibt keinen speziellen HOME-Button – stattdessen auf den Schriftzug „Peter’s Bastelkiste“ klicken!