-
Notifications
You must be signed in to change notification settings - Fork 1
Tag3
Versionsverwaltungstool installieren
pi@raspberry:~# sudo apt install git
Beispielsoftware für den Kurs installieren
pi@raspberry:~# mkdir src
pi@raspberry:~# cd src
pi@raspberry:~# git clone https://github.com/maBurger/raspiKurs.git
Python
Um mit Python software oder Scrppte zu erstellen muss keine weitere Software installiert werden. Raspbian bringt bereits sehr viele nützliche Tools mit:
- Python IDLE (Ein interaktiver Editor um Python Programe zu schreiben)
- Python 2.7 (Die Sprache an sich. Sie ist bereits standartmäßig auf allen Linux Distros vorhanden)
- Python 3.5 (Eine aktuellere Version. Sie ist bereits standartmäßig auf den meisten Linux Distros vorhanden)
Mehr Info: https://www.python.org/
Um zu Beginnen starten wir mit der Python IDLE. Dazu führen wir folgenden Befehl aus:
pi@raspberry:~# idle-python3
In diesem Fenster können wir direkt python Befehle eingeben und bekommen sofort eine Antwort. Zum Beispiel
>>> 2+5
7
Es gibt einige Befehle, die einen ganzen Block von Anweisungen einleitet, z.B. Verzweigungen mit if, Schleifen mit for und while oder Funktionsdefinitionen mit def. Diese Sprachelemente enden immer mit einem Doppelpunkt. Alle weiteren Anweisungen, die zum entsprechenden Block gehören, müssen eingerückt werden. Wir brauchen also keine Klammern wie zum Beispiel in der Programmierpsrache C
Zum Beispiel
def meineFunktion():
--->Befehl 1
--->Befehl 2
--->Befehl 3
Hier ist die Funktion zu Ende und das 'normale' Programm geht weiter.
Die Einrückung geschieht immer mit vier Leerzeichen. In den meisten Editoren und er interaktiven python shell geht das automatisch.
Zahlen
- Ganzzahl
- lange Zahl
- Fließkommazahl
Python übernimmt die Zuordnung der Variablentypen automatisch für euch.
Strings sind Zeichenketten.
Folgende wichtigen Dinge kann man mit Strings machen
Index, jedes Zeichen kann einzeln angesprochen werden
>>> "Eine Zeichenkette"[0]
'E'
Index negativ, also von hinten Anfangen
>>> "Ein String"[-1]
'g'
Zusammensetzen, funktioniert mit '+'
>>> "abcdef" + "gh"
'abcdefgh'
Multiplikation:
>>> "Eine Zeichenkette" * 3
'Eine ZeichenketteEine ZeichenketteEine Zeichenkette'
Slicing (zerschneiden), string[2:4] gibt die Zeichen mit dem Index 2 - 3 zurück
>>> "123abc456"[3:5]
'abc'
Variablen
Variablen sind Behälter (Container) in denen bestimmte Werte aufbewart werden können.
>>> var1 = "Inhalt"
>>> var2 = 123
>>> print(var1)
'Inhalt'
>>> print(var2)
123
Wird immer dann benötigt, wenn es unterschiedliche Dinge zu tun gibt oder wenn eine Entscheidung getroffen werden muss.
if bedingung1:
anweisungen1
elif bedindung2:
anweisungen2
else:
anweisungen3
>>> print("abc")
Spezielle Formatierung:
>>> print('{} ist {} Jahre alt.'.format('Raphi', 14))
'Raphi ist 14 Jahre alt.'
>>> print('1/7 mit 3 Nachkommastellen {:.3f}'.format(1/7))
'1/7 mit 3 Nachkommastellen 0.143'
Hier kann man nachlesen wie das ganz genau geht: https://docs.python.org/3.5/library/string.html#format-string-syntax
input
>>> x = input("Wie ist Dein Name? ")
#input() gibt die Eingabe als einfachen Text zurück oder speichert sie in eine Variable (hier x)
Mit Schleifen können wir Dinge machen, die sehr oft wiederholt werden müssen. Es gibt zwei unterschiedliche Arten von Schleifen.
for Schleifen
Wenn wir von Anfang an wissen wie oft die Schleife wiederholt werden soll, dann ist diese Schleifenart die richtige.
>>> for var in iterable:
... # block (Hier kann die Variable var verwendet werden)
Beispiel
>>> for in in range(1, 10):
.... print(i)
....
1
2
3
4
5
6
7
8
9
>>> |
while Schleife
diese Art von Schleife wird so lange wiederholt bis eine Bedingung erfüllt ist.
>>> while Bedingung:
... Anweisung
Eine Liste von 5 Zahlen wird mit eckigen Klammern definiert
>>> liste = [1, 2, 3, 4, 5]
Einige wichtige Befehle für Listen
- Anzahl der Listenelemente: len(liste)
- Elemente hinzufügen: liste.append(8)
- Elemente herausziehen: liste.pop(8)
- auf alle Elemente eine Funktion anwenden: l.map()
Wofür brauchen wir sie?
- Wenn man an mehreren Stellen im Programm das Selbe machen muss.
- Um das Progrmm übersichtlicher zu gestalten.
Wie werden sie aufgebaut?
Ohne Rückgabe
def Funktionsname(parameter1, parameter2):
code
Mit Rückgabewerte
def Funktionsname(parameter1, parameter2):
code
return(ergebnis)
Importieren von Modulen
Um die Funktionen, die in einem externen Modul enthalten sind verwenden zu können, müssen wir das modul importieren. Danach können wir alles aus dem Modul verwenden.
import <Modulname>
Zum Beispiel
>>> import math
>>> print(pi)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<python-input-21-5fd1868b3769> in <module>()
----> 1 print(pi)
NameError: name 'pi' is not defined
>>> print(math.pi)
3.141592653589793
Mit dem speziellen Import Befehl
from <Modulename> import <funktion>
holt man sich einen kleinen Teil des Moduls und kann diesen kleinen Teil, dann direkt verwenden!
>>> from math import pi
>>> print(pi)
3.141592653589793
Modulliste
Jetzt ist es natütlich interessant welche Module in python vorhanden sind. Das kann man in der interkativen Shell sehr leicht herausfinden:
help() #man geht in den Help Modus
modules # listet alle Module des Systems auf
Ganz am Anfang haben wir die Beispielprogramm über git-hub geladen. Du hast sie also auf dem raspi im Verzeichnis /home/pi/src
Hier können wir die eingabe, die while Schleife und Ausgabe bei der Arbeit zusehen.
cd src/
cd
Auch in python kann man Anwendungen mit Fenster programmieren. Das sehen wir in diesem Beispiel. Um Fenster zu bekommen muss man das Modul tkinter verwenden.
wiringPI installieren
sudo apt-get install git-core
git clone git://git.dragon.net/wiringPi
cd witringPi
./build
Die Pin Zuordnung herausbekommen
gpio -g readall
Gibt eine Tabelle mit den aktuellen Status Werten der PINs aus.
+-----+-----+---------+------+---+---Pi 2---+---+------+---------+-----+-----+
| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| | | 3.3v | | | 1 || 2 | | | 5v | | |
| 2 | 8 | SDA.1 | IN | 1 | 3 || 4 | | | 5V | | |
| 3 | 9 | SCL.1 | IN | 1 | 5 || 6 | | | 0v | | |
| 4 | 7 | GPIO. 7 | IN | 1 | 7 || 8 | 1 | ALT0 | TxD | 15 | 14 |
| | | 0v | | | 9 || 10 | 1 | ALT0 | RxD | 16 | 15 |
| 17 | 0 | GPIO. 0 | IN | 0 | 11 || 12 | 0 | IN | GPIO. 1 | 1 | 18 |
| 27 | 2 | GPIO. 2 | IN | 0 | 13 || 14 | | | 0v | | |
| 22 | 3 | GPIO. 3 | IN | 0 | 15 || 16 | 0 | IN | GPIO. 4 | 4 | 23 |
| | | 3.3v | | | 17 || 18 | 0 | IN | GPIO. 5 | 5 | 24 |
| 10 | 12 | MOSI | IN | 0 | 19 || 20 | | | 0v | | |
| 9 | 13 | MISO | IN | 0 | 21 || 22 | 0 | IN | GPIO. 6 | 6 | 25 |
| 11 | 14 | SCLK | IN | 0 | 23 || 24 | 1 | IN | CE0 | 10 | 8 |
| | | 0v | | | 25 || 26 | 0 | IN | CE1 | 11 | 7 |
| 0 | 30 | SDA.0 | IN | 1 | 27 || 28 | 1 | IN | SCL.0 | 31 | 1 |
| 5 | 21 | GPIO.21 | IN | 1 | 29 || 30 | | | 0v | | |
| 6 | 22 | GPIO.22 | IN | 1 | 31 || 32 | 0 | IN | GPIO.26 | 26 | 12 |
| 13 | 23 | GPIO.23 | IN | 0 | 33 || 34 | | | 0v | | |
| 19 | 24 | GPIO.24 | IN | 0 | 35 || 36 | 0 | IN | GPIO.27 | 27 | 16 |
| 26 | 25 | GPIO.25 | OUT | 1 | 37 || 38 | 0 | IN | GPIO.28 | 28 | 20 |
| | | 0v | | | 39 || 40 | 0 | IN | GPIO.29 | 29 | 21 |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |
+-----+-----+---------+------+---+---Pi 2---+---+------+---------+-----+-----+
Wird noch erklärt.
Wie können wir mit dem raspi Temperatur messen? http://www.kompf.de/weather/pionewiremini.html
Wir bauen die selbe Schaltung auf wie in 11_LED. Jetzt haben wir aber ein Fenster mit einem Knopf. Beim Drücken des Knopfs kann man die LED an und ausschalten.
sudo ./tkinter-led-ein-aus.py
Das LED Licht kann auch gedimmt werden. Das passiert im raspi über die Pulsweitenmodulation PWM.
sudo ./tkinter-led-pwm.py
http://www.python-kurs.eu/kurs.php Kurs in Deutsch http://pythonbooks.revolunet.com/ Eine Liste von freien Python Büchern (Englisch) https://projects.drogon.net/raspberry-pi/wiringpi/ Die wiringPi Biliothek. http://ipython.org/ Die ipython interaktive Eingabe (shell) https://perso.limsi.fr/pointal/_media/python:cours:mementopython3-english.pdf Referenz Karte für python3