Raspberry Pi Schnellstart (Teil 1)

...oder wie ich eine Gegensprechanlage baute (Teil 1)

Irgendwie kam mir der Gedanke, eine Gegensprechanlage zu bauen – einfach so zum Spaß. Also wie fange ich an? Als Grundlage verwende ich einen Raspberry Pi 3 B+ und habe ihn zunächst in Betrieb genommen.

In diesem Post soll es darum gehen, was man dabei beachten muss und wie man eine LED und einen Button ansteuern kann. Am Anfang erläutere ich kurz, weshalb ich mich für einen Raspberry Pi entschieden habe. Der Blog–Artikel spiegelt natürlich nur meine persönliche Meinung wider. Bestimmt gibt es noch andere und ganz gegensätzliche Meinungen – und das ist auch gut so.

Wichtig: Trotz aller Sorgfalt könnte dieser Artikel Fehler enthalten. Bitte kopiere nicht blind Schaltungen und Quellcode. Im schlimmsten Fall können Bauteile und der Raspberry Pi beschädigt werden. Wir geben keine Garantien und übernehmen keinerlei Haftung.

Raspberry Pi 3 Model B+ Board

Was spricht für einen Raspberry Pi?

Ein Raspberry Pi ist ein fertiger kleiner Computer. Man kann eine Tastatur und einen Monitor anschließen, sich ins WiFi verbinden und auf sandstorm.de interessante Blog–Artikel lesen. Entsprechend einfach ist es, auf den Rechner im Heimnetz per Handy oder Laptop zuzugreifen. Trotzdem kann man eigene Schaltungen ansteuern.

Die Hardware des Raspberry Pi reicht aus für komplexere Aufgaben. Eine Web-UI und eine Gesichtserkennung mit angeschlossener Kamera sollten machbar sein.

Was gibt es für Alternativen?

Zwei populäre Alternativen will ich zumindest erwähnen: einen Arduino oder ein STM32 Bluepill. Beide sind günstiger als ein Raspberry Pi und beide sind langsamer und können weniger. Die Ersteinrichtung und die Verbindung ins Heimnetz per Kabel oder WiFi sind bei beiden Platinen schon kleine Projekte. Trotzdem habe ich gute Erfahrung mit dem STM32 Bluepill gemacht. Die wichtige Frage ist immer: Was willst du selber bauen und was soll schon fertig sein?

Einrichtung eines Raspberry Pi

Mit diesem Getting–Started–Tutorial habe ich auf dem Raspberry Pi NOOBS installiert. Dazu muss man Monitor, Tastatur und Maus anschließen. Später will ich an meinem Laptop entwickeln und den Raspberry Pi ohne Monitor betreiben.

Seit ich SSH aktiviert habe unter Einstellungen -> Raspberry-Pi-Konfiguration -> Schnittstellen -> SSH aktivieren, kann ich mich per ssh pi@192.168.… verbinden. Meinen SSH-Key habe ich in die authorized_keys gelegt, damit ich nicht ständig das Passwort eingeben muss.

Per SSH lade ich meine Dateien auf den Raspberry Pi mit: rsync -r * pi@192.168.…:mein-ordner

Achtung: Auch wenn kein Monitor angeschlossen ist, solltest du den Raspberry Pi runterfahren, bevor du den Strom trennst! Einloggen und sudo halt eingeben und ein paar Minuten warten.

GPIO Pins vom Raspberry Pi

An die General Purpose Input Output Pins schließen wir im folgenden einen Button und eine LED an. Welcher Pin welcher ist kann man sich hier anschauen oder mit den Befehlen pinout oder gpio readall. Gefallen hat mir der ausführliche Beitrag: Everything You Want to Know About Raspberry Pi GPIO: But We're Afraid to Ask.

Achtung: Eine falsche Schaltung kann den Raspberry Pi beschädigen. Im einfachsten Fall ein Kurzschluss. Deshalb schließen wir weder LED noch Button ohne Schutzwiderstand an!

Achtung: Ich würde nicht an Schaltungen am eingeschalteten Raspberry Pi basteln. Der Raspberry Pi könnte beschädigt werden.

Der Push–Button

Die Schaltung findest du in diesem Button–Tutorial: 3v3 --- Button --- 10kΩ --- GPIO pin.

Wenn man den Button drückt, erzeugt man ohne Widerstand einen Kurzschluss. Das kann den Raspberry Pi beschädigen! Wieso hat der Widerstand aber 10kΩ? Damit nur wenig Strom fließt, den wir mit Hilfe des Ohmschen Gesetzes schnell ausrechnen können.

U = R * I
I = U / R
I = 3,3V / 10kΩ = 0,33mA

Damit sind wir unter dem Limit von 0,5 mA aus dem oben verlinkten Blog–Artikel

Das folgende Bild zeigt die Schaltung. Online findest du viele Rechner für die Farbcodes der Widerstände.

push button circuit: 3v3 - button - 10kΩ - GPIO pin

   

Damit ich den Button–Code in späteren Projekten einfach wiederverwenden kann, habe ich ihn in eine eigene Klasse ausgelagert. Hier benutze ich Python3. Andere Sprachen kannst du auch verwenden.

Starten lässt sich das Skript mit python3 Button.test.main.py – und nicht vergessen den Button zu drücken ;-)

# content of Button.py import RPi.GPIO as GPIO class Button: """ driver for a push button on a GPIO pin connected as follows 3v3 --- button --- 10kΩ --- GPIO pin """ def __init__(self, pin: int): self._hasBeenPressed = False GPIO.setup(pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.add_event_detect( pin, GPIO.RISING, callback=self._handleFalling, bouncetime=200) def _handleFalling(self, channel): self._hasBeenPressed = True def read(self): """ determines if the button has been pressed since the last call to read() returns True if has been pressed, False otherwise """ hasBeenPressed = self._hasBeenPressed self._hasBeenPressed = False return hasBeenPressed def destroy(self): pass
# content of Button.test.main.py import RPi.GPIO as GPIO from Button import Button import time import sys BtnPin = 10 if __name__ == '__main__': GPIO.setmode(GPIO.BOARD) button = Button(BtnPin) try: while True: if(button.read()): print("\nButton has been pressed") time.sleep(1) print(".", end = "") sys.stdout.flush() except KeyboardInterrupt: button.destroy() GPIO.cleanup()

Die LED

Bei der LED hat mir dieses Tutorial geholfen. Die Schaltung habe ich übernommen: GPIO Pin --- LED --- 330Ω --- GND.

Die Frage ist wieder: Wieso ausgerechnet 330Ω? In diesem Artikel findest du die passende Gleichung.

R = (Vges - Vled) / I
I = (Vges - Vled) / R

An dieser Stelle müssen wir die Spannung kennen, die über der LED abfällt. Das hängt von der LED ab. Bei meiner sind es etwa 1,7V.

I = (3,3V - 1,7V) / 330Ω = 4,8mA
LED Schaltung: GPIO Pin - LED - 330Ω - GND

   

Die Anode (das lange Beinchen) der LED muss an den GPIO Pin.

Der Quellcode besteht aus zwei Teilen: einer wiederverwendbaren Klasse und einem Mini–Programm zum Testen. Wenn alles klappt, sollte die LED anfangen zu blinken, wenn man python3 BinaryOutput.test.main.py eingibt.

# content of BinaryOutput.py import RPi.GPIO as GPIO class BinaryOutput: """ some GPIO pin which is either HIGH or LOW LED example GPIO Pin --- LED --- 330Ω --- GND """ def __init__(self, pin: int, isHigh: bool = False): self._pin = pin self._isHigh = isHigh GPIO.setup(pin, GPIO.OUT) self._flush() def toggle(self): self._isHigh = not self._isHigh self._flush() def enable(self): self._isHigh = True self._flush() def isEnabled(self): return self._isHigh def disable(self): self._isHigh = False self._flush() def _flush(self): GPIO.output(self._pin, GPIO.HIGH if self._isHigh else GPIO.LOW) def destroy(self): self.disable()
# content of BinaryOutput.test.main.py import RPi.GPIO as GPIO from BinaryOutput import BinaryOutput import time import sys LedPin = 18 if __name__ == '__main__': GPIO.setmode(GPIO.BOARD) led = BinaryOutput(LedPin) try: while True: led.toggle() print(".", end = "") sys.stdout.flush() time.sleep(1) except KeyboardInterrupt: led.destroy() GPIO.cleanup()

Im nächsten Blog–Artikel verbinden wir LED und Button zu einer Schaltung — natürlich gleich mit einer Web–UI.

Viel Spaß beim Basteln und Ausprobieren. Feedback ist natürlich immer willkommen, also kontaktiert uns gerne.

Übrigens, hier geht's zum Artikel wie man einen Raspberry Pi in eine Stechuhr verwandelt.

Bildquellen

Foto des Raspberry Pi 3 B+ von Gareth Halfacree from Bradford, UK - Raspberry Pi 3 B+, CC BY-SA 2.0