Herzlich willkommen zu diesem Tutorial, in dem wir uns mit der Speicherung von Messwerten in MicroPython beschäftigen! Ob kleine Logdateien oder regelmäßige Temperaturmessungen – wir zeigen dir, wie du deine Daten zuverlässig auf dem internen Flash-Speicher oder einer SD-Karte ablegen kannst. Wir vergleichen die Vor- und Nachteile beider Speicherorte, gehen auf die Grenzen der Dateisysteme ein und geben dir Tipps für sicheres Schreiben. Los geht's!
Für die Speicherung der Daten selbst ist kein spezieller Schaltplan erforderlich, da wir direkt auf den internen Speicher oder die SD-Karte zugreifen. Wenn du jedoch einen Temperatursensor verwendest, verbinde ihn gemäß den Anweisungen des Sensors mit den entsprechenden GPIO-Pins des Raspberry Pi Pico. Ein typischer Anschluss für einen DHT22 Sensor wäre:
Verwende eine Breadboard oder direkt Jumperkabel für die Verbindung.
Hier ist ein Beispielcode, der regelmäßig Temperaturdaten von einem DHT22 Sensor liest und sie entweder im internen Flash oder auf einer SD-Karte speichert.
import machine
import time
import os
# SD-Karten-Funktionen (optional)
try:
import sdcard
import uos
sd = machine.SDCard(machine.SPI(1, sck=machine.Pin(10), mosi=machine.Pin(11), miso=machine.Pin(12)), machine.Pin(9))
uos.mount(sd, "/sd")
sd_mounted = True
print("SD-Karte erfolgreich gemountet.")
except Exception as e:
print(f"SD-Karten-Mount fehlgeschlagen: {e}")
sd_mounted = False
# Temperatursensor (DHT22)
try:
import dht
sensor = dht.DHT22(machine.Pin(15))
sensor_available = True
print("DHT22 Sensor gefunden.")
except ImportError:
print("DHT library nicht installiert. Temperatur wird nicht gemessen.")
sensor_available = False
except Exception as e:
print(f"Fehler beim Initialisieren des DHT22 Sensors: {e}")
sensor_available = False
# Konfiguration
SPEICHERORT = "/sd/temperature_log.txt" if sd_mounted else "temperature_log.txt" # wähle "/sd/..." für SD-Karte oder "..." für internen Speicher
MESSINTERVALL_SEKUNDEN = 60
def log_temperature(temperature):
"""Schreibt die Temperatur in die Logdatei."""
try:
with open(SPEICHERORT, "a") as file: # "a" für append (anhängen)
timestamp = time.localtime()
formatted_time = "{:04d}-{:02d}-{:02d} {:02d}:{:02d}:{:02d}".format(
timestamp[0], timestamp[1], timestamp[2], timestamp[3], timestamp[4], timestamp[5]
)
log_entry = f"{formatted_time}, {temperature:.2f}\n" # Formatiere den Eintrag
file.write(log_entry) # Schreibe in die Datei
file.flush() # Stelle sicher, dass die Daten geschrieben werden
print(f"Temperatur {temperature:.2f} °C protokolliert.")
except OSError as e:
print(f"Fehler beim Schreiben in die Datei: {e}")
# Hauptschleife
while True:
try:
if sensor_available:
sensor.measure() # Messe Temperatur und Luftfeuchtigkeit
temperature = sensor.temperature()
log_temperature(temperature)
else:
# Beispiel ohne Sensor: Schreibe Dummy-Daten
log_temperature(25.5)
except Exception as e:
print(f"Unerwarteter Fehler: {e}")
time.sleep(MESSINTERVALL_SEKUNDEN)
import
: Importiert notwendige Bibliotheken wie machine
für Hardwarezugriff, time
für Zeitfunktionen und os
für Dateisystemoperationen.sd_mounted
entsprechend.sensor_available
auf False
gesetzt und es werden Dummy-Daten geloggt.SPEICHERORT
: Definiert den Speicherort der Logdatei. Hier wählst du entweder den internen Flash-Speicher ("temperature_log.txt
") oder die SD-Karte ("/sd/temperature_log.txt
"). Beachte den /sd/
Präfix für die SD-Karte.log_temperature(temperature)
: Diese Funktion schreibt die übergebene Temperatur zusammen mit einem Zeitstempel in die Logdatei. Sie verwendet open()
mit dem Modus "a"
(append), um die Daten an die bestehende Datei anzuhängen.
try...except
: Der Code ist in einem try...except
Block eingebettet, um Fehler beim Schreiben in die Datei abzufangen.with open(...)
: Die Verwendung von with open(...)
sorgt dafür, dass die Datei automatisch geschlossen wird, auch wenn Fehler auftreten.file.flush()
: Diese Zeile ist wichtig, um sicherzustellen, dass die Daten tatsächlich auf das Speichermedium geschrieben werden. Ohne flush()
kann es zu Datenverlusten kommen, insbesondere bei häufigen Schreibvorgängen.while True
Schleife liest periodisch die Temperatur (wenn der Sensor verfügbar ist) und speichert sie in der Logdatei. Auch hier ist ein try...except
Block, um unerwartete Fehler abzufangen.time.sleep()
: Pausiert das Programm für die angegebene Anzahl von Sekunden.In diesem Tutorial haben wir gelernt, wie man Messwerte in MicroPython speichert, sowohl auf dem internen Flash-Speicher als auch auf einer SD-Karte. Wir haben die Vor- und Nachteile beider Speicherorte verglichen, ein Beispielprogramm erstellt, das Temperaturdaten speichert, und Tipps für sicheres Schreiben und Fehlerbehandlung gegeben. Denke daran, file.flush()
zu verwenden, try...except
Blöcke einzusetzen und die Grenzen der Speichermedien zu beachten. Viel Erfolg beim Speichern deiner Daten!