Raspberry Pi
Pinout
pinout
+------------------| |--| |------+
| ooooooooooooo P1 |C| |A| |
| 1oooooooooooo +-+ +-+ |
| 1ooo |
| P5 oooo +---+ +====
| |SoC| | USB
| |D| Pi Model +---+ +====
| |S| B V2.0 |
| |I| |C|+======
| |S|| Net
| |I|+======
=pwr |HDMI| |
+----------------| |----------+
P1:
3V3 (1) (2) 5V
GPIO2 (3) (4) 5V
GPIO3 (5) (6) GND
GPIO4 (7) (8) GPIO14
GND (9) (10) GPIO15
GPIO17 (11) (12) GPIO18
GPIO27 (13) (14) GND
GPIO22 (15) (16) GPIO23
3V3 (17) (18) GPIO24
GPIO10 (19) (20) GND
GPIO9 (21) (22) GPIO25
GPIO11 (23) (24) GPIO8
GND (25) (26) GPIO7
GPIO Output
sys-Dateisystem
Als root oder Mitglied der Gruppe gpio
:
## get offset
ls /sys/class/gpio/gpiochip*
PIN=$((512+2))
echo $PIN > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio$PIN/direction
echo 1 > /sys/class/gpio/gpio$PIN/value
echo 0 > /sys/class/gpio/gpio$PIN/value
blink.sh
PIN=$((512+2))
echo $PIN > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio$PIN/direction
while true; do
echo 1 > /sys/class/gpio/gpio$PIN/value
sleep 1
echo 0 > /sys/class/gpio/gpio$PIN/value
sleep 1
done
sh blink.sh
Python
python ## öffnet eine interaktive Python-Shell
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(2, GPIO.OUT)
GPIO.output(2, True)
GPIO.output(2, False)
GPIO.cleanup()
blink.py
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
LED1=2
GPIO.setup(LED1, GPIO.OUT)
try:
while(True):
GPIO.output(LED1, True)
time.sleep(1)
GPIO.output(LED1, False)
time.sleep(1)
finally:
GPIO.cleanup()
python blink.py
Aufgaben
- Bauen Sie eine Schaltung und schreiben Sie das dazugehörige Programm, um abwechselnd 2 LEDs blinken zu lassen.
- Programmieren Sie eine Ampelschaltung, die in der richtigen Reihenfolge zwischen 3 LEDs umschaltet.
Zusatzaufgaben
- Programmieren Sie eine Schaltung mit 3 LEDs, welche 3 Bits darstellen, mit denen von 0 bis 7 gezählt wird.
- Schreiben Sie ein Programm, um eine 7-Segment-Anzeige anzusteuern.
GPIO Input
sys-Dateisystem
echo 2 > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio2/direction
cat /sys/class/gpio/gpio2/value
read.sh
while true; do
cat /sys/class/gpio/gpio2/value
sleep 1
done
sh read.sh
Die für I²C verwendeten GPIO-PINs (BCM GPIO2 und BCM GPIO3) haben einen fest verbauten Pull-Up-Widerstand.
Python
read.py
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
BUTTON1=2
GPIO.setup(BUTTON1, GPIO.IN)
try:
while(True):
print(GPIO.input(BUTTON1))
time.sleep(1)
finally:
GPIO.cleanup()
read2.py
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
BUTTON1=2
GEDRUECKT=0
GPIO.setup(BUTTON1, GPIO.IN)
try:
while(True):
if( GPIO.input(BUTTON1) == GEDRUECKT):
print("Button wurde gedrückt")
else:
print("Button wurde nicht gedrückt")
time.sleep(1)
finally:
GPIO.cleanup()
read3.py
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
BUTTON1=2
GEDRUECKT=0
GPIO.setup(BUTTON1, GPIO.IN)
try:
print("Bitte Button drücken um fortzufahren…")
while( GPIO.input(BUTTON1) != GEDRUECKT ):
pass
print("Bitte Button loslassen um fortzufahren…")
while( GPIO.input(BUTTON1) == GEDRUECKT ):
pass
finally:
GPIO.cleanup()
print("Das Programm ist beendet")
Beispiel: Ansteuerung mittels Webserver
Aufgaben
Eränzen Sie die Programme aus dem ersten Teil (GPIO Output), so dass jeweils beim Drücken eines Knopfes auf den nächsten Zustand umgeschaltet wird:
- Bauen Sie eine Schaltung und schreiben Sie das dazugehörige Programm, um abwechselnd 2 LEDs blinken zu lassen.
- Programmieren Sie eine Ampelschaltung, die in der richtigen Reihenfolge zwischen 3 LEDs umschaltet.
Zusatzaufgaben
- Programmieren Sie eine Schaltung mit 3 LEDs, welche 3 Bits darstellen, mit denen von 0 bis 7 gezählt wird.
- Schreiben Sie ein Programm, um auf einer 7-Segment-Anzeige zu zählen.
- Schreiben Sie ein Programm, das die Zeit zählt, wie lange ein Knopf gedrückt wurde.
- Entwerfen Sie eine Schaltung, um mit dem Programm von 5. zu messen wie lange es dauert, einen Kondensator über einen Photoresistor zu (ent)laden.
Weitere einfache Sensoren
Helligkeit mit Photoresistor+Kondonsator (oder Boden-Feuchtigkeitssensor)
MotionSensor
HC-SR04 - Ultrasonic Sensor (Entfernungsmesser)
Weitere Aktuatoren/Anzeigen
Multi-character 7-segment display
Parallele Protokolle
16x2 LCD-Display
Serielle Protokolle
UART
minicom -D /dev/ttyUSB0
I²C
- Displays
- GPIO-Expander
- AD/DA-Wandler
- Microcontroller
SPI
- Programmer z.B. für Arduino (ATtiny, ESP8266, ESP32)