Skip to content
Leif-Erik Kotsch edited this page Nov 5, 2018 · 5 revisions

Vorbereitung

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

1 Interaktiver Modus (Die Python shell)

In diesem Fenster können wir direkt python Befehle eingeben und bekommen sofort eine Antwort. Zum Beispiel

>>> 2+5
7

2 Blockbildung durch Einrücken

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.

3 Datentypen und Variablen

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

Bedingte Anweisungen

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

Input und Output

print

>>> 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)

Schleifen

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

Listen

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()

Funktionen

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)

Module in python

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


Übungen

Ganz am Anfang haben wir die Beispielprogramm über git-hub geladen. Du hast sie also auf dem raspi im Verzeichnis /home/pi/src

1_vorwiderstand

Hier können wir die eingabe, die while Schleife und Ausgabe bei der Arbeit zusehen.

cd src/
cd 

2_Fenster

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.

Hardware

Vorbereitung

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---+---+------+---------+-----+-----+

11_LED ansteuern

Wird noch erklärt.

12_Temp

Wie können wir mit dem raspi Temperatur messen? http://www.kompf.de/weather/pionewiremini.html

13_LED mit Oberfläche ansteuern

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

Links

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