Skip to content

Montag, 2025-07-14_IoT-Netzwerktechnik-WIT

Sensoren & Mikrocontroller: SR04, DHT22, ESP32-WROOM-32

Wichtiger Hinweis:
Neue Bauteile nur bei getrennter Stromzufuhr (USB) ins Steckbrett einsetzen.


Überblick: Programmstruktur

  • setup()
  • Initialisierung der Sensoren
  • Pin-Definition
  • Start der seriellen Kommunikation

  • loop()

  • Temperatur und Luftfeuchtigkeit auslesen
  • Abstand messen
  • Ergebnisse seriell ausgeben
  • 3 Sekunden Pause

Verwendete Sensoren

DHT22 (Temperatur- & Feuchtesensor)

  • Digitaler Sensor
  • Liefert float-Werte
  • readHumidity()
  • readTemperature()
  • Maximal ca. 1–2 Messungen pro Sekunde

HC-SR04 (Ultraschallsensor)

  • Funktioniert nach dem Echoprinzip
  • Sendet 10 µs Triggerimpuls
  • Misst Laufzeit des reflektierten Signals
  • Abstandberechnung:

Abstand (cm) = Dauer / 58.2


Warum ESP32-WROOM-32?

  • 3.3 V Logikpegel (empfindlicher als 5 V-Systeme)
  • Mehr Rechenleistung und Speicher
  • Integriertes WLAN & Bluetooth
  • Viele digitale I/O-Pins
  • Ideal für IoT-Projekte

Arduino-Code (kommentiert)

#include "DHT.h"

#define DHTPIN 22
#define Trigger_AusgangsPin 23
#define Echo_EingangsPin 21

#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

int maximumRange = 600;
int minimumRange = 2;

int Abstand;
long Dauer;

void setup() {
  Serial.begin(115200);
  dht.begin();
  pinMode(Trigger_AusgangsPin, OUTPUT);
  pinMode(Echo_EingangsPin, INPUT);
}

void loop() {

  Serial.println("---------Temperatur und Luftfeuchtigkeit (DHT22) ----------");

  float h = dht.readHumidity();
  float t1 = dht.readTemperature();

  if (isnan(h) || isnan(t1)) {
    Serial.println("Fehler beim Lesen des Sensors");
    return;
  }

  Serial.print("Luftfeuchtigkeit: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperatur: ");
  Serial.print(t1);
  Serial.print(char(186));
  Serial.println("C");

  Serial.println("-----------------------------------------------------------");

  digitalWrite(Trigger_AusgangsPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(Trigger_AusgangsPin, LOW);

  Dauer = pulseIn(Echo_EingangsPin, HIGH);
  Abstand = Dauer / 58.2;

  if (Abstand >= maximumRange || Abstand <= minimumRange) {
    Serial.println("Abstand außerhalb des Messbereichs");
  } else {
    Serial.print("Der Abstand beträgt: ");
    Serial.print(Abstand);
    Serial.println(" cm");

    Serial.print("Die Dauer beträgt: ");
    Serial.print(Dauer);
    Serial.println(" µs");
  }

  Serial.println("-----------------------------------------------------------");

  delay(3000);
}

Erklärung: Datentypen & Ressourcen

  • int → 2 Byte (bis 32.767)
  • long → 4 Byte
  • Für Zentimeterwerte reicht int völlig aus
  • pulseIn() liefert Zeit in Mikrosekunden
  • Serial.begin() gehört ausschließlich in setup()

Technische Hinweise

  • ESP32-Pinbelegung prüfen
  • HC-SR04 startet mit 10 µs Triggerimpuls
  • delay(3000) blockiert den Controller
  • char(186) dient der Grad-Symbol-Ausgabe
  • Fehlerhafte Sensorwerte werden mit isnan() abgefangen

Verständnisfragen (AP1-relevant)

  • Was macht pulseIn() genau?
  • Warum wird durch 58.2 geteilt?
  • Unterschied int vs. long?
  • Was passiert bei isnan()?
  • Warum darf Serial.begin() nicht im loop() stehen?
  • Welche Vorteile bietet der ESP32 gegenüber dem Arduino Uno?

Metadaten anzeigen

Teil der FIAE-Umschulung (2025-2027) am BFW Muehlenbeck.
Diese Mitschrift entstand im Unterricht am 14.07.2025 mit WIT.
Sie basiert auf gemeinsam erarbeiteten Inhalten und ergaenzenden Uebungsbeispielen vom 14.07.2025.

Die Version wurde inhaltlich ueberarbeitet, strukturell optimiert und technisch ergaenzt,
um Lernerfolg, Pruefungsrelevanz und Nachvollziehbarkeit zu foerdern.

Quelle: Eigene Mitschrift & Unterrichtsinhalte
Autor: Sean Conroy
Lizenz: CC BY-NC-SA 4.0