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
Die Zuordnung der externen Pin-Nummern zu den internen Nummen des Chips steht in:
/sys/kernel/debug/gpio
sys-Dateisystem
Als root oder Mitglied der Gruppe gpio
:
grep GPIO3 /sys/kernel/debug/gpio
PIN=574
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=574
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)
PIN = 3
GPIO.setup(PIN, GPIO.OUT)
GPIO.output(PIN, True)
GPIO.output(PIN, False)
GPIO.cleanup()
blink.py
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
LED1=3
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
PIN=574
echo $PIN > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio$PIN/direction
cat /sys/class/gpio/gpio$PIN/value
read.sh
while true; do
cat /sys/class/gpio/gpio$PIN/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=3
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=3
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=3
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
man minicom
-D, --device
Specify the device, overriding the value given in the configuration file.
-b, --baudrate
Specify the baud rate, overriding the value given in the configuration file.
I²C
- Displays
- GPIO-Expander
- AD/DA-Wandler
- Microcontroller
SPI
- Programmer z.B. für Arduino (ATtiny, ESP8266, ESP32)