Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Über mich
  • Deutsch
  • English
Menu

Raspberry PI Tutorial #7: DHT11 Sensor ansteuern (Teil4), darstellen der Werte in einem Diagramm

Posted on 3. Juni 20213. Mai 2023 by Stefan Draeger

In diesem Beitrag möchte ich dir zeigen wie du die Sensordaten eines DHT11 Sensors am Raspberry PI in einem Diagramm anzeigen lassen kannst.

Raspberry Tutorial #7: Sensordaten des DHT11 in einem Diagramm anzeigen lassen
Raspberry Tutorial #7: Sensordaten des DHT11 in einem Diagramm anzeigen lassen

Im letzten Beitrag habe ich dir gezeigt wie du die Daten des DHT11 Sensors in eine CSV Datei schreiben kannst, hier soll nun darum gehen wie du diese Daten in einem Diagramm anzeigenlassen kannst.

Rückblick

Zunächst ein kleiner Rückblick, solltest du jedoch den Beitrag Raspberry PI Tutorial #6: DHT11 Sensor ansteuern (Teil3), darstellen der Werte auf einer Webseite kennen so kannst du ggf. diesen Abschnitt überspringen.

Aufbau der Schaltung – DHT11 Sensor am Raspberry PI

Zunächst möchte ich dir die Schaltung aufzeigen welche für diesen Beitrag benötigt wird.

Schaltung - Raspberry PI Model B mit DHT11 Sensor
Schaltung – Raspberry PI Model B mit DHT11 Sensor

Natürlich kannst du auch einen anderen Sensor als wie den DHT11 verwenden. Der Code für die Darstellung im Liniendiagramm ist sehr dynamisch anwendbar.

Für den Aufbau der Schaltung kannst du den einfachen DHT11 Sensor verwenden oder wie ich einen welcher bereits auf einer Platine gelötet ist und somit der benötigte Widerstand und die Verbindung von Data zu VCC aufgebaut ist.

varianten des DHT11 Sensors
varianten des DHT11 Sensors

erstellen einer statischen HTML Seite

Aus den gesammelten Daten möchten wir nun eine statische HTML Seite erstellen. Hier nutzen wir wiederum Python zum generieren des HTML Codes.

statische HTML Seite mit Google Chart
statische HTML Seite mit Google Chart

Als Bibliothek zum darstellen eines Diagramms nutze ich hier Google Charts. Diese Bibliothek ist kostenfrei auch für kommerzielle Zwecke nutzbar.

Da wir erstmal „nur“ einen DHT11 Sensor haben möchte ich zunächst ein einfaches Liniendiagramm zeichnen. Es wird auf der horizontalen Achse die Zeit und auf der vertikalen Achse die Temperatur.

Als Grundlage nutze ich das Beispiel https://developers-dot-devsite-v2-prod.appspot.com/chart/interactive/docs/gallery/areachart.html#a-simple-example welches auf englisch sehr gut dokumentiert ist.

Download des statischen HTML Projektes

Hier nun der HTML & JavaScript Code zum download.

Raspberry PI Tutorial #7: statische HTML Seite mit Google ChartHerunterladen

erstellen einer dynamischen HTML Seite

Nachdem wir eine statische Seite erstellt haben möchten wir nun die Daten des DHT11 Sensors aus der CSV Datei laden und dynamisch im Diagramm anzeigen.

Für den Zugriff auf den Raspberry PI benutze ich das Terminalprogramm MobaXterm. Des Weiteren programmiere ich das Skript in Python3. Ich gehe davon aus das dieses bei dir bereits installiert und lauffähig ist.

Verzeichnisstruktur

Das Projekt teilt sich in 2 Hauptverzeichnisse auf zum einen liegen die Daten für die Webseite unter

/var/www/html/dht11webdiagramm

Die Python3 Quellcode Dateien liegen im User Verzeichnis unter

/home/pi/dht11csv_web

zu diesen Dateien zählen:

  • loadData.py > Quellcodedatei
  • dht11values.csv > CSV Datei mit den Sensordaten

Schritt 1 – lesen der Sensordaten & erweitern der CSV Datei

Zunächst lesen wir die Sensordaten aus und speichern diese in die bereits bekannte CSV Datei.

def readDht11Values():
      timestamp = getCurrentTimestamp()
      humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)#
      if humidity is not None and temperature is not None:
        with open(folder+"dht11values.csv","a") as file:
          file.write(timestamp +';')
          file.write('{0:0.1f}; {1:0.1f}'.format(temperature, humidity))
          file.write('\n')
      else:
        print('Fehler beim empfangen der Daten. Bitte versuche es erneut!')

def getCurrentTimestamp():
        timestamp = '{:%d.%m.%Y %H:%M:%S}'.format(datetime.datetime.now())
        return timestamp

Abweichend zu den vorherigen Beiträgen baue ich die CSV Datei ohne Maßeinheiten auf d.h. die Sensordaten werden ohne die Zeichen Grad Celsius & Prozentzeichen gespeichert. Des Weiteren wird der Zeitstempel im Format „Tag.Monat.Jahr Stunde:Minute:Sekunde“ gespeichert.

Da wir später den CronJob für 5min. einstellen wollen würde hier auch ein Format ohne „Sekunde“ ausreichen.

Schritt 2 – erstellen einer JavaScript Datei mit den Sensordaten

Wir haben im ersten Schritt die Daten aus der CSV Datei geladen und möchten diese nun in eine JavaScript Datei schreiben. Dieses ist der einfachste Weg die Daten für das Diagramm bereit zustellen.

def writeJavaScriptFile():
        with open(folder+"dht11values.csv","r") as csvFile:
                with open("/var/www/html/dht11webdiagramm/js/data.js","w") as jsFile:
                        jsFile.write("function getChartData(){")
                        jsFile.write("\n")
                        jsFile.write("return google.visualization.arrayToDataTable([")
                        jsFile.write("\n")
                        jsFile.write("['Datum-Uhrzeit','Temperatur'],")
                        jsFile.write("\n")
                        for line in csvFile:
                                data = line.strip().split(";")
                                print(data)
                                jsFile.write("[\'"+str(data[0])+"\',"+str(data[1])+"],")
                                jsFile.write("\n")
                        jsFile.write("]);}")

Schritt 3 – CronJob für zeitgesteuerte Ausführung

Das PythonSkript für das Laden der Daten und schreiben in einer JavaScript Datei müssen wir nun in einem Intervall starten. Hier können wir den CronJobs vom Betriebssystem Linux verwenden.

Um die Syntax für den CronJob zu erstellen kannst du entweder im Manual (man cron) auf der Seite https://wiki.ubuntuusers.de/Cron/ nachschauen oder du kannst einen sogenannten Crontab Generator verwenden.

Der Crontab Generator hat den Vorteil das dort recht einfach visualisiert ist wann der Job gestartet wird.

Formular im CronTab Generator
Formular im CronTab Generator

Die Syntax für einen Job welcher alle 5 Minuten das Python3 Skript loadData.py ausführt sieht wie folgt aus:

*/5 * * * * sudo python3 /home/pi/dht11csv_web/loadData.py > /home/pi/py.log

Schritt 4 – automatisches aktualisieren der Seite

Mit ein paar Zeilen JavaScript können wir nun die Seite alle 5,5 Minuten aktualisieren.

setTimeout(function(){
   window.location.reload(1);
}, 330000);

Warum alle 5,5 Minuten?

Wir lesen alle 5,5 Minuten einen neuen Wert ein, damit wir dem ganzen ein wenig Zeit lassen um ggf. Dateizugriffe zu schließen / zu beenden.

Download der Sourcen für das Anzeigen von Sensordaten in einem Diagramm am Raspberry Pi

Hier nun die Dateien des Projektes zum bequemen Download.

Raspberry PI Tutorial #7: statische HTML Seite mit Sensordaten im DiagrammHerunterladen
Raspberry PI Tutorial #7: Daten des DHT11 Sensors in CSV Datei speichernHerunterladen

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}