EINFÜHRUNG |
|
INSTALLATION |
Am einfachsten lädst du von http://www.raspberrypi.org/downloads den Betriebssystem-Installer NOOS herunter, kopierst den Inhalt auf eine mindestens 8 GB grosse SD-Karte und wählst beim Start das Betriebssystem Raspbian (eine Linux Debian Variante). Da die Distribution bereits ein JRE enthält, brauchst du nur tigerjython2.jar in ein Verzeichnis, z.B. /home/pi/tigerjython zu kopieren und der Datei mit dem File Manager unter Dateieigenschaften Ausführungsrechte zu geben. Um TigerJython zu starten, tippst du in einem Terminal (Console) folgenden Befehl ein:
Nach dem Speichern kannst du TigerJython mit einem Klick auf die neue Ikone starten. Dabei brauchst du auf dem etwas schmalbrüstigen Raspberry Pi etwa 1 Minute Geduld, bis die IDE gestartet ist. Wie du feststellen wirst, ist aber Ausführung von Python-Programmen erstaunlich schnell. Empfehlenswert ist die Verwendung einer schnellen SD-Karte (Klasse 10) und des Raspberry Pi 2 Modell B. |
DIGITALER INPUT-OUTPUT AM GPIO-PORT |
Raspberry Pi stellt dir 17 digitale Input-Output-Kanäle zur Verfügung, die sich an einer 26-poligen Steckerleiste (die neue Version mit dem 40 poligen Stecker wird auch unterstützt) abgreifen lassen. Jeder Kanal kann als Ausgang oder als Eingang mit einem internen Pull-up-Widerstand, mit einem Pull-down-Widerstand oder ohne Widerstand definiert werden. Auf der Steckerleiste sind auch 5V, 3.3V und Ground-Pins vorhanden. Die Eingangsspannung darf in keinem Fall 3.3 V übersteigen, man darf also externe 5V-Logik-Ausgänge nicht direkt mit den Eingängen verbinden. In TigerJython steht dir die Klasse GPIO aus dem Modul RPi_GPIO zur Verfügung, mit dem du die IO-Ports sehr einfach ansprechen kannst. Das Modul verwendet die Bibliothek Pi4J von Robert Savage, entspricht aber weitgehend dem Modul RPi.GPIO. Die zusätzlich benötigten Dateien kannst du von hier downloaden und in das Unterverzeichnis Lib kopieren, in dem sich tigerjython2.jar befindet.. Standardmässig werden die Pins des GPIO-Ports mit den Pinnummern 1..26 (neues Board: 1..40) angesprochen. Jeder Pin kann mit GPIO.setup() als Ein- oder Ausgangskanal (channel) definiert werden. Mit GPIO.output(channel, state) wird ein Ausgabewert gesetzt und mit GPIO.input(channel) der aktuelle Eingabewert gelesen und zurückgegeben. Du findest die ausführliche Dokumentation unter der Menüoption Hilfe > APLU Dokumentation.
Zur Demonstration eines Eingangsports schliesst du einen Tastenschalter wie im Schema gezeigt an Pin 26 an und brauchst dann typisch einige Flags, damit du durch Drücken des Tasters das Blinken einschalten und durch nochmaliges Drücken das Blinken wieder ausschalten kannst. from RPi_GPIO import GPIO # pin numbers switch = 26 led = 12 print "Press button turn blinking on/off" GPIO.setup(led, GPIO.OUT) GPIO.setup(switch, GPIO.IN, GPIO.PUD_UP) buttonPressed = False blinking = False ledOn = False while True: v = GPIO.input(switch) if not buttonPressed and v == GPIO.LOW: buttonPressed = True blinking = not blinking if buttonPressed and v == GPIO.HIGH: buttonPressed = False if blinking: if ledOn: ledOn = False GPIO.output(led, GPIO.LOW) else: ledOn = True GPIO.output(led, GPIO.HIGH) else: ledOn = False GPIO.output(led, GPIO.LOW) GPIO.delay(100) (Ctrl+C kopieren, Ctrl+V einfügen) |
MEMO |
In der Schleife holst du zuerst den aktuellen Zustand des Tastenschalters (du "pollst" ihn). Beim gedrückten Zustand verbindet er GND mit dem Eingang auf Pin 26 und input(26) liefert GPIO.LOW oder 0. Lässt du die Taste los, so bewirkt der interne Pull-up-Widerstand, dass der Eingang auf logisch HIGH (3.3V) gesetzt wird, ohne dass du diese Spannung von Aussen anlegen musst. |
ELEGANT MIT DEM EVENTMODELL PROGRAMMIEREN |
Viel einfacher ist es, das Eventmodell zu verwenden. Dabei wird das Drücken bzw. Loslassen der Taste als ein Ereignis aufgefasst, wobei automatisch eine Funktion onButtonPressed() aufrufen wird. Dort brauchst du nur das Flag blinking umzukehren. from RPi_GPIO import GPIO def onButtonPressed(channel, state): global blinking blinking = not blinking # pin numbers switch = 26 led = 12 print "Press button to turn blinking on/off" GPIO.setup(led, GPIO.OUT) GPIO.setup(switch, GPIO.IN, GPIO.PUD_UP) # pull-up resistor GPIO.add_event_detect(switch, GPIO.FALLING) # event on falling edge GPIO.add_event_callback(switch, onButtonPressed) # register callback blinking = False while True: if blinking: GPIO.output(led, 1) GPIO.delay(100) GPIO.output(led, 0) GPIO.delay(100) (Ctrl+C kopieren, Ctrl+V einfügen) |
MEMO |
Um Events zu verwenden, muss du zuerst mit der Methode add_event_detect() angeben, ob du auf eine steigende oder fallende Flanke oder auf beide reagieren willst, also beim Übergang von LOW auf HIGH oder umgekehrt. Nachfolgend registrierst du mit add_event_callback() die Funktion, die beim Auftreten des Ereignisses aufgerufen werden soll.
|