====== 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 ]]