Ansteuerung von 3 LEDs am Raspberry Pi mit Python
Ansteuerung von 3 LEDs an den GPIO Pins des Raspberry Pi mit Python, in Abhängigkeit mit der gemessenen Temperatur.
Die in diesem Beispiel verwendete Temperaturmessung habe ich in meinem Beitrag “Temperatur-Sensor DS1820 am Raspberry Pi mit Python” beschrieben.
verwendete Hardware
Neben einer Steckplatine (Breadboard) verwende ich in diesem Aufbau drei verschiedenfarbige LEDs. Diese werden mit je einem 150 Ohm Widerstand an die 5 Volt (Pin 2) angeschlossen. Die Ansteuerung über die 3,3 Volt Pins des RasPi erfolgt über je einen NPN BC547 Transistor an dessen B – Anschluss (mittleres Füßchen). Den GND habe ich mit dem Pin 25 des Raspberry Pi verbunden.
Die fritzing Projektdatei habe ich für dich zum Download bereitgestellt.
das Python-Programm
Für die Ansteuerung der GPIOs über Python ist keine besondere Installation notwendig. Allerdings muss der Aufruf des Programmes bzw. der Entwicklungsumgebung (IDLE) mit den entsprechenden Rechten erfolgen. Daher der Aufruf im Terminal mit sudo, in meinem Fall: sudo idle /var/www/led.py. Des Weiteren ist im Programm der IMPORT der Bibliothek notwendig.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
#!/usr/bin/python # coding=utf-8 # led.py #------------------------------------------------------------ import os, sys, time import RPi.GPIO as gp def sensorDateiAuslesen(): # 1-wire Slave Datei lesen file = open('/sys/bus/w1/devices/28-000005d2e508/w1_slave') filecontent = file.read() file.close() # Temperaturwerte auslesen und konvertieren stringvalue = filecontent.split("\n")[1].split(" ")[9] temperature = float(stringvalue[2:]) / 1000 # Temperatur ausgeben rueckgabeWert = '%6.2f' % temperature #Temperaturwert auf 2 Dezimalstellen formatiert return (rueckgabeWert) def aktuelleTemperatur(): messDaten = sensorDateiAuslesen() tempStatus=ledAusgabe(float(messDaten)) return() def ledAusgabe(messWert): if messWert < minTempUser: print "Gemessene Temperatur von ", messWert, " unter dem definierten Wert von ", minTempUser, "!" ledSteuerung(25) rueckgabe = 1 elif messWert > maxTempUser: print "Gemessene Temperatur von ", messWert, " über dem definierten Wert von ", maxTempUser, "!" ledSteuerung(24) rueckgabe = 2 else: print "Gemessene Temperatur von ", messWert, " im gewünschten Bereich von ", minTempUser, " und ", maxTempUser ledSteuerung(18) rueckgabe = 3 return(rueckgabe) def ledSteuerung(steuerWert): if steuerWert == 0: gp.output(18, gp.LOW) gp.output(24, gp.LOW) gp.output(25, gp.LOW) elif steuerWert == 18: gp.output(24, gp.LOW) gp.output(25, gp.LOW) gp.output(18, gp.HIGH) elif steuerWert == 24: gp.output(18, gp.LOW) gp.output(25, gp.LOW) gp.output(24, gp.HIGH) elif steuerWert == 25: gp.output(18, gp.LOW) gp.output(24, gp.LOW) gp.output(25, gp.HIGH) else: print "Falscher Übergabewert in ledSteuerung()" global minTempSensor, maxTempSensor, minTempUser, maxTempUser minTempUser = 20.00 # Benutzerdefinierte Untergrenze der Temperatur maxTempUser = 21.00 # Benutzerdefinierte Obergrenze der Temperatur # GPIO für LED Steuerung initialisieren gp.setmode(gp.BCM) # BCM Nummern verwenden gp.setwarnings(False) # Warnmeldungen abschalten gp.setup(18, gp.OUT) # Pin12 - BCM Nummer 18 - GPIO1 wird Ausgang gp.setup(24, gp.OUT) # Pin18 - BCM Nummer 24 - GPIO5 wird Ausgang gp.setup(25, gp.OUT) # Pin22 - BCM Nummer 25 - GPIO6 wird Ausgang # while-Schleife summe = 0 while summe < 100: aktuelleTemperatur() time.sleep(1) summe = summe + 1 |
Hallo Wolfgang
Bisher haben mir deine Beiträge sehr Weitergeholfen nur hier will es nicht Klappen.
Zwar kommt bei mir die Meldung das der Steuerwert falsch ist aber sonst nicht wirklich was, da ich mich erst seit ein paar Wochen mit dem Raspi beschäftige würde es mich freuen einen Tipp zu bekommen woran es liegen könnte
Danke im Voraus
Stefan
Hallo Stefan,
vielen Dank für Deinen Kommentar. Was meinst Du mit “Meldung das der Steuerwert falsch ist”? Ist es die Ausgabe der Meldung aus Zeile 78 gemeint? Dann schaue Dir mal die Aufrufe in den Zeilen 45, 50 und 56 an.
Viele Grüße
Wolfgang