Skip to content

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

Ardutemp

Arduino-Firmware für Seeed Studio XIAO ESP32-C6 auf dem XIAO Expansion Board, mit SSD1306-OLED (128 × 64) und Grove Temperature&Humidity Sensor (High-Accuracy & Mini) v1.0, TH02.

Anschlüsse und Anzeige

  • Grove-I²C-Port: SDA = D4 (GPIO22), SCL = D5 (GPIO23), 3V3 und GND.
  • OLED: Adresse 0x3C. TH02: 0x40. Zusätzlich antwortet 0x51 auf dem Board.
  • Temperatur und relative Luftfeuchte werden etwa alle zwei Sekunden auf dem Display und über USB (115200 Baud) ausgegeben.
  • Bei Kommunikationsfehlern erscheint Sensor pruefen; alte Messwerte werden nicht weiter angezeigt. Eine Wandlung wird nach spätestens 200 ms abgebrochen.

Der TH02 wird mit Arduino Wire nach dem Seeed-Beispiel angesprochen. Die Lesesequenz mit STOP liefert drei Bytes: Status, Messwert High, Messwert Low. Eine automatische Erkennung anhand des ID-Registers funktionierte an diesem Modul nicht; der Sensortyp ist deshalb passend zum bestätigten Aufdruck festgelegt. Die Feuchteumrechnung entspricht dem einfachen Seeed-Beispiel ohne zusätzliche Linearisierung oder Temperaturkompensation.

Netzwerkzugriff

Das Gerät verbindet sich mit einem WLAN und bietet die Messwerte über HTTP und SNMP an. Alle Netzwerk- und Anzeige-Einstellungen werden per serieller Kommandozeile (USB, 115200 Baud) konfiguriert und in NVS (Preferences) gespeichert. Die Serielle Konsole druckt beim Boot die aktuelle Konfiguration und eine Befehlsübersicht (help).

Befehl Wirkung
set ssid <name> WLAN-SSID setzen
set pass <passwort> WLAN-Passwort setzen
set snmpRo <community> SNMP Read-Community (Standard public)
set snmpRw <community> SNMP Write-Community (Standard public)
set disptimeout <ms> Display-Timeout in ms (0 = dauerhaft an)
set httpport <port> HTTP-Port (Standard 80)
set oidprefix <oid> SNMP-OID-Präfix, z. B. .1.3.6.1.4.1.54021
save Konfiguration dauerhaft speichern
status Konfiguration und WLAN-Status anzeigen
wifiscan sichtbare WLANs auflisten (hilfreich für exakte SSID)
scan I2C-Bus-Scan
reboot Gerät neu starten
q laufende Messausgabe pausieren und CLI aktivieren
watch laufende Messausgabe wieder starten

Hinweis: Die Werte werden erst nach save + reboot wirksam (ausgenommen disptimeout). WLAN-SSIDs sind groß-/kleinschreibungsabhängig — bei Verbindungsproblemen wifiscan verwenden und die SSID exakt eintragen. Nach dem Boot läuft die Messausgabe automatisch. In einem Terminal wie screen /dev/ttyACM0 115200 pausiert q die Ausgabe und öffnet eine CLI mit Eingabe-Echo; watch setzt die laufende Ausgabe fort.

Das Gerät überwacht die WLAN-Verbindung dauerhaft (Auto-Reconnect + eigene Reconnect-Logik mit 20-s-Timeout und 5-s-Wiederholung). Verliert es das WLAN, verbindet es sich automatisch erneut und startet HTTP/SNMP danach wieder — ein Power-Cycle ist nicht nötig.

HTTP

Nach erfolgreicher WLAN-Verbindung:

  • http://<ip>/ — HTML-Seite mit <meta http-equiv="refresh"> (aktualisiert automatisch alle 2 Sekunden), darin Temperatur, Feuchte und Status.
  • http://<ip>/json — JSON:
    {"temperature_c":24.91,"humidity_rh":69.56,"valid":true}

SNMP

SNMP v2c mit Community public/public auf Port udp/161. Die OID-Basis ist .1.3.6.1.4.1.54021 (Standard, über set oidprefix änderbar). Ausschließlich lesend (get); die Werte sind Ganzzahlen, skaliert auf 1/100:

OID Inhalt Beispiel
.1.3.6.1.4.1.54021.1.1.0 Temperatur (1/100 °C) 2525 = 25,25 °C
.1.3.6.1.4.1.54021.1.2.0 relative Feuchte (1/100 %RH) 6888 = 68,88 %RH
.1.3.6.1.4.1.54021.1.3.0 1 = gültige Messung, 0 = Sensorfehler 1

Bei Sensorfehlern liefern Temperatur- und Feuchte-OID noSuchInstance, nicht 0. Dadurch schreibt Zabbix keinen falschen Messwert von 0 °C bzw. 0 %RH. Die Status-OID bleibt erreichbar und meldet dann 0.

Abfrage (net-snmp):

snmpget -v2c -c public 192.168.1.126 .1.3.6.1.4.1.54021.1.1.0 .1.3.6.1.4.1.54021.1.2.0

Einschränkung: Die verwendete SNMP_Agent-Bibliothek (2.1.0) unterstützt Einzel-GetRequest/GetNext zuverlässig; snmpwalk und Multi-Varbind- GET-Requests werden von ihr nicht korrekt beantwortet (GetNext-Implementierung unvollständig). Für Monitoring-Werkzeuge (z. B. Zabbix) die feste OIDs einzeln pollen ist das kein Problem.

Zabbix-Vorlage

Unter zabbixtemplates/zabbix_6.4_ardutemp.xml liegt eine Zabbix-6.4-Vorlage (Ardutemp - SNMP) mit drei Items:

Item OID Einheit Anmerkung
Temperatur .1.3.6.1.4.1.54021.1.1.0 °C Custom multiplier 0.01 (aus 1/100 °C)
Relative Luftfeuchte .1.3.6.1.4.1.54021.1.2.0 % Custom multiplier 0.01 (aus 1/100 %RH)
Sensor gültig .1.3.6.1.4.1.54021.1.3.0 – 1 = gültig, 0 = Sensorfehler

Einrichten in Zabbix:

  1. Datenraster → Vorlagen → Importieren, Datei auswählen.
  2. Host anlegen und die Vorlage Ardutemp - SNMP verknüpfen.
  3. Beim Host ein SNMP-Interface mit der IP des Geräts, Port 161, und Community public anlegen (in Zabbix 6.4 wird die Community am SNMP-Interface konfiguriert, nicht im Item).

Die Items pollen einzeln per GetRequest — das umgeht die oben erwähnte GetNext-Einschränkung der Library und funktioniert zuverlässig.

Bauen und aufspielen

Arduino CLI ist unter .tools/arduino-cli installiert, Boardpaket und Bibliotheken liegen unter .arduino/. Die Konfiguration enthält absolute Pfade; bei Umzug arduino-cli.yaml anpassen.

.tools/arduino-cli core update-index --config-file arduino-cli.yaml
.tools/arduino-cli core install esp32:esp32@3.3.11 --config-file arduino-cli.yaml
.tools/arduino-cli lib install 'U8g2@2.36.19' --config-file arduino-cli.yaml
.tools/arduino-cli lib install 'SNMP_Agent@2.1.0' --config-file arduino-cli.yaml
.tools/arduino-cli compile --config-file arduino-cli.yaml --fqbn esp32:esp32:XIAO_ESP32C6 --output-dir build ardutemp
.tools/arduino-cli upload --config-file arduino-cli.yaml --fqbn esp32:esp32:XIAO_ESP32C6 --port /dev/ttyACM0 --input-dir build ardutemp
.tools/arduino-cli monitor --config-file arduino-cli.yaml --port /dev/ttyACM0 --config baudrate=115200

Die lokale SNMP_Agent-Library ist um einen nullable Integer-Handler erweitert, damit Temperatur und Feuchte bei Sensorfehlern noSuchInstance liefern koennen. Nach einer frischen Library-Installation den Patch patches/SNMP_Agent-nullable-integer.patch im Library-Verzeichnis anwenden.

Alternativ ardutemp/ardutemp.ino in der Arduino IDE öffnen, Espressif-Boardpaket und U8g2 installieren, Board XIAO ESP32C6 auswählen und USB CDC On Boot aktivieren.

Nach dem ersten Flashen ist keine SSID konfiguriert, WLAN (und damit HTTP/SNMP) bleibt aus. Im Seriellen Monitor dann z. B.:

set ssid MeinWLAN
set pass meinPasswort
save
reboot

Danach zeigt status die vergebene IP.

Verifiziert am 2026-09-08

Build und Upload erfolgreich, Flash-Hashes verifiziert. Display-Ausgabe vom Benutzer bestätigt. Nach kurzem Trennen und Wiederverbinden des Grove-Kabels lieferte der Sensor fortlaufend Messwerte, z. B. 25,28 °C und 68,12 % RH. Zuvor blieb die Wandlung hängen; bei erneutem Auftreten den Sensor kurz stromlos machen. Keine Kalibrierung gegen ein Referenzmessgerät durchgeführt.

Erweiterung HTTP/SNMP am 2026-09-08

HTTP-Webinterface (Refresh-HTML + JSON) und SNMPv2c-Agent ergänzt, Konfiguration per serieller Kommandozeile. Getestet:

  • WLAN-Verbindung erfolgreich (IP per DHCP), Serielle CLI inkl. wifiscan.
  • http://<ip>/ und /json liefern korrekt Temperatur/Feuchte.
  • snmpget -v2c -c public <ip> <oid> für Temperatur und Feuchte antwortet mit plausiblen Werten (z. B. Temperatur 2525 = 25,25 °C).

Bekannte Einschränkung: snmpwalk bzw. Multi-Varbind-get werden von der SNMP_Agent-Bibliothek 2.1.0 nicht korrekt beantwortet (siehe Abschnitt SNMP).

Quellen

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages