Neuigkeiten    Das Projekt    Technik    RoboSpatium    Unterstützung    Stichwortverzeichnis    Download    Reaktionen    Spiele    Gadgets    Kontakt   




<<< C: GPIOs zur Signal-Ausgabe         Python: Puslweitenmodulation >>>

Python: Ein- und Ausschalten von GPIOs

Der Schaltplan zum Kapitel

Switching an LED via a GPIO using Python
Abbildung 1:
Um eine LED blinken lassen zu können, muss diese natürlich auch mit dem Raspberry Pi verkabelt werden. Alles zum korrekten Anschließen von LEDs an GPIOs gibt's im Kapitel zu LEDs mit Hilfe von GPIOs schalten.
Welche Pins welche Funktion haben, ist im Kapitel zur Hardware des Raspberry Pi nachzulesen.

Was ist Python?

Computer verarbeiten Daten im Dualsystem. Programmcode muss also in Form von Nullen und Einsen vorliegen. Derartigen Code direkt zu schreiben ist möglich, aber seeeehr abstrakt. Daher hat man schon früh damit begonnen, sogenannte Interpreter Software zu programmieren. Diese verwandelt von Menschen einfacher zu lesenden Text in den von Computern ausführbaren Code aus Dualzahlen. Der Python-Interpreter macht genau das. Der zu schreibende Programmtext kann allerdings nicht frei formuliert werden, sondern muss den Regeln dieser Programmiersprache entsprechen. Die Textzeile:
Schalte GPIO Nummer 16 ein
Kann der Python Interpreter nicht verarbeiten. Diese muss wie folgt lauten:
GPIO.output(16, GPIO.HIGH)
Die Textzeile mus genau so lauten. Selbst Groß- und Kleinschreibung ist genauestens einzuhalten. Die Zeile:
gpio.output(16, GPIO.HIGH)
kann vom Python-Interpreter ebenfalls nicht verarbeitet werden. Vor der eigentlichen Zeile, welche den Befehl zum Einschalten des GPIO repräsentiert, sind weitere Befehle nötig, um den GPIO vorzubereiten. Kommen wir somit zu dem kompletten...

Python Skript zum Ein- und Ausschalten eines GPIO

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#!/usr/bin/env python  
 
# Make special commands available to your source code  
# by importing code lines from outside this file  
 
import RPi.GPIO as GPIO # needed to switch GPIOs  
from time import sleep  # needed to make command "sleep" available  
 
 
# Choose BOARD pin numbering  
# On the Raspberry Pi, pin 1 ist the 3.3V pin on top left  
# pin 2 is +5V pin on top right and so on.  
# Only numbers that represent a GPIO pin are valid  
 
GPIO.setmode(GPIO.BOARD)  
 
# Set GPIO number 16 to output mode  
GPIO.setup(16, GPIO.OUT)  
 
# Define a variable and set it to 0  
loopCount = 0  
 
# Check if loopCount is lower than 3 and  
# execute code below the while statement that is intended  
# as long as that statement is true.  
# In this example, the LED blinks as long as loopCount is lower than 3  
# which is true for three loop runs  
 
while (loopCount < 3):         # While statement must end with :  
      
    # All code lines intended are executed  
    # as long as the while condition above is TRUE.  
    # If the condition is FALSE, those lines are skipped.  
      
    GPIO.output(16, GPIO.HIGH) # Turn LED ON  
    sleep(0.1)                 # Do nothing for 0.1 seconds  
    GPIO.output(16, GPIO.LOW)  # Turn LED OFF  
    sleep(1)                   # Do nothing for 1 second  
    loopCount = loopCount + 1  # Increase loopCount by 1  
      
    # Python now goes back to the while statement  
    # and checks the condition again.  
    # If that is FALSE, the program continues with the lines below.  
 
# While loop ends here  
# Blink LED once more, now on for 2 seconds  
 
GPIO.output(16, GPIO.HIGH) # Turn LED ON  
sleep(2)                   # Do nothing for 2 seconds  
GPIO.output(16, GPIO.LOW)  # Turn LED OFF  
 
# Free all GPIOs for use in other programs  
GPIO.cleanup()  
 
# Finally print a message that the script has reached the end  
print ("...all done, end of script reached!")  
    
Der Python Interpreter ignoriert sämtlichen Text, der hinter dem Sonderzeichen "#" steht. Somit können Kommentare im Klartext in den Programmcode geschrieben werden. Derartige Kommetare sollten überall dort eingefügt werden, wo es sinnvoll erscheint, Erklärungen abzugeben, welchen Zweck einen Programmteil erfüllen soll. In dem obigen Beispiel habe ich jede Zeile kommentiert, da dieses für Anfänger in Sachen Python Programmierung gedacht ist. Wer nur ein wenig geübt ist, wird sofort erkennen, dass die Zeile:
GPIO.output(16, GPIO.HIGH)
Den Pin 16 einschaltet. Den Kommentar dahinter kann man sich also sparen. Wie viele Kommentare ihr einfügt, bleibt einzig und alleine euch überlassen. Denkt aber daran, dass ihr ein Programm mit unter nach Jahren mal wieder ändern müsst, weil sich ein Fehler eingeschlichen hat oder ihr etwas erweitern möchtet und dann sind Kommentare Gold wert! Prinzipiell können aber auch alle Kommentare aus dem Skript wntfernt werden. Dieses läft dann genau so wie mit den Kommentaren.
Ein Sonderfall ist der allererste Kommentar:
#!/usr/bin/env python
Dieser muss in der ersten Zeile stehen! Mit dieser Zeile wird dem Betriebssystem angezeigt, dass diese Textdatei ein Python Quelltext ist und somit über den entsprechenden Interpreter aufgerufen werden muss.

Ausführen des Python Skripts

Wird die Textdatei unter dem Namen "blink.py" gespeichert, so kann diese auf zweierlei Arten über die Kommandozeile gestartet werden:
Entweder durch Aufrufen des Python Interpreters mit der Übergabe des Dateinamens als Parameter:
python blink.py
oder indem die Datei als ausführbare Datei deklariert wird:
chmod a+x blink.py
und diese anschließend wie ein Programm gestartet wird:
./blink.py
"./" vor dem Dateinamen darf nicht vergessen werden! Ferner müsst ihr vor Aufrufen der oben angegebenen Befehle in das Verzeichnis wechseln, in dem ihr die Datei "blink.py" zuvor gespeichert habt. Die zweite Version funktioniert nur, wenn die erste Zeile im Script, wie bereits geschrieben:
#!/usr/bin/env python
lautet!

Programmfehler

Der Python Interpreter gibt Meldungen aus, wenn etwas im Programmcode nicht so geschrieben ist, wie erwartet. Das können Warnmeldungen sein, die den Programmablauf (scheinbar) nicht beeinflussen oder Fehler, die dazu führen, dass die Ausführung beendet wird. Diese Meldungen sind dazu gedacht, gelesen und beachtet zu werden! Wichtigste Angabe ist die Programmzeile, an welcher der Fehler aufgetreten ist. Wenn ihr im Netz nach Beschreibungen zu der Fehlermeldung sucht, wird euch geholfen, aber NEIN, ihr solltet als Anfänger nicht gleich wegen jedem Sch... einen neuen Post in den entsprechenden Foren setzen! Sucht weiter, bis ihr die Antwort gefunden habt, denn Anfängerfehler haben schon abertausende von Anfängern vor euch gemacht! Findet die Antwort, bevor ihr andere Menschen mit euren Problemchen bombardiert! Ich habe bislang zu allen Fragestellungen eine Lösung im Netz gefunden ohne einen Post zu setzen - bisweilen recherchiert man schon so einige Stunden. Ja, programmieren ist nicht an einem Nachmittag erlernt und so manches Problem wird euch über Tage hinweg beschäftigen, bevor ihr die Lösung gefunden habt. Das ist halt so! Bedenkt, dass ihr als Programmierer den Willen haben müsst, über das "Setup.exe-Klicker" Niveau herauszuwachsen. In einer zunehmend technisierten Welt erhaltet ihr somit Einblicke in die Datenverarbeitung, welche den "Muggels" für immer verborgen bleiben.
Habt aber keine Scheu davor, einen Kommentar auf meinen Seiten zu hinterlassen, wenn ihr Fehler entdeckt, etwas nicht verstanden habt (was, genau?) oder nach eurer Ansicht Informationen fehlen (welche, genau?).


<<< C: GPIOs zur Signal-Ausgabe         Python: Puslweitenmodulation >>>


Neuigkeiten    Das Projekt    Technik    RoboSpatium    Unterstützung    Stichwortverzeichnis    Archiv    Download    Reaktionen    Spiele    Verweise    Gadgets    Kontakt    Impressum   





Twitter YouTube Hackaday Patreon TPO