Inhaltsverzeichnis [Verbergen]
Einleitung
Hallo,
Nachdem ich seeeehr lange inaktiv in diesem Forum war wollte ich nun mal einen kleinen Beitrag leisten.
In diesem Post will ich für alle die mit einem Raspberry Pi und oder Python anfangen wollen oder auch für diejenigen, die einfach mal was machen wollen, ein kleines erstes Projekt vorstellen. Dieses "Thermometer" ist super einfach zu machen und benötigt auch nicht wirklich Vorwissen. Außerdem gibt es mehrere Varianten, diese zu erweitern. Aber jetzt genug geredet.
Was du brauchst
Natürlich einen Raspberry Pi. Ich verwende für dieses Projekt einen Raspberry Pi 3B+. Außerdem einen Temperatursensor. Hier gibt es eigentlich nur 2: Den DHT11 und den DHT22. Der 11er ist zwar günstiger dafür aber ungenauer, und erfasst nur Temperaturen zwischen 0 bis +50°C, sowie Luftfeuchtigkeit zw. 20-80%. Der 22er kann Luftfeuchtigkeit zw. 0-100% messen und Temperaturen zw. -40 bis +80°C (Die Messbereiche der Sensoren können je nach Hersteller und Ausführung variieren). Je nach Einsatzgebiet müsst ihr entscheiden welchen Sensor ihr verwenden wollt. Bei den DHT Sensoren gibt es sowohl 3- als auch 4-Pin Ausführungen. Welchen ihr verwendet ist egal, da bei dem 4-Pin Sensor der 3. Pin nicht verwendet wird. Außerdem benötigt ihr Jumperkabel und einen Widerstand zw. 4,7 kΩ bis 10 kΩ. Ich verwende einen DHT11 mit 4 Pins aus dem Freenove Raspberry Starter Kit. In diesem Kit ist (bis auf den Raspberry) alles nötige für dieses Projekt dabei.
Also noch mal Zusammenfassend. Ihr braucht:
- Einen Raspberry Pi
- Jumperkabel
- Einen DHT11/DHT22
- Einen Widerstand (4,7 kΩ bis 10 kΩ)
Der Aufbau
Der Aufbau sieht wie folgt aus:
Zur Erklärung:
Der DHT11 besitzt die Pins 1-4, nummeriert von links nach rechts. Der 1. Pin des Sensors ist die Stromversorgung. Da wir einen Raspberry nutzen wird hierfür den 3.3V Pin des Raspberrys (Eine Übersicht der Pins des Raspberrys findet ihr hier). Der 2. Pin des DHT11 ist der Datenpin. Dieser wird sowohl mit dem GPIO 4 Pin als auch mit 3V3 Pin des Raspberrys über einen 10 kΩ Widerstand verbunden. Der 3. Pin des Sensors wird, wie oben erwähnt, nicht verwendet (außer natürlich ihr habt einen 3-Pin Sensor). Der 4. Pin ist der Ground Pin. Das Layout oben ist zur Übersicht auf einem Breadboard. Ihr könnt den Sensor mit F-M Jumperkabeln natürlich auch direkt am Raspberry anschließen.
Die Software
Nachdem ihr alles wie oben beschrieben aufgebaut habt, kommt nun die Software auf dem Raspberry ins Spiel. Ich nutze den Raspberrry mit dem grafischen Betriebssystem Raspbian.
Startet euren Raspberry und verbindet euch entweder über eine angeschlossene Maus, Tastatur und Monitor mit dem Raspberry oder über einen externen Windows PC (Anleitung dafür findet ihr hier).
Zunächst müsst ihr die Python Library für den Sensor über die Konsole installieren. Die Library und eine Anleitung zum installieren findet ihr hier. Danach müsst ihr Flask installieren. Flask ist ein Webframework für Python made in Austria. Dieses findet ihr hier. Wenn ihr beides installiert habt müsst ihr nun eine Flask Website erstellen. Dafür erstellt ihr zunächst einen Ordner für euer Projekt. In diesem Ordner erstellt ihr ein Pythonscript. Dieses Startet euren Flaskserver und hostet die Website auf eurem Raspberry. Öffnet das Script und kopiert folgenden code hinein:
- from flask import Flask, render_template
- import Adafruit_DHT
- app = Flask(__name__)
- @app.route("/")
- def data():
- humidity, temp = Adafruit_DHT.read_retry(11, 4)
- Data={
- "temp": temp,
- "humidity": humidity
- }
- return render_template('main.html', **Data)
- if __name__ == "__main__":
- app.run(host='0.0.0.0', port=5000, debug=False)
Zur Erklärung:
In Zeile 1 und 2 werden die beiden Libraries (s.o.) importiert. Zeile 7 erstellt unsere Funktion: Zunächst werden den Variablen "humidity" und "temp" die Daten des Sensors zugewiesen. WICHTIG: Wenn ihr den Datenpin des Sensors nicht an den GPIO Pin 4 des Raspberrys angeschlossen habt müsst ihr die "4" zu dem jeweiligen GPIO Pin den ihr verwendet abändern! In Zeile 10 und 11 geben wir den Variablen aus Python den Namen, den sie in der .html Datei, welche wir noch erstellen, tragen. Ich habe hier einfach der Einfachheit halber dieselben Namen verwendet. In Zeile 13 sagen wir dann, an welche Datei wir die Werte übergeben wollen. Ich habe die .html Datei main.html genannt. Nennt ihr sie anders, müsst ihr hier logischerweise diesen Namen angeben. Zum Schluss starten wie unsere App dann mit den Parametern "host", "port" und "debug". "host" ist hier 0.0.0.0, also der localhost. Unter "port" gebt ihr einen freien port auf dem Raspberry an. Zum schluss könnt ihr mit "debug = True" oder "debug = False" auswählen ob ihr den Debug-modus verwenden wollt. Diesen benötigen wir jedoch nicht. Nachdem ihr das Pythonscript erstellt habt könnt ihr dieses speicher und schließen. Dies brauchen wir nicht mehr. Nun erstellen wir in dem Projektordner noch einen weiteren Ordner. Diesen nennt ihr "templates". Im "templates" Ordner erstellt ihr eine .html Datei und öffnet diese. In die Datei kommt folgender Code:
Der Meta-Tag in Zeile 5 aktualisiert die Seite automatisch alle 5 Sekunden. Dies könnt ihr je nach euren Wünschen ändern oder auch entfernen.
Euer Projektordner sollte dann so aussehen:
Projektordner/
|-- templates/
| |__ main.html
|__ start.py
Die Datein findet ihr hier auch noch mal zum runterladen: Thermometer.zip
Damit seid ihr dann eigentlich schon fertig. Die .html Datei sieht etwas karg aus, weshalb ihr diese noch aufhübschen könnt. Ein Beispiel, welches ich verwende, findet ihr hier (Sorry, ist etwas schlampig gemacht, bin nicht der beste in html/css ).
Um das Ganze dann zu starten öffnet ihr auf eurem Rapberry die Konsole und navigiert in euren Projektordner. Nun gebt ihr folgenden Befehl in die Konsole ein:
In eurem Terminal sollte dann stehen:
Jetzt läuft die Seite und ihr könnt sie auf dem Raspberry öffnen indem ihr in der Adressleiste des Browsers "localhost:5000" oder "0.0.0.0:5000" eingebt. Auf einem anderen PC im selben Netzwerk öffnet ihr die Seite über "IpDesRapspberry:5000". Wie ihr die IP eures Raspberry in eurem Netzwerk ermittelt findet ihr hier. Die ":5000" müsst ihr natürlich anpassen je nachdem welchen Port ihr oben gewählt habt.
Schlusswort
Ich hoffe ich habe alles gut genug beschrieben.Ich habe das ganze schon vor einigen Monaten gemacht, weshalb es sein kann, dass ich hier etwas vergessen habe. Sollte dass der Fall sein könnt ihr mich gerne in den Kommentaren berichtigen. Ich werde versuchen möglichst oft in die Kommentare zu schauen. Sollte ich bei den Codes etwas falsch beschrieben haben könnt ihr mich auch hier gerne darauf hinweisen. Ich selbst bin noch kein wirklicher Profi in Python, sondern haben hauptsächlich nur Grundwissen.
Viel Spaß bei der Umsetzung.