ESP32 HiGrow V1.0 (Pflanzenspieß)

Last Updated on 21. April 2021 by sfambach

Das HiGrow (oder auch HighGrow) Board ist unter seinem vollem Name „ESP32 DHT11 WIFI Bluetooth Soil Temperature Humidity Sensor18650“ beim schnellen Ali erhältlich. Es soll zur Pflanzenüberwachung dienen und basiert auf einem ESP32 Wroom. Das Board kann Luftfeuchtigkeit, Temperatur, Licht sowie Erdfeuchte messen. Einige Pins sind nach aussen geführt, so dass weitere Sensoren hinzugefügt werden können. Der Lichtsensor scheint bei meiner Version nicht vorhanden zu sein. Es gibt noch andere ähnliche Boards, zum Beispiel von TTGO. Im weiteren Verlauf werde ich das Board auch als Stock oder Spiess bezeichnen, denn so sieht es aus ;).

Zum thema HighGrow ist auch dieser kurze Wikipediaeintrag ganz nett, den ich euch nicht vorenthalten möchte:

https://de.wikipedia.org/wiki/HighGrow

Fakten

BeschreibungWert
ProzessorESP32 Wroom
TasterReset (EN) / Boot
Ein-SchalterSchiebeschalter
Batteriefach18650 (Akku)
USBMicro
LED PinPin 16
DHT11 SensorPin 22
Boden-FeuchtesensorPin 32
Power Pin (Nicht verbunden)Pin 34
Lipo LadereglerTP5400 (bei anderen auch TP5410)
Licht Sensor (Nicht vorhanden)Pin 33
Größe L/B/B [cm] 19,5/ 3 / 2,5
Quelle: siehe unten
Hi Grow - Die wichtigsten Teile beschriftet
Hi Grow – Die wichtigsten Teile beschriftet

Was ist installiert

Am USB angeschlossen, blinkt die blaue LED. Der erste Blick im Terminal zeigt nur die Standardausgabe des ESP Wroom. Der Stock scheint keine programmierte Funktion zu haben und ist auch nicht mit MircoPython geflashed.

Higrow Sensor Blick auf die aufgespielte Software
Higrow Sensor Blick auf die aufgespielte Software

Ein Bootloader ist installiert. Beim Einschalten mit gedrückter Boot Taste blinkt die blaue LED nicht mehr.

Anwendungsbereiche

  • Zur Beobachtung von Pflanzen
  • Raumklima Erfassung
  • Jeder Pflanze einen Accesspoint 😉
  • Als Testplattform für Kurse (gibt ein paar negativ Beispiele im Netz)

Ansichten

Programmierung

Ich verwende ein fertiges MQTT Programm. Dieses ermöglicht mir ein paar schnelle Tests und spart Zeit.

Hier der Link zum Original

Bibliotheken

Für das Programm werden ein paar Biliotheken benötigt, diese sind im Folgenden aufgelistet.

MQTT Client

MQTT wird hier nicht neu erfunden sondern es wird die folgende Biliothek verwendet.

https://github.com/knolleary/pubsubclient

PubSubClient Bibliothek
PubSubClient Bibliothek

DHT11 Sensor Bibliothek

Der DHT11 und DHT22 Luftfeuchte und Temperatursensor ist weit verbreitet auch hier gibt es unterschiedliche Implementierungen, das gewählte Programm verwendet die folgende:

https://github.com/adafruit/DHT-sensor-library

DHT Bibliothek
DHT Bibliothek

Adafruit hat irgnd wann mal eine Basis für all ihre Sensorimplementierung geschaffen, diese nennt sich Unified SensorLib. Sie wird auch für den DHT11 Sensor benötigt.

https://github.com/adafruit/Adafruit_Sensor

Adafruit Unified Sensor Bibliothek
Adafruit Unified Sensor Bibliothek

Testprogramm

Das Testprogramm kann von GitHub heruntergeladen werden. Ich habe noch ein paar andere Änderungen am Code vorgenommen deswegen hier mein Fork. In der Datei credentials.h müssen noch SSID, WIFI Passwort und MQTT Broker und die Titel eingetragen werden.

Das Original findet ihr hier:

Github Link zu HiGrowEsp32Mqtt

Direkt als Zip über DownGit

Auf die Einrichtung des Brokers gehe ich an dieser Stelle nicht näher ein, sollte noch keine Broker vorhanden sein, gibt es unterschiedliche Möglichkeiten an einen zu kommen:

  • Es gibt sog. Webbroker, hier kann man sich im Internet anmelden und oft auch kostenlos den Broker verwenden. Beispiele hierfür sind HiveMQ, diyporjects und hier noch ne 10er Liste.
  • Eigener Broker - exemplarisch sei hier auf dem Mosquitto in Verbindung mit dem PI verwiesen (hier das Setup)
  • Broker der Hausautomation. Ich verwende IP-Symcon für die Hausautomation, viele andere Systeme bieten mittlerweile auch MQTT Anbindungen.

Nun noch compilieren und auf den Spieß schreiben und dann hoffen, dass was beim Broker angkommt.

HiGrow - Arduino Gui Programiereinstellungen
HiGrow - Arduino Gui Programiereinstellungen

Hier liegt mal wieder der Hund begraben. Ohne Taster gehts nicht. Als erstes den Schreibvorgang einleiten. Dann den Boot Taster gedrückt halten und kurz auf den Reset (EN) Knopf drücken. Jetzt startet der ESP im Bootmode. Nach ein paar Sekunden kann der Boot Knopf wieder gelöst werden. Der Schreibvorgang sollte jetzt starten.

Auch auf meinen Broker werden die Werte vom Spiess jetzt angezeigt und können weiter verarbeitet werden.

IP-Symcon MQTT Broker - Werte vom ESP Stock
IP-Symcon MQTT Broker - Werte vom ESP Stock

Über die Zeit schwankt es schön, mal schauen was man daraus machen kann.

HiGrow Auswertung über eine Stunde

Langzeittest (aktualisiert)

Drei Planzen (Benjamini, Bogen Hanf (Kein THC), Areca Palme). Die Sensoren messen und legen sich dann 30Min/1h/2h schlafen. Die Sensoren senden ihre Werte an den Homeserver und dieser speichert sie. Alle Akkus haben um die 2400Ah.

  • 14.10.2020 11:30 Test mit Benjamini gestartet, sendet alle 30 Minuten.
  • 15.10.2020 23.03 Erhalte noch Nachrichten
  • 16.10.2020 13:29 Benjamini sendet noch.
  • 16.10.2020 18:23 Der Benjamine läuft weiter, der Bogen Hanf sendet jetzt jede Stunde und Areca Palme alle zwei Stunden.
  • 17.10.2020 13:04 Alle Sensoren laufen noch Tabelle aktualisiert
  • 19.10.2020 09:25 Heute morgen um 4 Uhr ist der letzte Messwert vom Benjamini gekommen. Somit hat dieser weniger als 5 Tage durchgehalten.
  • 20.10.2020 ~21:30 Der Sensor des Bogen Hanf ist ausgefallen
  • 21.10.2020 ~04:00 Der Sensor der Areca Palme ist ausgefallen.

Auswertung

Die Palme hält etwas länger durch aber nicht signifikant siehe Tabelle. Somit haben wir unspektakuläre 5 Tage. Alleine am ESP32 scheint es zumnindest nicht zu liegen:

  • Der ESP verbraucht im Normal Betrieb mit Wifi maximal 180mA.
  • Im DeepSleep Modus verbraucht er nur <10 uA.

Geht man von einem Zyklus von 2 Stunden DeepSleep und 10 Sekunden Messen/Senden aus. Gestaltet sich die Berechnung wie folgt:

Verbrauch pro Zyklus unter Last
= 10s * 180mAh/60(Min)*60(Sec)
= 10s * 180mAh/3600
= 10s * 0,022mAh
= 0.22 mAh

Verbrauch pro Zyklus in Standby
= 2h * 0,10mA
= 0,02mAh

Verbrauch gesamt pro Zyklus
= 0,22mAh + 0,02mAh
= 0,24mAh

Bei einem Akku von 2400mAh

Zyklen = 2400mAh / 0,24mAh = 10000z
Stunden = 10000z / 2,002h/z = 4995h
Tage = 4995h / 24h/Tag = 208Tage

Das sind 203 Tage mehr als der beste Test somit muss der Hauptverbrauch an andere Stelle liegen.

Für den DHT 11 habe ich ebenfalls Daten gefunden, deshalb möchte ich überprüfen ob diese verantwortlich sein könnte.

  • Standby max 150uA
  • Last 2.5mA

Verbrauch pro Zyklus unter Last
= 10s * 2,5mAh/60(Min)*60(Sec)
= 10s * 2,5mAh/3600
= 10s * 0,000694mAh
= 0,0069 mAh

Verbrauch pro Zyklus in Standby
= 2h * 0,15mAh
= 0,3mAh

Verbrauch gesamt pro Zyklus ESP32 + DHT11
= 0,0069mAh + 0,3mAh + 0,24mAh
= 0,55mAh

Bei einem Akku von 2400mAh

Zyklen = 2400mAh / 0,55mAh = 4.363z
Stunden = 4.363z/ 2,002h/z = 2160h
Tage = 4995h / 24h/Tag = 90Tage

Mit DHT11 Sensor sind es nur noch etwas weniger als die Hälfte der Tage. Rechnet man die 90 Tage verbleibend minus die Wirklich gemessene Zeit verbleichen 85 Tage die der Boden-Feuchtesensor und die restliche Periphrie verbrauchen.

#TestPflanzeMeldungGestartet Leer#Messwerte#Tage
1Benjamini30 Min.14.10.2020 11:3019.10.2020 03:40224<5
2Bogen Hanf1 St.16.10.2020 18:1020.10.2020 21:30994
3Areca Palme2 St. 16.10.2020 18:2321.10.2020 04:0052<5
Übersicht Testzeitraum

Die Werte der Feuchtesensoren schein mir auch nicht ganz schlüssig wenn ich sie mit denen im Internet vergleiche. Evtl. mache ich hierzu nochmal eine Versuchsreihe mal sehen.

Probleme

Hoher Stromverbrauch selbst in Sleep Phase.

Im Netz klagen einige Benutzer über den hohen Stromverbrauch wärend des Tiefschlafs (deep sleep). Meine Tests haben das bestätigt, allerdings liegt es meiner Meinung nach an den Sensoren.

Ich habe noch einen Fehler im Code gefunden, wenn man die Sleepzeit zu hoch setzt, geschieht ein Überlauf der int Variablen und er schläft nicht ein. Bitte int durch uint64_t tauschen dann klappts:

// int DEEPSLEEP_SECONDS = 1800; // 30 min // alt
uint64_t DEEPSLEEP_SECONDS = 1800; // 30 min // neu

Sonstiges

3D Modelle fürs Gehäuse

Um den Stock zu verpacken, gibt es einige 3D Modelle bei Thingiverse:

https://www.thingiverse.com/thing:3333221

https://www.thingiverse.com/thing:2791829

https://www.thingiverse.com/thing:3491667

https://www.thingiverse.com/thing:3209270

Die Ersten beiden Modelle habe ich mal gedruckt. Der Ausdruck erfolgte mit den folgenden Druckparametern:

BeschreibungWert
DruckerEnder 5
MaterialPLA
Drucktemperatur210
Bett-Temperatur60
Düse 0,4
Layerhöhe0,2
Hüllendicke0,8
Printspeed95
SupportEverywhere
UntergrundRaft
3D Druckparameter

Der Ausdruck verlief ohne Probleme, das Endprodukt musste ich etwas mit dem Skalpell nachbearbeiten aber nichts was aus dem Rahmen fällt. Den Tropfen Deckel bräuchte ich persönlich nicht und werde ihn weg lassen. Zum Montieren habe ich 4st 2x15 Spax und 1st *2x2,5 Blechschauben verwendet. Das Board selbst passt gut in das Gehäuse. Hier noch ein paar Bilder :

Der zweite Ausdruck war auch ok, hier fehlt mir allerdings das Schraubenloch zur Befestigung des Deckels. Bilder Habe ich mir jetzt mal gespart.

Fazit

Nette Idee mit dem Pflanzensensor. Der ESP32 ist stand der Technik das gesamte Board hat ein paar Sensoren, was auch ganz nett für Einsteiger sein kann. Was mich am Stock ärgert ist die Knöpfchendrückerei beim Programmieren. Da waren wir schon mal weiter. Wenn man den Berichten im Internet glaubt (und das tue ich an dieser Stelle) dann kann der Stock die Nähe von Feuchtigkeit nicht ertragen und die Löpunkte blühen relativ schnell auf. Somit ist an einen Langzeiteinsatz ohne zusätliche Behandlung, zum Beispiel durch Epoxid Harz nicht zu denken. Ein Ausseneinsatz fällt damit auch flach.

Der Spannungsteiler um die Spannung des Akkus zu messen fehlt. Den Lichtsensor solls erst ab Version 2 geben. Der Stock ist eine nette Idee aber nicht besonders gut ausgeführt. Ich habe mir noch ein paar einzelne Bodenfeuchte Sensoren und eine Variante des HiGrow von LiliGo bestellt, diese werde ich bei Gelegenheit noch testen.

Verwandte Beiträge

Quellen

https://www.diymore.cc/

Beitrag bei IOT Newbie

CK Blog Beitrag zum Sensor

CK Blog Beitrag zur Datenerfassung mit dem Sensor

Github Projekt HiGrowESP32MQTT

Neuauflage des MQTT Projektes

Github weiteres Projekt von lucafabbri

Beitrag auf Flashgamer

Beitrag auf Instructables

Netter Beitrag in Wikipedia zum Spiel HighGrow 😉

Beitrag zu Deep Sleep Time ESP8266

6 Gedanken zu „ESP32 HiGrow V1.0 (Pflanzenspieß)

  1. Hallo Stefan,

    Bei mir lauft alles über ein RaspPi und die DietPi Betriebsystem: https://dietpi.com, es hat sehr viele eingebaute software zum installieren inkl. Docker: https://dietpi.com/docs/software.

    Wenn du willst schicke ich dir gern meinem node-red, influxDB, Grafana „Workflow“.

    Sorry, ja ich meine länger wach zu halten so etwa 60 Sekunde, da ich mochte zweimal im Tag wecken (uint64_t DEEPSLEEP_SECONDS = 3600*12;) und die Bewässerung genug zeit es zu bewässern und messen. Ich finde das stelle zu den „Wach“ einstellen nicht.

    Ich habe das lightlevel map umgekehrt weil in Grafana zeigt das Graph ein tiefer wert by Sonnenschein.

    Gruss
    Ian

    1. Hi Ian,

      ist immer vor Zeile 75 in der Loop Funktion. Vor dem deep sleep start hier müsstest du einsteigen. Das deep sleep start ist leider hinter der Consolenausgabe und deshalb leicht zu übersehen.

      Gruß
      Stefan

      1. Hallo Stefan,

        Sorry noch eine frage. Wie kann ich es einstellen das es mehrmals in den „Wach“ phase die sensor Daten abliest?

        Weil in meine Bewässerung system mochte ich wie folgt bewässern in eine 1 minute Bewässerung zeit:

        Wacht auf
        Sensor lesen: trocken > Wasser > warten
        Sensor lesen: trocken > Wasser > warten
        Sensor lesen: trocken > Wasser > warten
        Sensor lesen: nass > kein Wasser > warten
        Sensor lesen: nass > kein Wasser > warten
        usw.
        Tiefschlaf

        Gruss
        Ian

  2. Hallo Ian,

    schön dass es bei dir klapp, MIt InfluxDB und Grafana biste schon viel weiter als ich, Habe da gerade mit Docker erst meine ersten Gehversuche gemacht.

    Das Modul kenne ich nicht ist aber sehr interessant. Im Grunde braucht es nur zwei Widerstände als Spannungsteiler angeschlossen an einen analogen Port. Mich ärgert auch einwenig dass die Spannung bzw. der Batteriestand nicht gleich mit gemessen werden. Auf ein paar Schaltplänen ist eine Messverbindung für den LadeIC da , evtl. bedarf es nur einer Brücke, da bin ich aber elektonisch nicht so fit.

    Bin mir nicht sicher was du mit den 60 Sekunden machen meinst, natürlich kann man das Modul länger wach halten, um dann Beispielsweise einen Pin zu schalten, Ist es das was du meinst?

    Am einfachsten wäre das vor Zeile 75 vor der Ausgabe und dem Schalfkommando (übrigens ganz mieser Progammierstiel 😉 ) aufgehoben.

    Gruß
    Stefan

  3. Hallo Stefan,
    Vielen dank für diesen super project. Ich habe ein HiGrow und könnte nichts mit dem anfangen, jetzt lauft es super mit node-red, influxDB und Grafana.

    Ein frage, wäre es möglich ein GY219 Current Power Supply Sensor über I2C mit MQTT zu integrieren. Es interessiert mich die Spannung der Batterie zu beobachten.

    Noch eine frage wäre möglich die zeit nach tief-schlaf zu bestimmen? Ich mochte es integrieren mit meinem Bewässerung system und braucht etwa 60 Sekunde zeit eigeschaltet.

    Viele grüsse
    Ian

Schreibe einen Kommentar

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