Benutzer-Werkzeuge

Webseiten-Werkzeuge


raspberry:hallo

Hallo Welt

Meine ersten kleinen Erfolge mit dem Raspberry Pi möchte ich auf dieser Seite vorstellen. Folgende Aufgaben sind dabei zu lösen:

  • Programmierung mit Python
  • Steuerung einer LED über die GPIO-Schnittstelle

Die blinkende LED

Eine LED wird mit einem Vorwiderstand an einen der GPIO-Pins angeschlossen. Ein Python-Programm soll die LED zum blinken bringen.

Schaltung

Stromlaufplan für die LED

Zunächst muss die Frage geklärt werden, welche der 26 bzw. 40 Pins benötigt werden. Damit die LED leuchtet, muss sie mit einer Spannung versorgt werden. Das Ausgangssignal der GPIO-Pins wird durch die Programmierung entweder auf eine Spannung von 3,3 V oder 0 V gesetzt. Ich wähle also als Pluspol der Spannungsversorgung den Pin 16. Dieser Pin wird nicht, wie viele der anderen Pins, für irgendwelche anderen Signale verwendet. Für die Programmierung sollte man wissen, dass es sich um GPIO 23 handelt. Welche Pins wofür verwendet werden, kann man der Tabelle auf der Seite zu GPIO entnehmen. Als Minuspol dient einer der 5 bzw. 8 Masse-Pins (Pin 6, 9, 14, 20, 25, 30, 34 oder 39).

Zur Strombegrenzung und zum Schutz der LED benötigen wir einen Vorwiderstand. Je nach LED beträgt die Durchlassspannung der LED ca. 1,8 V bis 2,3 V. Der Durchlassstrom sollte auf maximal 20 mA begrenzt sein. Angenommen unsere LED hat eine Durchlassspannung $U_d$ von 1,8 V und der Strom $I_d$ soll 20 mA betragen. Die Spannung, die am Vorwiderstand abfallen muss, berechnet sich so: $$U_v = U - U_d = 3,3 \ V - 1,8 \ V = 1,5 \ V$$

Mithilfe des ohmschen Gesetzes ergibt sich somit folgender Vorwiderstand: $$Rv = \dfrac{U_v}{I_d} = \dfrac{1,5 \ V}{0,02 \ A} = 75 \ \Omega$$

Das Ergebnis sagt aus, dass der Vorwiderstand nicht kleiner sein sollte als 75 Ω. Da LEDs aber schon bei viel kleineren Strömen als 20 mA sichtbar leuchten, können wir den Vorwiderstand großzügig danach auswählen, was wir gerade zur Hand haben. Ich habe einen 470-Ω-Widerstand gewählt, der in Reihe zur LED zwischen Pin 16 und Pin 6 geschaltet wird. Die Reihenfolge der Bauteile spielt keine Rolle. Da die Diode den Strom nur in eine Richtung fließen lässt, sollte die Kathode (der kürzere Draht) der LED zur Masse (also Pin 6) zeigen.

Programmierung

Mit einem Python-Programm soll die Schaltung zum Leben erweckt werden. Zur Programmierung empfehle ich eine Verbindung zum Raspberry Pi über die Secure Shell (SSH) herzustellen. Mit einem Texteditor wie vi oder nano erstelle ich die Datei hallowelt.py.

LED-Blinklicht: hallowelt.py

#! /usr/bin/env python
import RPi.GPIO as GPIO         # GPIO-Bibliothek
import time

print "Hallo Welt"              # Hello World fuer Programmierer

GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.OUT)        # GPIO 23 (Pin 16) als Ausgang

try:
  while True:                   # Hello World der Elektrotechnik
	GPIO.output(23, 1)      # 3,3 V (high) an GPIO 23
	print "blink"
	time.sleep(0.5)
	GPIO.output(23, 0)      # 0 V (low) an GPIO 23
	time.sleep(2)
except KeyboardInterrupt:
  GPIO.cleanup()

In den Zeilen 2 und 3 werden die Bibliotheken RPi.GPIO und time importiert. RPi.GPIO stellt die Werkzeuge zur Programmierung der GPIO-Schnittstelle zur Verfügung. Mit der Bibliothek time können Wartezeiten in das Programm eingebaut werden.

Zeile 7 legt fest, wie die Pins gezählt werden sollen. Mit GPIO.BCM (Broadcom pin number) entspricht die Nummerierung der GPIO-Nummerierung. Alternativ kann auch GPIO.BOARD verwendet werden, dann muss die Pin-Nummerierung auf der Platine verwendet werden. Pin 16 auf der Platine entspricht also GPIO 24.

Um die GPIO-Schnittstelle verwenden zu können, müssen die einzelnen Pins als Eingang oder Ausgang definiert werden. In Zeile 8 wird festgelegt, dass Pin 16 bzw. GPIO 23 ein Ausgang sein soll.

Die Zeilen 11 bis 16 bilden eine Endlosschleife. An dem Pin 16 werden abwechselnd 3,3 V und 0 V angelegt (Zeile 12 und 15), wodurch die LED blinkt. Dabei bleibt die LED für 0,5 Sekunden an und für 2 Sekunden aus (Zeile 13 und 16). Immer wenn die LED aufleuchtet, erscheint die Ausgabe „blink“ auf dem Bildschirm (Zeile 14).

Mithilfe der Ausnahmebehandlung (exception handling) in den Zeilen 10 und 17 kann das Programm mit der Tastenkombination [Strg]+[c] sauber beendet werden. Dazu wird die GPIO-Schnittstelle in Zeile 18 zurückgesetzt.

Das Programm sollte als root ausgeführt werden, da der Zugriff auf die GPIO-Schnittstelle entsprechende Rechte erfordert. Wenn alles Funktioniert sieht die Ausgabe etwa so aus:

pi@raspberrypi ~ $ sudo python hallowelt.py
Hallo Welt
blink
blink
blink
...
Hallo Welt!
raspberry/hallo.txt · Zuletzt geändert: 2015/10/16 19:54 von gum