Instructions
62
GPIO.setmode(GPIO.BCM)
LED = [4,18,23]
for i in range(3):
GPIO.setup(LED[i], GPIO.OUT, initial=False)
Eine Liste definiert die GPIO-Portnummern der drei LEDs. Danach initialisiert eine Schleife die drei GPIO-
Ports als Ausgänge und setzt alle LEDs auf ausgeschaltet.
Auch in diesem Experiment verwenden wir eine
try...except-Konstruktion und eine Endlosschleife, um
das Programm automatisch immer wieder laufen zu lassen, bis es der Benutzer mit
[Strg]+[C] abbricht.
Danach folgen die eigentlich interessanten Funktionen, die auf das Betriebssystem zugreifen und den freien
Speicherplatz abfragen.
s = os.statvfs('/') Das Statistikmodul os.statvfs() aus der os-Bibliothek liefert diverse statistische
Informationen zum Dateisystem, die hier innerhalb der Endlosschleife bei jedem Schleifendurchlauf aufs
Neue als Objekt in die Variable
s geschrieben werden.
f = s.f_bsize * s.f_bavail / 1048576 Jetzt liefert die Methode s.f_bsize die Größe eines Speicherblocks
in Byte.
s.f_bavail gibt die Anzahl freier Blöcke an. Das Produkt aus beiden Werten gibt demnach die
Anzahl freier Bytes an, die hier durch 1.048.576 geteilt wird, um die Anzahl freier Megabytes zu erhalten. Das
Ergebnis wird in der Variablen
f gespeichert.
if f < g1:
x = "100"
Ist der freie Speicherplatz kleiner als der erste Grenzwert (1 MB), wird die Zeichenfolge x, die das Muster der
eingeschalteten LEDs angibt, auf
"100" gesetzt. Die erste, rote LED soll leuchten. Das Muster ist eine einfache
Zeichenkette aus den Ziffern 0 und 1.
elif f < g2:
x = "110"
elif f < g3:
x = "010"
elif f < g4:
x = "011"
Mithilfe von elif-Abfragen werden die weiteren Grenzwerte abgefragt und die LED-Muster entsprechend
gesetzt, wenn die erste Frage nicht zutrifft, also mehr als 1 MB freier Speicherplatz vorhanden ist.
else:
x = "001"
Sollte keine der Abfragen zutreffen, also mehr freier Speicherplatz vorhanden sein, als der höchste Grenzwert
angibt, wird das LED-Muster auf
"001" gesetzt. Die letzte, grüne LED soll leuchten.
for i in range(3):
GPIO.output(LED[i], int(x[i]))