Kontakt

Raspberry Pi Schnellstart (Teil 1)

by Christoph Dähne on 21.06.2019

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

Monitor und Tastatur braucht der Raspberry Pi jetzt erstmal nicht.

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

   

Ein Kurzschluss kann den Raspberry Pi beschädigen!

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

Es ist klein, es blinkt und es ist meins :)

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