====== GPIO Projekte ======
[[python| ☚ zurück]]
Ein Raspberry Pi kann LEDs, Sensoren, Taster oder Displays direkt über seine GPIO-Pins ansteuern. Diese Pins sind jedoch empfindlich, da sie direkt mit dem Prozessor verbunden sind. Deshalb muss beim Aufbau der Hardware sorgfältig gearbeitet werden: richtige Spannungen verwenden, Bauteile korrekt anschließen und Änderungen nur im ausgeschalteten Zustand vornehmen. Ziel ist es, einfache Schaltungen sicher aufzubauen und die Grundlagen für spätere Projekte mit Elektronik zu erlernen.
{{ :raspberry_pi:ampel_led.jpg?300 |}}
====== Überblick ======
* Hardware ansteuern
* Environment anlegen
* Minimalprogramm
* [[project:python_led| Projekt: LED mit Python ]]
----
====== Details ======
===== Hardware ansteuern =====
Ein Raspberry Pi kann LEDs, Sensoren, Taster oder Displays direkt über seine GPIO-Pins ansteuern. Diese Pins sind jedoch empfindlich, da sie direkt mit dem Prozessor verbunden sind. Deshalb muss beim Aufbau der Hardware sorgfältig gearbeitet werden: richtige Spannungen verwenden, Bauteile korrekt anschließen und Änderungen nur im ausgeschalteten Zustand vornehmen. Ziel ist es, einfache Schaltungen sicher aufzubauen und die Grundlagen für spätere Projekte mit Elektronik zu erlernen.
**ACHTUNG: Der Raspberry Pi kann Schaden nehmen!**
Anfänger sollten sehr vorsichtig sein! Tatsächlich ist ein **Arduino** für erste Experimente (//wegen des geringeren Preises//) häufig die bessere Wahl.
**Bitte alle Anweisungen beachten und im Zweifel den Tutor fragen.**
**Gerade Anfängern passiert es leider immer wieder, dass sie versehentlich genau das Falsche tun.**
**Hardware-Regeln**
- Hardware-Anpassungen nicht durchführen, während der Raspberry Pi mit Strom versorgt ist.
- Vor der Inbetriebnahme die Hardware vom Tutor kontrollieren lassen.
- Niemals GPIO-Pins direkt mit 5 V verbinden.
- Keine Kurzschlüsse zwischen Pins verursachen //(also keine zwei Pins direkt mit einem Kabel verbinden//).
Beim Raspberry Pi gelten für die GPIO-Pins grob folgende elektrische Grenzen:
* max. ca. 16 mA pro GPIO-Pin
* max. ca. 50 mA insgesamt über alle GPIOs zusammen
|{{ :raspberry_pi:raspi-layout4-1.jpg?300 |}}|
| Raspberry Pi Layout und Orientierung. |
|{{ :raspberry_pi:raspi-layout4.png?300 |}}|
|Nur die **GPIO**, **GND** und **VCC (3,3V)** werden benutzt.
* LED-Ampel:
* Masse: **GND**
* R/Y/G: **GPIO 17, GPIO 27, GPIO 22**
* Temperatursensor
* Versorgungsspannung: **VCC 3,3**
* Masse: **GND**
* Data: **GPIO 4**
|
|{{ :raspberry_pi:pi_adapter_1.jpg?400 |}}|
|Adapterplatine zur Nutzung auf einem Steckbrett.|
|{{ :raspberry_pi:pi_adapter_2.png?400 |}}|
|Alle Bauteile LED-Ampel und Temperatursensor die im Kurs verwendet werden sind angeschlossen|
==== Verwendete Hardware ====
* Hardware-Anbindung LED-Ampel-Modul (R/G/Y + GND)
Dieses LED-Modul besitzt vier Anschlüsse:
Wir verwenden folgende GPIO-Nummern. Falls andere gewählt werden muss der Quellcode entsprechend angepasst werden.
^ Modul ^ Raspberry Pi GPIO ^
| GND | beliebigen GND |
| **R** → rote LED | **GPIO17** |
| **G** → grüne LED | **GPIO27** |
| **Y** → gelbe LED | **GPIO22** |
++++ Technisches Prinzip |
Auf dem Modul sind bereits Vorwiderstände (Kennzeichnung „331“ = 330 Ohm) verbaut.
Es ist daher **kein zusätzlicher Widerstand erforderlich**.
* **ON** GPIO-Pin wird auf **HIGH (3,3 V)** gesetzt, um die jeweilige LED einzuschalten
* **OFF** GPIO-Pin wird auf **LOW (0)** gesetzt, um die jeweilige LED auszuschalten.
Strom bei 3,3 V:
(3,3 V − ca. 2,0 V LED) / 330 Ω ≈ 4 mA
Dies ist für den Raspberry Pi unkritisch.
++++
===== Environment anlegen =====
**Aufgabe: Anlegen einer Python-Environment**
Lege eine Umgebung
* ''~/devel/projects/course_env'' an.
Hierfür muss der Ordner ''~/devel/projects'' bereits vorhanden sein.
Das Anlegen und Managen einer Umgebung ist hier
[[python_python-umgebung_env_einrichten_vorbereitungen_fuer_projekte_schaffen|Python ENV]]
ausführlich beschrieben.
**Wechsle in die Environment**
Die Programmierung erfolgt nun immer mit der gewählten Umgebung!
source ~/devel/projects/course_env/bin/activate
* Für alle **Python-Projekte** im Kurs verwenden wir diese eine Umgebung: **course_env**!
==== Pakete & Bibliotheken installieren ====
Systemweit GPIO-Unterstützung über ''apt'' zur Verfügung stellen:
sudo apt install python3-rpi.gpio
Jetzt die **ENV** aktivieren (falls noch nicht geschehen) und dann erst ''RPi.GPIO'' installieren:
source ~/devel/projects/course_env/bin/activate
pip install RPi.GPIO
===== Minimal Programm =====
Dieses Programm (''led_simple.py'') schaltet eine einzelne LED am **Raspberry Pi**.
Pin und Befehl werden im **ADJUST AREA** angepasst.
''GPIO.cleanup()'' setzt am Ende alle verwendeten GPIO-Pins wieder zurück.
#!/usr/bin/env python3
import RPi.GPIO as GPIO
# START ADJUST AREA
PIN = 17 # PIN wählen
VALUE = GPIO.HIGH # HIGH / LOW (anschalten/ausschalten)
# END ADJUST AREA
def main():
GPIO.setmode(GPIO.BCM) # Broadcom-GPIO-Nummern
GPIO.setwarnings(False) # Warning OFF
GPIO.setup(PIN, GPIO.OUT) # Als Ausgabe PIN festlegen
GPIO.output(PIN, VALUE) # Output setzen!
state = GPIO.input(PIN)
print("Status: ", bool(state))
# GPIO.cleanup() # Pin freigeben (LOW INPUT)
if __name__ == "__main__":
main()
=== Programm ausführen ===
chmod 775 led_simple.py # einmalig ausführbar machen!
./led_simple.py # Script ausführen!
Hierfür muss das Programm ausführbar gemacht werden (''chmod'') und man sich im Verzeichnis des auszuführenden Programms befinden.
===== Projekt: LED mit Python =====
* [[project:python_led| Projekt: LED mit Python ]]