5_Configure and use GPIOs de DE

Laumer Matthias edited this page Jan 24, 2019 · 2 revisions

Einrichtung und Verwendung von GPIOs

Du kannst mit Webradio-py die GPIOs des Raspberry-Pi nutzen um einige Funktionen zu beeinflussen und zu erweitern.
Grundsätzlich ist hierbei etwas Vorsichtung geboten, da du hiermit auch deinen Pi beschädigen oder sogar zerstören kannst.

Webradio-py ermöglicht den Einsatz von:

  1. Ein-/Ausschalter (allerdings nur an Pin5), welcher gleichzeitig zum "aushängen" von USB-Sticks benutzt wird
  2. eine belibige Anzahl von "Speicher-Tasten" für Radiosender (ein langer Druck speichert, ein kurzer Druck wählt den Speicherort)
  3. einen frei wählbaren Eingang für einen "Rotary-Encoder", also einem Dreh-Regler zur Lautstärken-Regelung
  4. einen Eingang für einen DHT11 Luftfeuchte-/Temperatur-Sensor
  5. Ausgang für Status-LED "Aktiv" (ist immer an, sobald webradio-py läuft)
  6. Ausgang für "USB-Stick Mounted" (ist immer an sobald ein USB-Stick am überwachten Ort eingehängt ist)
  7. Ausgänge welche dazu benutzt werden können um einen externen Verstärker ein-/aus zu schalten (AMP on/off)
  8. Ausgang um eine LCD Hintergrundbeleuchtung aus zu schalten, insofern das LCD diese Fähigkeit besitzt

Konfiguriert werden alle GPIO-Einstellungen über die Datei /home/pi/.webradio/webradio.conf.
Aktiviert werden kann ein bestimmtes Setting indem du das Doppelkreuz am Zeilenanfang (#) entfernst und den gewünschten Pin angibst.
Schaltest du alle GPIOs aktiv ist der GPIO-Header deines RaspberryPi folgendermaßen belegt:
alt text

Beachte allerdings, dass alle Eingänge (ausser der Ein-/Ausschalter an Pin5) "lowaktiv" betrieben werden! D.h. es muss ein 3,3V Signal anliegen um einen Ruhezustand aus zu lösen:
alt text

Ein-Ausschalter

Dein Ein-/Ausschalter ist Voreingestellt an Pin5 (dieser liegt auch genau gegenüber eines Masse-Pins, GND). Damit kann der Pi, bei laufendem webradio-py heruntergefahren werden. Genauso, kann er aus dem heruntergefahrenen Zustand ("Halt", Rote-LED Leuchtet) wieder gestartet werden.

Der Taster bringt von Haus aus eine Doppelfunktionalität mit:

  • Kurzer Druck: Ein eventuell eingeängter USB-Stick (Variable-Database) wird ausgehängt (unmount)
  • Langer Druck: Webradio-py wird beendet und der Pi anschließend heruntergefahren (in den Zustand "Halt")
  • Kurzer Druck im Zustand "Halt": Startet (bootet) den Pi

Um die Funktionalität mit wenig Aufwand zu testen, kann man eine Jumper eines alten PCs verwenden, der über die Pins5 und 6 gesteckt wird.

Speichertasten

Diese Tasten sind als Lowaktiv betrieben! Daher ist hier etwas Schaltungs-/Verdrahtungsaufwand notwendig. Um einen Ruhezustand zu erzeugen ist also eine Spannung von 3,3VDC erforderlich, welche man vom logischen High-Ausgang des Pi abzapfen kann. Ein Strombegrenzender Widerstand muss hierfür eingebunden werden. Meine Schaltung der Speichertasten sieht so aus:
alt text

Diese Taster sind wiederum doppelt belegt:

  • Kurzer Druck: Der gespeicherte Sender wird abgespielt (sobald auch einer hinterlegt ist)
  • Langer Druck: Der momentan gespielte Radio-Sender wird auf dem gedrückten Taster gespeichert
# Preset switch : These switches are "progammable" Buttons were specific radio-channels can be "stored" on with a
# "long-press" for "store" and
# "short-click" for "play".
# NOTE: You can add more or less, just count the digit at the end of the descriptor (Next would be IN_Preset_switch5)
IN_Preset_switch1=7
IN_Preset_switch2=11
IN_Preset_switch3=13
IN_Preset_switch4=15

Rotary-Encoder

Ein Rotary-Encoder, also Dreh-Regler kann zur Regelung der Lautstärke verwendet werden. Dieser wird wie gewohnt über die Datei webradio.conf aktiviert:

[ROTARY_ENCODER]
Pin_A=16
Pin_B=18

Dieser hat im Prinzip nur 2 Ausgänge, welche "High/Low" sein können. Also benötigt der Rotary-Encoder zusätzlich noch eine +3,3VDC Spannung und GND, wobei die Logik-Spannung wieder mit Vorwiderständen Strombegrenzt wird!
alt text

DHT11 Temperatur-Sensor

Ein typischer Temperatur-/Luftfeuchte-Sensor für den Innenbereich ist der DHT11 von Adafruit. Jedoch kann prinzipiell auch jeder andere DHT11 verwendet werden. Adafruit stellt hierfür jedoch eine Python Library zur Verfügung, welche erst einmal heruntergeladen und installiert werden muss:

wget "https://github.com/adafruit/Adafruit_Python_DHT/archive/master.zip"
unzip master.zip
cd Adafruit_Python_DHT-master/
sudo apt-get install build-essential python-dev
sudo python setup.py install

Beim anschließen des Sensors selbst, muss dieser erst einmal wieder über die Datei webradio.conf aktiviert werden:

[DHT11]
# IMPORTANT: give the GPIO not the Pin-No (Pin3 is GPIO2 for example)

# GPIO_TEMP: Where is the DHT11-Sensor connected with the I2C Line to the Pi ? Use GPIO! (Pin3, is GPIO2)
GPIO_TEMP=2
# delay_tempmeasurement : How often (in Seconds) should the Temperature-Label updated ? in Seconds! 3 minutes == 180sec.
delay_tempmeasurement = 180

ACHTUNG: hier ist anders als sonst, der GPIO an zu geben, nicht der Board-Pin (siehe Pinout oben).

Der elektrische Anschluss an den GPIOs wird folgendermaßen umgesetzt:
alt text

Beim nächsten Start von Webradio-py wird nun nicht mehr ein Wetterdienst bzgl. der momentanen Aussentemperatur angefragt, sondern die momentan vorherschende Innentemperatur-/Luftfeuchte wird ermittelt, angezeigt und immer wieder aktualisiert. Die Aktualisierungshäufigkeit kannst du (in Sekunden) über den Wert bei "delay_tempmeasurement" beeinflussen.

Status-LEDs

Um die Benutzung des Webradios noch nativer zu gestalten ist die Verwendung von Status-LEDs empfehlenswert. Von haus aus, kennt webradio-py zwei unterschiedliche LED-Typen:

  • Aktiv-/Inaktiv
  • USB-Mounted/Unmounted

Um diese Ausgänge zu nutzen ist folgender Verdrahtungsaufwand notwendig:
alt text

Die LEDs werden mit einem stromgebrenzenden Widerstand in Reihe geschaltet. Damit ist man eigentlich schon fertig. Nun nur noch die LEDs in der webradio.conf aktivieren:

[GPIOS_OUT]
# IMPORTAND: Use Board-Numbering, not GPIO Numbering
# These are outputs! Expect 3.3V with a low current! So do not attatch big loads ...
# Normaly Use LEDs with a suitable current-limiting-resistor.

# OUT_Power_status Turns on as soon as the webradio is "playing" or active (even when in standby)
OUT_Power_status=36

# OUT_USB_status Turns on as soon as something is mounted (USB-Stick), as long as it shows, you are not allowed to pull
# the USB-Stick out... first umount (using Power-Button)
OUT_USB_status=32

Webradio-py muss neu gestartet werden, damit die Änderungen aktiv werden.

Externe Schalter

Webradio-py kann auf unterschiedlichen GPIOs unterschiedliche High/Low Signale ausgeben, die du für bestimmte weitere Dinge verwenden kannst. Ich habe z.B. einen externen Audio-Verstärker eingebaut, welcher für mehr Lautstärke und besseren Klang sorgen soll. Da dieser natürlich Strom verbraucht, schalte ich den Verstärker nur dann ein, wenn webradio-py auch etwas abspielt! Sobald diese "aus" oder im Standby-Modus ist, wird der Verstärker abgeschaltet um Strom zu sparen.

Ein GPIO, bringt sogut wie keinen Stromfluss zu stande, da es sich um eine reine Logik-Spannung handelt. Daher habe ich für "Schaltvorgänge" bei denen höhere Ströme geschaltet werden müssen eine Relais-Karte beschafft, welche eine eigene Stromversorgung besitzt, und steuere diese mit den GPIOs des Pi an.

Wenn du alle o.g. Schaltungen umgesetzt hast sieht deine Verdrahtung incl. der Externen Schalter in etwa so aus:

alt text

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.