Aus Raspberry Pi Geek 01/2025

MicroPython, Teil 6: Dateizugriff

© jjfarquitectos / 123RF.com

Persistent

Martin Mohr

Um Informationen dauerhaft zu speichern, ist die gute alte Datei das Mittel der Wahl. Wir klären, wie Sie die Funktion in MicroPython umsetzen.

Die Funktionen zum Dateizugriff in Python und MicroPython fallen weitgehend identisch aus. Dennoch gibt es einige wichtige Unterschiede. Dateien, die Sie unter MicroPython speichern, landen im Flash-Speicher des Controllers, der üblicherweise nicht besonders viel Platz bietet. Deswegen müssen Sie generell darauf achten, keine unnötigen Daten dort abzulegen.

Ein weiterer gravierender Nachteil von Flash-Speicher liegt in der begrenzten Anzahl von Löschzyklen: Je nach Qualität der verwendeten Bausteine rangiert sie zwischen 10 000 und 100 000. Das ist der Hauptgrund, warum Sie nicht zu oft auf diese Art von Speichermedium schreiben sollten. Obendrein handelt es sich bei den Speichern um einen Bestandteil des Controllers selbst, den Sie nicht austauschen können. Lesezugriffe dagegen sind für Flash-Speicher vollkommen unkritisch.

Um eine Vorstellung zu bekommen, was 10 000 Löschzyklen bedeuten, bietet sich ein kleines Rechenbeispiel an: Wenn Sie einmal in der Minute schreibend auf eine bestimmte Speicherstelle zugreifen, haben Sie nach knapp sieben Tagen diese Zyklenzahl bereits überschritten. Selbst bei 100 000 Zyklen hält der Speicher lediglich 70 Tage – nicht wirklich prickelnd, wenn Sie Messdaten über einen längeren Zeitraum erfassen möchten.

Um die Lebensdauer von Flash-Speicher zu verlängern, können Sie auf mehrere Strategien zurückgreifen. Eine besteht darin, den kompletten Speicherbereich stets sequenziell vollzuschreiben und dann große Bereiche zusammen zu löschen. Daneben sollten Sie versuchen, die Zugriffe möglichst gut über das komplette Medium zu verteilen. Ein weiterer Weg besteht darin, den Speicher zu überdimensionieren, weil dadurch die ersten beiden Strategien erfolgreicher sind. Zudem lassen sich die Schreibzugriffe minimieren, indem Sie möglichst viele Daten im RAM-Speicher puffern. Zu guter Letzt empfiehlt es sich außerdem, Daten, die sich oft ändern, auf Medien zu schreiben, die Sie austauschen können.

Wenn Sie mit MicroPython auf Dateiebene arbeiten, können Sie nur die drei letzten Punkte tatsächlich beeinflussen. Nach einer kurzen Einleitung, wie die Dateiverarbeitung unter MicroPython funktioniert, werden wir uns daher intensiver mit diesen Punkten beschäftigen.

Dateizugriff

Listing 1 enthält ein Beispielprogramm, das die häufigsten Formen des Dateizugriffs zeigt. Anhand der Ausgaben erkennen Sie, welche Operation gerade abläuft. Die offizielle Dokumentation [1] über die Dateizugriffe findet sich auf der MicroPython-Homepage.

Besondere Beachtung sollten Sie den letzten vier Zeilen des Listings schenken. Hier führt der Code über die Bibliothek Os Operationen auf dem Dateisystem des Mikrocontrollers aus [2]. Die Library stellt zahlreiche wichtige Betriebssystemdienste auf dem Controller bereit. In der Tabelle “Dateisystemoperationen in Os” sehen Sie eine Übersicht der für den Dateizugriff zuständigen Methoden.

Wie bereits erwähnt, steigt die Lebensdauer von Flash-Speichern, sobald Sie sie deutlich größer als nötig dimensionieren. Das führt direkt zur Frage, wie Sie einen Mikrocontroller mit zusätzlichem Flash-Speicher ausstatten können. Idealerweise sollte sich der zusätzliche Speicher zudem austauschen lassen. Die Antwort ist schnell gefunden: Sie erweitern den Controller kurzerhand mit handelsüblichen SD-Karten.

Listing 1

Dateizugriff in MicroPython

import os
datei = open('Test.txt', 'w')
print ("Datei erzeugt")
anzahlbytes = datei.write('Ei Gude, wie?')
print(str(anzahlbytes) + " Bytes geschrieben")
datei.close()
print("Datei geschlossen")
datei = open('Test.txt', 'a')
print ("Datei geöffnet")
print (datei.read())
print ("Datei gelesen")
anzahlbytes = datei.write('Babbegei')
print(str(anzahlbytes) + " Bytes angehängt")
datei.close()
datei = open('Test.txt', 'r')
print (datei.read())
print ("Datei gelesen")
datei.close()
print(os.listdir())
print ("Dateien auflisten")
os.remove("Test.txt")
print ("Datei löschen")

Methode

Funktion

os.chdir(Verzeichnis)

in das angegebene Verzeichnis wechseln

os.getcwd()

das aktuelle Verzeichnis zurückliefern

os.ilistdir(Verzeichnis)

Dateien im angegebenen Verzeichnis samt Eigenschaften anzeigen

os.listdir(Verzeichnis)

Dateien im angegebenen Verzeichnis anzeigen

os.mkdir(Verzeichnis)

Verzeichnis erstellen

os.remove(Datei)

Datei löschen

os.rmdir(Verzeichnis)

Verzeichnis löschen

os.rename(alt, neu)

Datei umbenennen

os.stat(Datei)

Dateistatus anzeigen

os.stat(Verzeichnis)

Verzeichnisstatus anzeigen

os.statvfs(Filesystem)

Dateisystemstatus anzeigen

os.sync()

alle Dateisysteme synchronisieren

Testaufbau

Für unseren Testaufbau nutzen wir den ESP32, der vier SD-Karten-Slots unterstützt. Allerdings sind die Slots 0 und 1 bereits für interne Zwecke belegt, weswegen für unseren Testaufbau lediglich Slot 2 und 3 übrig bleiben. Wir schließen die SD-Karten-Module an beide Slots an, wie der Schaltplan aus Abbildung 1 verrät. Die Module bestückten wir mit MicroSD-Karten. Sie lassen sich mithilfe der entsprechenden Bibliothek in das Dateisystem des MicroPython-Geräts einbinden. Den Testaufbau mit zwei SD-Karten-Modulen sehen Sie in Abbildung 2.

Abbildung 1: Der Schaltplan des Testaufbaus mit zwei SD-Karten-Modulen.

Abbildung 1: Der Schaltplan des Testaufbaus mit zwei SD-Karten-Modulen.

Abbildung 2: Der ESP32-Testaufbau mit den zwei SD-Karten-Modulen.

Abbildung 2: Der ESP32-Testaufbau mit den zwei SD-Karten-Modulen.

Programm

In Listing 2 finden Sie das Programm, das die SD-Karten in das Dateisystem des Controllers integriert. Es parametrisiert zuerst die zwei SPI-Schnittstellen, an denen die SD-Karten-Module hängen (Zeile 2 und 3). Dazu kommt eine Standardbibliothek [3] aus MicroPython zum Einsatz.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 3 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben