Mithilfe einer RGB-LED und einem Buzzer soll der aktuelle Status des Systems dargestellt werden. Die RGB-LED soll rot leuchten, bis ein RFID-Chip registriert wird. Die Registrierung des RFID-Chips wird anschließend mit einem Ton bestätigt und die RGB-LED schaltet von rot auf blau. Sobald ein GPS-Signal erkannt wird und der RFID-Chip registriert ist, soll die RGB-LED auf grün umschalten. Befindet sich der Raspi im Datenübertragungsmodus zum Webserver (Übermittlung der Wegpunkte) soll die RGB-LED grün blinken.
Zu Testzwecken wird die,s wie bei den anderen Modulen, zunächst losgelöst vom restlichen Programmcode getestet. Der Test wurde unter Verwendung des Betriebssystems Raspbian Stretch Lite durchgeführt.
Die nachfolgende Abbildung enthält den Schaltplan für den Versuchsaufbau:

Wie aus dem Schaltplan entnommen werden kann, wird eine RGB-LED mit drei Anoden und einer Kathode verwendet. Den Anoden werden Widerstände vorgeschalten, um die RGB-LED vor Überhitzung zu schützen. Da die RGB-LED ohne ein Datenblatt ausgeliefert wurde, konnten die notwendigen Werte für die Widerstände nicht genau bestimmt. Sicherheitshalber werden deshalb 220 Ohm Widerstände verwendet.
Der folgende Programmcode zeigt die Ansteuerung der RGB-LED und des Buzzers:
import RPi.GPIO as GPIO
import time
GPIO.setwarnings(False)
pins = {'pin_R':11, 'pin_G':12, 'pin_B':13} # Belegung der Pins
GPIO.setmode(GPIO.BOARD) #Verwendung des Raspi GPIO-Boardschema (physikalische Pin-Belegung)
for i in pins: # Alle Pins vorbereiten
GPIO.setup(pins[i], GPIO.OUT) # Pin-Modus: ausgehend
GPIO.output(pins[i], GPIO.HIGH) # Pin-Output: +3.3V
p_R = GPIO.PWM(pins['pin_R'], 9999) # Pulsweiten-Modulation wird für das Blinken der RGB-LED benötigt, zunächst
p_G = GPIO.PWM(pins['pin_G'], 9999) # sollen die Farben aber durchgängig leuchten, weshalb die Frequenz auf 9999
p_B = GPIO.PWM(pins['pin_B'], 9999) # gesetzt wird
def startLED(red, green, blue): # Funktion zum Setzen der Werte, Übergabe von numerischen Werten zwischen 0 und 1
p_R.start(red)
p_G.start(green)
p_B.start(blue)
try:
startLED(1,0,0) # RGB-LED leuchtet rot
time.sleep(5)
startLED(0,1,0) # RGB-LED leuchtet grün
time.sleep(5)
startLED(0,0,1) # RGB-LED leuchtet blau
time.sleep(5)
p_G.ChangeFrequency(3) # Änderung der Frequenz von 9999 auf 3 und ermögliche so das Blinken der RGB-LED
startLED(0,1,0) # RGB-LED blinkt grün
time.sleep(5)
# Buzzer ansteuern
GPIO.setup(37, GPIO.OUT) # Pin 37 als Ausgang definieren
GPIO.output(37, 1) # Ausgang auf High setzen und damit Ton auslösen
time.sleep(0.3) # Kurze Zeit warten, Ton halten
GPIO.output(37, 0) # Ausgang auf Low setzen und Ton ausschalten
except KeyboardInterrupt: # Druecke CTRL+C zum Abbrechen
print("Keyboard interrupt")
except: # Fehlerbehandlung
print("Error")
finally:
print("Clean up")
GPIO.cleanup()
Alle gewünschten Funktionen zur Darstellung des aktuellen Status konnten mit diesem Programmcode erfolgreich getestet werden. Die verwendete RGB-LED erwies sich als nicht besonders leuchtstark, weshalb ein bereits vorkonfektioniertes RGB-LED-Modul erworben wurde.

Und wie steuert Ihr den Lautsprecher an? 😉
Ist nur ein Buzzer, habs korrigiert. Der Ausgang des Pin 39 wird auf High gesetzt, dies löst die Wiedergabe eines Tons aus. Anschließend wird der Ausgang auf Low gesetzt und der Ton verstummt.