Arduino und Arduino-Sketches

Firmware-Architektur für vernetzte Temperaturfühler mit Arduino-Boards und Feuchtesensoren.

Draufsicht auf eine blaue Arduino-Uno-Mikrocontrollerplatine vor weißem Hintergrund
Arduino-kompatible Boards führen den Sketch aus, der die Fühler abfragt und JSON veröffentlicht. Foto: Wikimedia Commons contributor. CC0

Die Sondenhardware läuft auf Arduino-kompatiblen Mikrocontrollern. Die Firmware, meist Sketch genannt, liest die Sensoren in festen Abständen aus, formatiert die Ergebnisse als JSON und stellt sie im Netzwerk bereit, damit die Website und andere Clients Live-Daten ohne serielles Kabel abrufen können.

Aufgaben des Sketches

  1. Sensorbusse und das lokale 16×2-LCD für die Anzeige vor Ort initialisieren.
  2. Jede DHT22-Sonde auslesen, mit Wiederholversuchen bei vorübergehenden Busfehlern.
  3. Einen Mittelwert über alle funktionierenden Sonden als schnellen Übersichtswert im JSON berechnen.
  4. HTTP-Anfragen über das Ethernet-Shield mit einem kompakten JSON-Dokument beantworten.
  5. Optional Fehler seriell protokollieren, um vor Ort zu debuggen.

Typischer JSON-Aufbau

Clients erwarten auf oberster Ebene ein temp-Objekt mit numerischen Schlüsseln für jede Sonde sowie avg. Die Luftfeuchtigkeit steht bei jeder Sonde neben der Temperatur. Stabile Schlüssel sind wichtiger als hübsche Formatierung: Die Zuordnungen im Dashboard verweisen direkt auf diese Schlüssel.

{
  "temp": {
    "0": { "f": 38.2, "c": 3.4, "h": 41.0 },
    "1": { "f": 36.8, "c": 2.7, "h": 43.5 },
    "avg": { "f": 37.5, "c": 3.1, "h": 42.2 }
  }
}

Für Push-Ingest lässt sich dasselbe Sondenobjekt an /api/ingest/<key> senden. Die optionalen Felder battery (oder battery_pct) und rssi auf oberster Ebene aktualisieren den Gerätezustand auf der Devices-Seite, ohne dass zusätzliche Sensorschlüssel nötig sind.

{
  "temp": {
    "0": { "f": 38.2, "c": 3.4, "h": 41.0 }
  },
  "battery": 87,
  "rssi": -62
}

Push-Ingest vom Ethernet-Shield

Der W5100-Stack auf einem Uno beherrscht kein TLS und kann daher nicht direkt an https://probeharbor.dev POSTen. Nutze ethernet_dht22_ingest, um das klassische temp-JSON per HTTP zu senden (DHT22 an A4/A5, optional JSON auf Port 80 zum Abrufen im LAN). Lass push_https_forward.py auf einem Pi, NAS oder Laptop laufen, damit diese POSTs ProbeHarbor über HTTPS erreichen. ESP32-Beispiele mit WLAN und TLS findest du in sketches/.

Verdrahtungsanleitungen

Der Aufbau besteht aus einem Arduino Uno, einem W5100-Ethernet-Shield, einem Steckbrett, einem Kontrastpotentiometer, einem 16×2-LCD und zwei DHT22-Sensoren. Drei begleitende Seiten beschreiben Schaltpläne und Pinbelegung im Detail:

Wahl des Netzwerk-Stacks

Diese Revision nutzt ein Ethernet-Shield über SPI. Der Sketch übernimmt DHCP, Wiederverbindungsschleifen und die JSON-Ausgabe, während das LCD weiter die Live-Werte der Sonden zeigt. Ist TLS für den MCU zu schwer, kann ein Python-Relay HTTPS terminieren: siehe Python-Skripte und Feeds. Für Push-Ingest vom selben Shield siehe ethernet_dht22_ingest.

Arduino Uno, mit drei Steckbrücken an einen DHT-Temperatur- und Feuchtesensor angeschlossen
Ein minimaler Aufbau aus Mikrocontroller und Sensor, bevor Ethernet, LCD und zwei Fühler dazukommen. Foto: Wikimedia Commons contributor. CC BY-SA 4.0
ProbeHarbor-Sondenplatine, zweite Revision, mit Ethernet-Shield, LCD und DHT22-Sensoren
ProbeHarbor, zweite Revision: Ethernet, LCD-Anzeige und zwei DHT22-Eingänge in einem Aufbau.

Entwicklungsablauf

Sketches werden in der Arduino IDE oder in PlatformIO bearbeitet, per USB geflasht und dann anhand der seriellen Ausgabe geprüft, bevor die Platine im überwachten Raum montiert wird. Prüfe den JSON-Aufbau mit curl, bevor du die Feed-URL im Dashboard der Website einträgst.

Anpassbare Beispiele für DS18B20, MAX31855, MAX6675 und Uno + Ethernet liegen in diesem Repo unter sketches/. Der Raspberry Pi Pico W / Pico 2 W nutzt dasselbe Ingest-JSON mit CircuitPython oder MicroPython. Vollständige Ethernet-+-DHT-+-LCD-Firmware: arduino-network-json-temperature-sever.

Tipps für einen zuverlässigen Betrieb

  • Watchdog-Resets beheben seltene Netzwerkhänger, ohne dass du auf die Leiter musst.
  • Trenne bei langen Kabelwegen das Störrauschen der Sensorversorgung von der MCU-Versorgung.
  • Versioniere dein JSON-Schema in der Dokumentation, wenn du Felder hinzufügst.
  • Dokumentiere, welche GPIO-Pins zu welchen Sondenbeschriftungen gehören; siehe die Anleitung zur Pinbelegung.

Häufige Fragen

Wo finde ich Beispiel-Sketches für Arduino?
Im GitHub-Repo von probeharbor unter sketches/ sowie in den Arduino-Anleitungen unter About. Die ESP32-Beispiele senden direkt per HTTPS-POST. Uno + W5100-Ethernet nutzt ethernet_dht22_ingest (klassisches temp-JSON an A4/A5) plus ein HTTP→HTTPS-Relay im LAN: Das Shield kann keine TLS-Verbindung zu probeharbor.dev aufbauen.