Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry PI

Menu
  • Projekte
    • LED’s
    • Servo & Schrittmotoren
    • Sound
    • Displays (LCD, OLED, LED)
    • Kommunikation
    • Sicherheit
    • Smarthome
    • Weekend Project
  • Mikrocontroller
    • Arduino
      • Tutorials
      • ProMini
        • Anschließen & Programmieren
      • Nano
        • Arduino Nano – Übersicht
      • UNO
        • Übersicht
        • Funduino UNO
        • Maker UNO – Überblick und Test
        • Arduino UNO R4 WiFi / Minima
      • MEGA 2560
        • Funduino Mega 2560 R3
        • Übersicht
      • Leonardo
        • Übersicht
    • ESP32
      • ESP32-CAM
        • Einrichten der ESP32-CAM und erster betrieb
        • ESP32 CAM als Access Point einrichten
        • DIY ESP32 CAM FTDI Adapter
        • ESP32 CAM – Vergleich der verfügbaren Kameralinsen
        • Python – ESP32 CAM Bild speichern
        • ESP32-CAM – Bewegung ermitteln mit Python3
        • ESP32-CAM WROVER E
        • ESP32-CAM Stream per Python3 aufzeichnen
      • Infrarot-Fernbedienung mit dem ESP32 und MicroPython auslesen: Ein Anfängerleitfaden
      • Der ESP32 Plus von Keyestudio: Ein leistungsstarker Mikrocontroller im Arduino-UNO-Format
      • Mikrocontroller ESP32 H2 im Test
      • Seeed Studio ESP32C3 & Bluetooth
    • ESP8266
      • NodeMCU – “Einer für (fast) Alles!”
      • WEMOS
        • WEMOS D1 – Arduino UNO kompatibles Board mit ESP8266 Chip
        • WEMOS D1 Mini – Übersicht
        • Wemos D1 mini Shields
    • Raspberry Pi Pico
      • Raspberry Pi Pico RESET-Taster: So fügst du ihn hinzu
      • Ein erster Blick auf den Melopero Cookie RP2040: Raspberry Pi Pico meets micro:bit
      • Raspberry Pi Pico Pinout: Eine ausführliche Übersicht
      • Vergleich Raspberry Pi Pico & RP2040:bit
      • Raspberry Pi Pico: Programmierung und Entwicklung mit der Arduino IDE auf Linux
  • Newsletter
  • Über mich
  • DeutschDeutsch
  • EnglishEnglish
Menu

Raspberry Pi Pico W – visualisieren von Sensorwerten in Diagramme – Teil 1

Posted on 14. November 20223. Mai 2023 by Stefan Draeger

In diesem Beitrag möchte ich dir zeigen, wie du Sensordaten am Raspberry Pi Pico W in Diagramme visualisieren kannst.

Raspberry Pi Pico W - visualisieren von Sensorwerten in Diagramme - Teil 1
Raspberry Pi Pico W – visualisieren von Sensorwerten in Diagramme – Teil 1

Im ersten Beitrag soll es darum gehen, wie diese Daten auf einer Webseite veröffentlicht werden, dazu verwende ich die JavaScript-Bibliothek Google Charts, welche gut dokumentiert und kostenfrei unter https://developers.google.com/chart zu finden ist.

  • Rückblick
  • Ziele
  • Besonderheiten bei Google Charts
  • Benötigte Ressourcen für dieses Projekt
  • Aufbau der Schaltung
    • Pinout des DHT11 Sensors
    • Technische Daten des DHT11 Sensors
  • Programmieren des Raspberry Pi Pico W in der Thonny IDE
    • Aufbau einer Webseite für die Anzeige der Messwerte

Rückblick

Wie du einen Raspberry Pi Pico W in ein lokales Wi-Fi Netzwerk einbindest und eine Webseite auslieferst, habe ich dir bereits in nachfolgenden Beiträgen ausführlich gezeigt.

  • Raspberry Pi Pico W – Webserver programmieren
  • Raspberry Pi Pico W – Webseite ins Internet veröffentlichen

Ziele

Das Ziel dieses Beitrages ist es, dass du erfährst, wie die Sensorwerte eines DHT11 Sensors (Temperatur & rel. Luftfeuchtigkeit) auf einem Liniendiagramm angezeigt werden.

Pi Pico Diagramme visualisieren
Pi Pico Diagramme visualisieren

Besonderheiten bei Google Charts

Für die Darstellung der Diagramme verwende ich wie bereits erwähnt die Google Charts. Diese haben jedoch bei der Verwendung eine Besonderheit, denn diese darf man nicht lokal hosten. Das bedeutet, dass wir diese vom Google Server laden müssen.

Somit haben wir als Bedingung, dass unser kleines Projekt einen Zugriff auf das Internet benötigt.

Benötigte Ressourcen für dieses Projekt

Für den Nachbau dieses Projektes benötigst du:

  • einen Raspberry Pi Pico W,
  • ein Micro-USB Datenkabel,
  • einen DHT11 Sensor,
  • ein 400 Pin Breadboard,
  • diverse Breadboardkabel, männlich – männlich, 10 cm

Den DHT11 Sensor gibt es in 2 Varianten, zum einen als einfachen Baustein und zum anderen auf einer Platine.

Varianten des DHT11 Sensors
Varianten des DHT11 Sensors

Die Unterschiede zwischen diesen Varianten liegen darin, dass bei der Variante mit Platine die Schaltung mit dem benötigten Widerstand bereits vorhanden ist. Solltest du also den einfachen Baustein verwenden (welcher nebenbei auch nicht günstiger oder teurer ist) so musst du zusätzlich noch einen 10 kOhm Widerstand in die Schaltung einbauen.

Aufbau der Schaltung

Zunächst bauen wir die Schaltung mit dem DHT11 Sensor auf.

DHT11 SensorRaspberry Pi Pico W
GNDGND, Pin 38
DATAGP15, Pin 20
VCCVBUS

Hier nun die beiden Schaltungen mit den beiden Varianten des DHT11 Sensors.

Schaltung - Raspberry Pi Pico mit DHT11 Sensor
Schaltung – Raspberry Pi Pico mit DHT11 Sensor
Schaltung - Raspberry Pi Pico mit Bauteil DHT11 & Widerstand
Schaltung – Raspberry Pi Pico mit Bauteil DHT11 & Widerstand

In den Grafiken verwende ich das Vorgängermodell, den Raspberry Pi Pico, dieser ist jedoch baugleich dem neuen Pico W und hat das gleiche Pinout.

Raspberry Pi Pico W mit DHT11 Sensor auf 400 Pin Breadboard
Raspberry Pi Pico W mit DHT11 Sensor auf 400 Pin Breadboard

Pinout des DHT11 Sensors

Hier der vollständigkeitshalber das Pinout der Varianten des DHT11 Sensors.

DHT11 Sensor Pinout
DHT11 Sensor Pinout
Pinout des DHT11 Sensors
Pinout des DHT11 Sensors

Die Varianten auf einer Platine unterscheiden sich darin, dass DATA & VCC vertauscht sind, jedoch ist der Pin DATA auf der Platine mit einem „S“ wie Signal gekennzeichnet.

Technische Daten des DHT11 Sensors

DHT11
Messbereich relative Luftfeuchtigkeit 20% bis 90%
Toleranz relative Luftfeuchtigkeit ±5%
Messbereich der Temperatur 0°C bis 60°C
Toleranz des Messbereiches für die Temperatur ±2°C
Betriebsspannung 5V
Technische Daten des DHT11 Sensors

Programmieren des Raspberry Pi Pico W in der Thonny IDE

Zum Programmieren des Pi Pico W nutze ich hier die Thonny IDE welche du kostenfrei unter https://thonny.org/ für Linux, macOS und Microsoft Windows herunterladen kannst.

IDE Thonny - erster Start
IDE Thonny – erster Start

Wie du die Thonny IDE unter Linux für den Pi Pico W einrichtest, habe ich dir im gleichnamigen Beitrag Thonny IDE auf Linux einrichten für den Raspberry Pi Pico W ausführlich an Linux Mint erläutert.

Den nachfolgenden kleinen Code habe ich aus der offiziellen englischen Dokumentation von Micropython.

import dht
import machine
d = dht.DHT11(machine.Pin(15))

d.measure()
print("Temperatur:", d.temperature(), "°C", sep=" ")
print("rel. Luftfeuchtigkeit:",d.humidity(), "%", sep=" ")

Wenn wir diesen Code ausführen, dann wird aus der Konsole nachfolgende Meldung ausgegeben.

MicroPython v1.19.1-88-g74e33e714 on 2022-06-30; Raspberry Pi Pico W with RP2040

Type "help()" for more information.
>>> %Run -c $EDITOR_CONTENT
Temperatur: 18 °C
rel. Luftfeuchtigkeit: 70 %
>>> 

Diese beiden Messwerte wollen wir nun auf einer Webseite in Diagramme anzeigen.

Aufbau einer Webseite für die Anzeige der Messwerte

Im ersten Schritt haben wir die beiden Messwerte des DHT11 Sensors ausgelesen und in der Konsole angezeigt. Jetzt möchte ich dir zeigen, wie eine kleine Webseite aufgebaut wird, um diese Daten in Diagramme angezeigt werden.

Wie du eine Webseite am Raspberry Pi Pico W erstellst und auslieferst, habe ich dir bereits im Beitrag Raspberry Pi Pico W – Webseite ins Internet veröffentlichen ausführlich gezeigt.

Webseite mit Messdaten vom DHT11 Sensor
Webseite mit Messdaten vom DHT11 Sensor
Raspberry Pi Pico W – Webseite mit DiagrammHerunterladen

Im Nachfolgenden erstelle ich jeweils für den Sensor sowie für die Seite eigene Dateien, welche in den Hauptcode importiert werden, das hat den Vorteil, dass wir so unseren Code recht übersichtlich halten.

Der DHT11 Sensor liefert alle 1,5 Sekunden einen neuen Wert, daher lese ich auch nur in diesen Abständen die Messdaten aus. Hier kannst du auch locker auf ein Intervall von 5 Minuten (300000 Millisekunden) wechseln.

# importieren der zusätzlichen Module
from dht_sensor import DHT11
from website import *

# importieren der Module für den Aufbau
# der Netzwerkverbindung und die Möglichkeit
# eine Webseite auszuliefern
import network
import socket

# Modul welches Funktionen zur Zeiten bereithält
# zbsp. wieviele Millisekunden seit dem Start
# vergangen sind
import time

# Modul für das steuern der GPIOs am Mikrocontroller
from machine import Pin

# erzeugen einer Instanz des DHT11 Sensors
sensor = DHT11()

# Zugangsdaten zum WiFi Netzwerk
ssid = '****'
password = '****'

# Aufbauen einer WiFi Verbindung
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)

print('Verbindung wird aufgebaut...')
max_wait = 10
while max_wait > 0:
    if wlan.status() < 0 or wlan.status() >= 3:
        break
    max_wait -= 1
    print('.', end='')
    time.sleep(1)

print('')

if wlan.status() != 3:
    raise RuntimeError('Aufbau der Verbindung fehlgeschlagen!')
else:
    print('Erfolgreich mit dem WiFi Netzwerk ', ssid, ' verbunden!' )
    status = wlan.ifconfig()
    print('aktuelle IP-Adresse ist: ' + status[0])

addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]

s = socket.socket()
s.bind(addr)
s.listen(1)

# print('', addr)

# Variablen für das speichern der letzten Ausführung
# zum lesen der Messdaten vom Sensor
last_action = 0

# Wert in Millisekunden
delay = 1500

# ein Zähler welcher hochgezählt wird
data_index = 0

# Variable für das halten der Webseite
html_data = ""

# Endlosschleife
while True:
    # Wenn der Zeitpunkt der letzten Ausführung länger zurück liegt,
    # als der jetzige Zeitpunkt - dem gesetzen delay, dann...
    if last_action < (time.ticks_ms()-delay):
        last_action = time.ticks_ms()     
        data_index = data_index + 1
        # lesen der Sensordaten
        sensor.readSensordata(data_index)
        line_data = "[\"{i}\", {t}, {h}],"
        sensor_data = ""
        # loop über die bisher gespeicherten Daten
        for data in sensor.recorded_data:
            # ein Eintrag aus der Liste enthält:
            # - einen Index,
            # - die Temperatur,
            # - die rel. Luftfeuchtigkeit
            index, temp, hum = data
            # formatieren der Daten
            sensor_data = sensor_data + line_data.format(i=index, t=temp, h=hum)
            # verbinden der Webseite Teil1 & Teil2 inkl. Daten
            html_data = html_part1 + sensor_data[:-1] + html_part2
    
    try:
        # Wenn ein Client verbunden wurde dann die Daten ausliefern.
        cl, addr = s.accept()
        print('Mit dem Client ', addr, ' verbunden.', addr)      
        
        cl.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n')
        cl.send(html_data)
        cl.close()

    except OSError as e:
        cl.close()
        print('Verbindung geschlossen')



Das Lesen und speichern der Messwerte vom DHT11 Sensor erledigen wir in der Klasse „DHT11“.

import dht
import machine

# der DHT11 Sensor ist am GPIO15 angeschlossen
d = dht.DHT11(machine.Pin(15))

# Klasse um die Daten des Sensors
# auszulesen und die gelesenen
# Daten zu halten.
class DHT11:
   
   temperature = 0
   humidity = 0
   
   recorded_data = []
   
   # lesen und speichern der Messdaten
   def readSensordata(self, index):
       d.measure()
       self.temperature = d.temperature()
       self.humidity = d.humidity()
       self.recorded_data.append([index, self.temperature, self.humidity])
       

Die Webseite halten wir in zwei Variablen, damit dieses den Hauptcode nicht unnötig lang macht, lagere ich diese in einer extra PY-Datei aus und importiere diese lediglich.

Im HEADER der Webseite laden wir die JavaScript-Datei von Google, welche die Funktionen enthält, um ein Diagramm zu zeichnen. Des Weiteren enthält dieser Abschnitt noch einen META-TAG, um die Seite alle 30 Sekunden neu zuladen.

# erster Teil der Webseite
html_part1 = '''
    <!DOCTYPE html>
        <html>
            <head>
                 <meta http-equiv="refresh" content="30">
                 <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
                 <script type="text/javascript">
                      google.charts.load("current", {"packages":["corechart"]});
                      google.charts.setOnLoadCallback(drawChart);

                      function drawChart() {
                              var data = google.visualization.arrayToDataTable([
                                  ["Zeit", "Temperatur", "rel. Luftfeuchtigkeit"],
'''

# hier zwischen kommen die aufbereiteten Daten für das Liniendiagram

# zweiter Teil der Webseite
html_part2 = '''
                                    ]);
                            
                            var options = {
                                title: "DHT11 - Sensordaten",
                                curveType: "function",
                                legend: { position: "bottom" }
                            };
        
                            var chart = new google.visualization.LineChart(document.getElementById("sensordata_container"));
                            chart.draw(data, options);
                      }
                </script>
                <title>Raspberry Pi Pico W</title>
            </head>
            <body>
                <h1>Aufzeichnung der Messdaten des DHT11 am Raspberry Pi Pico W</h1>
                <div id="sensordata_container" style="width: 900px; height: 500px"></div>
            </body>
        </html>
'''

html = html_part1 + html_part2

Damit du diesen Code auf deinem Mikrocontroller ausführen kannst, musst du zusätzlich deine Wi-Fi-Daten (ssid & password) eingeben.

Wenn alles korrekt eingeben und auf dem Mikrocontroller gespielt wurde, dann wird dir in der Konsole die IP-Adresse des Gerätes angezeigt, welche du nun im Browser eingeben musst, um zur Webseite zu gelangen.

MicroPython v1.19.1-88-g74e33e714 on 2022-06-30; Raspberry Pi Pico W with RP2040

Type "help()" for more information.
>>> %Run -c $EDITOR_CONTENT
Verbindung wird aufgebaut...

Erfolgreich mit dem WiFi Netzwerk  FRITZBox7590GI_EXT  verbunden!
aktuelle IP-Adresse ist: 192.168.178.70

Schreibe einen Kommentar Antworten abbrechen

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


Unterstütze meinen Blog!


Liebe Leserinnen und Leser,

Unterstützt meinen Blog auf Tipeee und helft dabei, hochwertige Inhalte zu sichern! https://de.tipeee.com/draeger-itblog/.

Jeder Beitrag zählt. Vielen Dank für eure Unterstützung!

Stefan Draeger


Kategorien

Tools

  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator
  • Widerstandsrechner
  • Rechner für Strom & Widerstände
  • ASCII Tabelle

Meta

  • Videothek
  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Kontakt
  • Cookie-Richtlinie (EU)

Links

Blogverzeichnis Bloggerei.de Blogverzeichnis TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com
©2023 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb