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

  1. Bauen Sie eine Schaltung und schreiben Sie das dazugehörige Programm, um abwechselnd 2 LEDs blinken zu lassen.
  2. Programmieren Sie eine Ampelschaltung, die in der richtigen Reihenfolge zwischen 3 LEDs umschaltet.

Zusatzaufgaben

  1. Programmieren Sie eine Schaltung mit 3 LEDs, welche 3 Bits darstellen, mit denen von 0 bis 7 gezählt wird.
  2. 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:

  1. Bauen Sie eine Schaltung und schreiben Sie das dazugehörige Programm, um abwechselnd 2 LEDs blinken zu lassen.
  2. Programmieren Sie eine Ampelschaltung, die in der richtigen Reihenfolge zwischen 3 LEDs umschaltet.

Zusatzaufgaben

  1. Programmieren Sie eine Schaltung mit 3 LEDs, welche 3 Bits darstellen, mit denen von 0 bis 7 gezählt wird.
  2. Schreiben Sie ein Programm, um auf einer 7-Segment-Anzeige zu zählen.
  3. Schreiben Sie ein Programm, das die Zeit zählt, wie lange ein Knopf gedrückt wurde.
  4. 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)

„1-Wire“ -> „Bit-Banging“

DHT11 / DHT22 / AM2302 (Luftfeuchtigkeit+Temperatur)

Sonstiges

PiCamera

SoundBoard

Internet connection status indicator

Reaction Game

Home Assistant

Raspap