Ansteuerung von 3 LEDs am Raspberry Pi mit Python basierend auf Temperaturmesswerten
In diesem Beitrag zeige ich dir, wie du mit Python drei LEDs auf deinem Raspberry Pi basierend auf Temperaturmessungen steuern kannst.
Die notwendigen Schritte zur Einrichtung des Temperatursensors DS18B20 habe ich in meinem Beitrag „Temperatur-Sensor DS1820 am Raspberry Pi mit Python“ erklärt.
Aktualisiert am 13.09.2023: Der ursprüngliche Beitrag stammt vom 16.12.2015 und wurde heute von mir aktualisiert. Neben einer Aktualisierung der notwendigen Hardware habe ich den Code an Python 3 angepasst.
Dieser Beitrag gehört zur Kategorie “Temperatur WebApp“, in der du eine Sammlung von Beiträgen findest, wie man eine eigene WebApp erstellt und auf die mit dem Raspberry Pi ermittelten Temperaturdaten zugreifen kannst.
Anschluss der LEDs
Bevor wir mit der Programmierung beginnen, müssen wir natürlich unsere LEDs mit dem Raspberry Pi verbinden. Für die Verbindung benötigen wir
- einen Raspberry Pi (ich verwende den Raspberry Pi 4, aber auch andere Modelle funktionieren)
- drei verschiedenfarbige LEDs
- drei 150 Ohm Widerstände
- drei NPN BC547 Transistoren
- DS18B20 Temperatur-Sensor für die Messwerterfassung
- einen 4,7k Ohm Pull-Up Widerstand für den Temperatursensor
- ein Breadboard und entsprechende Kabel zum Testen, wenn du noch keines hast, empfiehlt sich gleich ein entsprechendes Set
Die drei verschiedenfarbigen LEDs werden über je einen 150 Ohm Widerstand an die 5 Volt (Pin 2) des Raspberry Pi angeschlossen. Die Ansteuerung über die 3,3 Volt-Pins des RasPi erfolgt über je einen NPN-Transistor BC547 an dessen Anschluss B (mittleres Beinchen). GND habe ich mit Pin 25 des Raspberry Pi verbunden.
Python-Programm
Für die Ansteuerung der GPIOs über Python ist keine spezielle Installation erforderlich. Allerdings muss der Aufruf des Programms 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. Außerdem 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 |
#!/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-0516848e26ff/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 |
Bereitgestellte Dateien und Links
Die Fritzing Projektdatei steht auch auf meiner Fritzing Projektseite auf diesem Blog zum Download zur Verfügung.
Wenn du dir das Abtippen oder Kopieren des Codes sparen möchtest, steht dir der Code als Textdatei zum Download bereit.
Gib im Terminal folgenden Befehl ein, dieser lädt die Textdatei herunter und speichert diese als Python-Datei ab.
1 |
wget -O led.py https://webnist.de/downloads/led.txt |
Die Funktionsweise des (ursprünglichen) Programmcodes habe ich als Video auf YouTube hochgeladen.
Sehr geerter Herr Raab,
Wir sind Talente einer Talentförderung für Informatik und setzen uns gerade mit dem Rasberry Pie auseinander. Wir sind dabei auf Ihre Seite gestoßen und fanden die Videos sehr hilfreich. Jedoch Schreiben wir Ihnen mit ein paar Vorliegen.
Uns ist aufgefallen das bei dem Projekt, bei dem 3 LED durch ein Phyton Script gesteuert werden sollten die Fzz Datei falsch verlinkt ist und man sie nicht einfügen kann. Algemein sind dir Fzz Dateien nicht einfügbar und Falsch verlinkt. Zudem ist Ihre Bildauswahl eher verwirrend, daher die Bilder zwar verschiedene Projekte anzeigen aber alle Links zu dem gleichen(dem mit den Temeperatursensor) führen.
Wir würden uns über eine baldige Antwort freuen.
Mit Freundlichen Grüssen
Hallo,
vielen Dank für die Rückmeldung.
Tatsächlich habe ich auf der fritzing-Projektseite einen Fehler in der Verlinkung (Linktext) gefunden. Auf dieser Projektseite habe ich keinen Fehler gefunden. Der beschriebene Fehler ist für mich nicht nachvollziehbar bzw. reproduzierbar.
Viele Grüße
Wolfgang
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
Kleiner Hinweis, alle Kommentare werden moderiert.
Dies bedeutet, der Kommentar wird vor der Veröffentlichung durchgelesen und von mir geprüft. Auch behalte ich mir vor, jeden Kommentar zu löschen, der nicht direkt auf das Thema abzielt oder nur den Zweck hat, Leser oder Autoren herabzuwürdigen.
Neuste Beiträge
Kleinen Spickzettel für Raspbian OS Befehle
Entdecke die Welt von Webnist.de
Erfahre mehr über die Hintergründe meines Blogs und wie ich dich bei deinen digitalen Projekten unterstützen kann.Kategorien
KATEGORIEN
Aktuelles Video auf YouTube
Beschreibung der Verwendung eines TTP223B Touch Sensors am GPIO Port des Raspberry Pi mit Python.
Die aktuell 6 derzeit meistbesuchten Beiträge
Beiträge mit den meisten Kommentaren