Zum Hauptinhalt springen

Soil Sensor

hinweis

Dieser Artikel beschreibt die Rolle des Feuchtigkeitssensors in unserer Software-Architektur. Falls Sie die Komponente nur einrichten und verwenden möchten, lesen Sie den Setup Guide.

Der Feuchtigkeitssensor ist eine zusätzliche Erweiterung unseres Bewässerungssystems. Er läuft getrennt vom Drip Master auf einem eigenen ESP32-C6-Mikrocontroller.

Grundlegende Funktionsweise​

Der Feuchtigkeitssensor misst in einem stetigen Intervall die Bodenfeuchtigkeit mittels eines internen oder externen ADCs. By default wird der interne ADC verwendet. Für höhere Präzision kann ein externer ADC angeschlossen werden. Der gemessene Wert wird anschließend per Zigbee vom ESP-C6 an das Zigbee2MQTT-Addon von Home Assistant gesendet. Dieses veröffentlicht die Sensordaten dann in einem MQTT-Topic.

hinweis

Die Software für den Feuchtigkeitssensor ist bisher noch sehr einfach aufgebaut. Eine mögliche Erweiterung wäre von zeitbasiertem zu eventbasiertem Verhalten zu wechseln.

Softwaremodule​

Button Handler​

Der Button Handler ist für das Neustarten (mit Factory Reset) des ESPs und das Kalibrieren des Sensors auf Knopfdruck zuständig. Er läuft in einer separaten Task. Wird durch Polling festgestellt, dass der Button länger als 5 Sekunden gedrückt wurde, wird das Zurücksetzen eingeleitet. Mit dreimal kurzem Drücken wird hingegen die Kalibrierung gestartet: Diese erwartet zunächst, dass der Sensor in vollständig trockene Erde gesteckt wird. Nach 10 Sekunden muss der Sensor in maximal feuchte Erde gesteckt werden. Damit wird der Bereich von 0-100% Feuchtigkeit festgelegt. Für eine leichtere Kalibrierung werden per Terminal entsprechende Aufforderungen gesendet.

I²C Handler (nur bei externem ADC)​

Der I²C Handler ist für die Kommunikation mit dem externen ADC ads1115 zuständig. Hier sind Kommandos zur Initialisierung, Konfiguration und zum Auslesen definiert.

Sensor Handler​

Hier ist die zentrale Funktion read_soil_sensor(_raw) zum Auslesen des Sensors definiert. Die Variante read_soil_sensor_raw gibt die unkalibrierten Werte zurück, während read_soil_sensor das Ergebnis auf Werte zwischen 0 und 100 mapped und dabei die Referenzwerte aus der Kalibrierung nutzt. Je nach app_config.h wird der interne oder externe ADC angesprochen. Außerdem ist hier der Task definiert, der alle REPORTING_INTERVAL Sekunden den Sensor ausliest.

Zigbee Handler​

Kümmert sich um die Zigbee-Kommunikation. Die Feuchtigkeit wird in einem Zigbee-Attribut gespeichert.

app_config.h​

Hier werden allgemeine Einstellungen gespeichert. Wichtige Einstellungen sind:

  • REPORTING_INTERVAL - Leseintervall in Sekunden
  • ADC_SELECTION - Verwendeter ADC (External_ADC oder Internal_ADC)

Initialisierung​

Die Initialisierung läuft folgendermaßen ab:

  1. NVS initialisieren: Als Erstes wird der NVS initialisiert.

  2. (Optional) Externen ADC initialisieren: Je nach Konfiguration wird anschließend der externe ADC initialisiert.

  3. Button Handler initialisieren: Als Nächstes wird der Button Handler initialisiert, d.h. ein GPIO wird als Input konfiguriert und der Polling-Task erstellt.

  4. Zigbee Handler initialisieren: Danach wird Zigbee initialisiert.

  5. Sensor Handler initialisieren: Schließlich wird der Sensor Handler initialisiert, d.h. der Main Loop, der regelmäßig den Sensor ausliest, wird gestartet.