Viele Einsteiger bekommen einen Raspberry Pi geschenkt und haben oft kaum bis gar keine Programmierkenntnisse. Daher möchte ich in dieser Reihe an Tutorials die Hürde verkleinern und zum Programmieren Lernen mit dem Raspberry Pi anregen. Der große Vorteil ist, dass wir auch hardwarenahen Code schreiben können, womit wir die GPIO Pins des Raspberry Pi’s nutzen können.
Als Programmiersprache nehmen wir Python, da diese eine der am einfachst zu lernenden Sprachen für Anfänger ist und es nebenbei auch mitunter die meisten Referenzen dafür gibt.
Zubehör
Ein Hinweis vorweg: Die Tutorialreihe soll den Einstieg in die Programmierung am Raspberry Pi möglichst erleichtern, ist jedoch nicht als eigenständiger Kurs zu verstehen. Ein Buch ist zur Vertiefung und zum Nachschlagen sehr von Vorteil. Im Speziellen kann ich eines dieser beiden Bücher bzw. Online Kurs zum Lernen empfehlen:
- Komplettkurs: Programmieren mit Python 3
- reine Python Grundlagen: Einstieg in Python (Thomas Theis)
- Raspberry Pi programmieren mit Python (Michael Weigend)
Als Nachschlagewerk für Leute mit erster Erfahrung eignet sich auch dieses Buch von Johannes Ernesti.
Hardware
Für den Anfang benötigen wir folgendes Zubehör:
- Raspberry Pi (Model egal – ich empfehle keinen Zero)
- micro SD Karte (min. 8 GB)
- Tastatur
- Maus
- HDMI Kabel
- USB Steckernetzteil + Micro USB Kabel
- ggf. WLAN Adapter
Eine genaue Auflistung allen Einstiegszubehör findest du im übrigen in diesem Artikel: Raspberry Pi Einstieg – Was brauche und wie starte ich?
Vorbereitung
Bevor wir mit dem Programmieren loslegen, müssen wir einige Schritte vollziehen, um eine Umgebung einzurichten. Zunächst ist es nötig, dass der Raspberry Pi ein Betriebssystem bekommt. Dafür stellt die Raspberry Pi Foundation das sog. Raspbian OS zur Verfügung, welches wir herunterladen. Anschließend übertragen wir die enthaltene Datei auf die micro SD Karte. Eine genaue Anleitung dazu findest du hier:
Raspberry Pi Raspbian OS auf eine SD-Karte übertragen (Windows)
Nachdem das Abbild auf der SD Karte ist, stecken wir diese in den Raspberry Pi. Sobald Tastatur, Maus und ein Display per HDMI Kabel angeschlossen sind, können wir ihn starten. Dies geschieht einfach, indem wir das micro USB Kabel anschließen und mit Strom verbinden. Das Display sollte nun aufleuchten und ein paar Zeilen Code auf schwarzem Hintergrund erscheinen.
Kurz darauf ist der Startvorgang abgeschlossen und wir sehen den Desktop:
Wir öffnen nun die Python Konsole, in der wir gleich Programm-Code eingeben können. Diesen öffnen indem wir erst das Raspberry Pi Symbol oben links klicken und dann unter Programming auf Python 2 (IDLE):
Es öffnet sich nun die Python Konsole, die folgendermaßen aussieht. In dieser werden wir gleich unseren Code schreiben:
Falls du dich fragst, warum wir Python 2 genommen haben und ob du auch Python 3 nehmen kannst: Die Antwort ist, dass beides möglich ist. Zwar sind zwischen den Versionen ein paar Unterschiede, allerdings sind diese für den Einstieg egal. Den Code, den wir schreiben ist auf beiden Versionen lauffähig.
Falls dich die Unterschiede im Detail interessieren, kannst du diesen Artikel (Englisch) durchlesen.
Hello World Plus
Genug der Worte, wir starten! In der Konsole möchten wir mit einer typischen „Hello World“ Anwendung starten. Dabei ist nichts weiter nötig als folgende Zeile einzutippen und mit Enter abzusenden:
print("Hello World")
Damit bekommen wir unsere erste Ausgabe angezeigt:
Dabei ist print
die Funktion, welche wir aufrufen. Innerhalb der Klammern geben wir Parameter an, welche die Funktion braucht. Da es sich um eine Zeichenkette handelt, müssen wir die Anführungszeichen am Anfang und Ende angeben, da sonstige Wörter als Variablen aufgefasst werden, wozu wir gleich kommen.
Nun ist es recht langweilig einfach nur einen Satz auszugeben. Daher erstellen wir nun eine sog. Variable. Dies ist quasi ein Platzhalter, der verschiedene Werte annehmen kann und über ihren Namen angesprochen werden kann. Beispiel gefällig? Hier:
zahl = 7print(zahl)
Der Vorteil von Variablen ist, dass wir deren Wert auch einfach überschreiben können. Im nächsten Beispiel erstellen wir zwei Variablen und addieren die erste zur zweiten (und speichern das Ergebnis in der zweiten Variable – wir überschreiben diese also):
zahl_1 = 7zahl_2 = 3.5zahl_2 = zahl_1 + zahl_2print(zahl_2)
Aber Achtung: Neben (Ganz-)Zahlen können Variablen ja auch z.B. Zeichenketten („Strings“) enthalten. Hier ist eine Addition nicht möglich und würde zu einem Fehler führen.
Übrigens: Die Variable kann nach Belieben benannt werden, darf aber nicht mit einer Zahl beginnen. Auch dürfen keine Sonderzeichen (abgesehen vom Unterstrich) verwendet werden. Es gibt auch keine zwei Variablen die gleich heißen.
Kommentare
Eine weitere nützliche Funktion sind Kommentare, die den Code erklären, falls jemand anderes oder man selbst sich den Code später noch einmal ansieht. Solche Kommentare sind in jeder Programmiersprache verfügbar und können auch dazu genutzt werden, wenn man Teile des Codes „stumm schalten“ möchte, sodass diese nicht ausgeführt werden. Den Vorgang nennt man auskommentieren.
In Python beginnen Kommentare mit einer Raute / Hashtag (#). Der Rest der Zeile wird daraufhin nicht mehr ausgeführt. Hier ein Beispiel:
# Dies ist ein Kommentarprint("Zeile1") # noch ein Kommentar#print("Zeile2")print("Zeile 3")
Wie du siehst, wird nur Zeile 1 und Zeile 3 ausgegeben, da wir den mittleren Befehl auskommentiert haben.
Erste Abfragen
Wie bereits gesagt können Variablen ja unterschiedliche Werte annehmen. Damit wir diese auch wiederum abfragen können gibt es auch hierfür eine Möglichkeit. Mit if .. else
können wir dies realisieren. Hier ein Beispiel:
zahl = 7# angenommen hier wird eine unbekannte Zahl addiertif zahl == 10: print("Zahl = 10")elif zahl < 10: print("Kleiner als 10")else: print("Größer als 10")
Hier gibt es nun einiges zu beachten:
- Am Ende der
if
,elif
bzw.else
Zeile muss ein Doppelpunkt stehen, da wir somit sagen, dass die Bedingung zu Ende ist. Wir können nämlich ebenso mehrere Bedingungen verknüpfen. - Bei Abfragen sind u.a. folgende Möglichkeiten gegeben
==
(Gleichheit),<
(Kleiner),>
(Größer),<=
(Kleiner/gleich),>=
(Größer/gleich). Beim Prüfen auf Gleichheit darf nicht das einfache Gleichheitszeichen verwendet werden, da damit nur Variablen zugewiesen werden. - Die Befehle, die ausgeführt werden, falls die Bedingung wahr ist, muss mit Leerzeichen eingerückt werden. Dabei muss alles auf der gleichen Ebene sein, bzw. gleich weit eingerückt sein. Als Standard werden 4 Leerzeichen zum Einrücken genommen.
Ich zeige nun noch ein erweitertes Beispiel, damit die Syntax etwas besser verständlich ist (fiktive Person mit Geburtsdatum am 30.07.1980):
geb_tag = 30geb_monat = 7geb_jahr = 1980ausgabe = "" # leerer Stringif geb_jahr < (2017 - 18): # Nutzer ist alt genug ausgabe = "Alter > 18"else: if (geb_monat >= 6) and (geb_monat <= 9): ausgabe = "Kind hat im Sommer Geburtstag" else: # hier kann z.B. noch ein weiterer Befehl stehen ausgabe = "kein Sommerkind"print(ausgabe)
Wie du siehst, ist es sehr einfach möglich auch Abfragen zu verschachteln. Wichtig ist nur, dass man immer die Einrückungen im Auge behält, da man sonst einen Fehler bekommt (oder das Programm falsch ausgeführt wird).
Schleifen
Nun gehen wir einen Schritt weiter und schauen uns sog. Schleifen an. Diese repräsentieren im Grund einfache Wiederholungen, wobei nach jeder Wiederholung (auch Iteration genannt) geprüft wird, ob die angegebene Bedingung (noch) wahr ist.
Die beiden Schleifen Arten nennen sich ForLoop und WhileLoop. Die While-Schleife prüft anfangs ob die Abfrage wahr ist. Hier ein Beispiel:
x = 0while x < 5: print(x) x += 1
In jeder Wiederholung wird anfangs geprüft, ob x kleiner als 5 ist und wenn ja der eingerückte Teil ausgeführt. Wir geben darin einmal die Zahl aus und addieren danach 1 zu x. Somit werden die Zahlen 0 bis 4 ausgegeben.
Im Gegensatz dazu ist der Aufbau der For-Schleife ein wenig anders. In Python ist dessen Definition for .. in .. :
wobei man als ersten Parameter eine Variable setzt (die innerhalb der Schleife verfügbar ist) und als zweiten Parameter z.B. eine Liste. Um die Zahlen von 0 bis 4 auszugeben, haben wir folgende Möglichkeiten:
# Erste Alternativefor zahl in range(5): # range(x) gibt die Zahlen von 0 bis x-1 aus print(zahl)# Zweite Alternativefor zahl in [0,1,2,3,4]: print(zahl)
Wie du siehst eignet sich eine For-Schleife zum einfachen Zählen besser.
Auslagerung des Codes in Dateien
Als letzten Schritt dieses Tutorials will ich noch zeigen, wie man den Code in eine Datei schreibt und diese ausführt. Da man meistens ganze Code-Blöcke schreibt, möchte man diese auch sequentiell ausführen lassen. Der sogenannte Compiler, welcher den lesbaren (für Menschen verständlichen) Code in Maschinencode übersetzt, kann einzelne Befehle oder ganze Dateien ausführen.
Klicke auf das Ordnersymbol in der Navigationsleiste und mache einen Rechtsklick auf die freie Fläche. Unter „Create New“ > „Empty File“ kannst du eine neue Datei anlegen:
Benenne sie z.B. „programm1.py“ (ohne Anführungszeichen). Vergiss nicht die „.py“ Endung, damit klar ist, dass es ein Python Skript ist.
Die erstellte Datei kannst du mit Doppelklick öffnen. Hier kannst du deinen Code schreiben und über das Menü abspeichern. Ich habe den Code von oben eingefügt:
Nachdem gespeichert wurde, können wir die Datei auch bereits starten. Dies passiert über das Terminal / Konsole. Klicke dazu in der Taskleiste auf das Symbol rechts vom Ordner. Es öffnet sich ein schwarzes Fenster, in dem du etwas eingeben kannst.
Hier schreibst du folgendes hinein (mit Enter absenden):
python2 programm1.py
Das Programm wird nun von Anfang bis Ende durchlaufen. Dabei werden eben alle Abfragen ausgeführt, bis das Programm am Ende angelangt ist, wo es keine weiteren Befehle gibt. Danach terminiert es.
Dies war es mit dem ersten Teil meiner kleinen Übersicht zum Einstieg in die Programmierung mit dem Raspberry Pi. Im nächsten Teil widmen wir uns dem Lesen und Beschreiben der GPIO Pins, womit wir elektronische Bauteile wie LEDs steuern und Taster auslesen können.
PS: Im Beitragsbild ist kein Pythoncode zu sehen, da es nur ein Symbolbild sein soll 🙂
PPS: Kommentare / Anregungen (speziell von Beginnern) sind erwünscht, sodass ich die weiteren Teile ggf. darauf anpasse.