Bodenfeuchtesensor webbasiert mit dem ESP8266

Bild Ein Kleiner Kaktus mag den Bodenfeuchtesensor. Das das mit IoT zu tun hat, interessiert ihn weniger.

Der Beitrag ist ein Teil eines Workshops für Lehrerinnen und Lehrer. Inhalt ist – neben IoT im Allgemeinen – der Aufbau eines webbasierten Bodenfeuchtesensors mit dem ESP8266. Die Technik wird im Forschungsprojekt Biene40 eingesetzt, um einen Standplatz für Bienenvölker zu beurteilen.

22.02.2023

Motivation und Ziel

Auslöser und Motivation

Internet of Things (IoT), Smart Home, Smart Cities und Predictive Maintenance sind Begriffe, die die Wirtschaftsseiten der ernstzunehmenden Zeitungen füllen. Bis auf „Smart Home“ finden sich wenig lebensnahe Ansätze, die auch in Schule vermittelt werden können. Der Fächerverbindende Unterricht kann hier die Anwendungsdomäne liefern, so dass Schülerinnen und Schüler IoT-Szenarien erleben können und sie damit Kompetenzen für eine digitaler werdende Welt erwerben. Das funktioniert nur, wenn Lehrerinnen und Lehrer es vorleben und auch erlebbar machen.

Ziel

Ziel des Beitrages ist, Lehrerinnen und Lehrer einfach und schnell in die Lage zu versetzen, mit ihren Schülern im Unterricht digitale Projekte zu „bauen“.

Die Bodenfeuchte bietet sich an, da sie einen Bezug zwischen Biologie und Physik nahelegt und Sie es im Schulgarten gleich praktisch ausprobieren können. Im Mathematikunterricht motivieren Sie so lebensweltlich Korrelationen und Statistik. Der Informatikunterricht – wenn er sich von stumpfen Lehrplänen löst – profitiert per se.

Warum ESP8266?

Es gibt bereits eine Reihe von Lehrerworkshops, die den Raspberry Pi adressieren. Die Workshops sind gut durchführbar, der Raspberry Pi hat zur Zeit jedoch zwei Nachteile:

  1. Für „Nicht-Linuxer“ sind die Eintrittshürden größer – es sind eine Menge Dinge zur Plattform zu lernen und vorzubereiten, bevor es losgeht.
  2. Zeitweise war ein Raspberry nicht beschaffbar, mittlerweile sind die Geräte teuer (250% Steigerung in 1 1/2 Jahren).

Der gängige ESP32 wäre das Gerät der Wahl, für einen (sehr kurzen) Workshop in Kombination mit einem späteren Battriebetrieb hat er zwei Nachteile:

  1. Zum Programmieren ist ein Knopfdruck zu einem bestimmten Zeitpunkt erforderlich.
  2. Der ESP32 braucht für eine simple Aufgabe verhältnismäßig viel Strom

Der ESP8266 ist etabliert (vermutlich mehr als all anderen gleich leistungsfähigen Geräte), es gibt viele gute Tutorials für alle möglichen Fragestellungen, er ist WLAN-fähig, er kostet wenig und er ist gut beschaffbar, er braucht ein Drittel des Stroms wie ein ESP32 oder ein Raspberry Pi 2 unter Halblast.

Es kann viele gute Gründe geben, doch gleich einen ESP32 einzusetzen. Das ist im Folgenden berücksichtigt.

Vortragsfolien, Unterlagen

Für eine Workshopsituation mit Lehrerinnen und Lehrern steht ein Foliensatz zur Verfügung. Dieser kann im Nachgang auch in der Schule eingesetzt werden.

Folien zum Workshop: IoT-Webbasiertes-Bodenfeuchtemonitoring-mit-dem-ESP8266-230221

Für den Ein- und Umstieg hat Janek Westphal eine kurze Anleitung für den ESP32 verfasst.

Anleitung Bodenfeuchte ESP32: Anleitung_Arduino-ESP32-fuer-Bodenfeuchtemessung-230221

Sketche für die Arduino-IDE

Stufe 1 Einfaches Blink-Programm für den ESP8266

Blinky230213.ino

Stufe 2 Internetzugriff über https

wlantest230213.ino

Stufe 3 Bodenfeuchtesensor-Programm

Achtung:

  1. Der Plattformzugriff ist generisch und sollte so nur zu einem kurzen Test verwendet werden. Für den Einsatz in der Schule ist ein „richtiger“ Zugriff auf die Biene40-Plattform erforderlich. In größeren Anzahlen werden diese erst 2024 nach Abschluss des Projektes zur verfügung stehen. Ausgewählte Schulen können einen Vorabzugang erhalten – oder besser: bauen sich ihren Webservice selbst.
  2. Der vorgestellte Sketch ist ein Beispiel und sollte an einen eigenen Serverprozess angebunden werden. Die Platfor wird nur ausgewählten Schulen zur verfügung gestellt.

Bodenfeuchte230121.ino

Alternativer Sketch für einen ESP32:

ESP32-Bodenfeuchte230215.ino

 

Materialliste

Für den Workshop werden folgende Materialien eingesetzt:

1 Stk. ESP8266 D1 Mini (Microcontroller. Achtung, die Stiftleisten sind nicht eingelötet. Wenn Si das nicht können, ist aien aderes ESP8266-Modell besser geeignet)

1 Stk. Mini Breadboard (zum weiteren Aufbau der Schaltung ohne Löten)

1 Stk. kapazitiver Bodenfeuchtesensor

1 Stk. USP-Steckernetzteil (zum späteren Betrieb ohne PC / MAC)

1 Stk. USB A zu USB Micro Kabel (zum Programmieren und zum späteren Betrieb)

1 Stk. Leuchtdiode (als Anzeigeinstrument, „Nutzetbeglückung“)

1 Stk. Widerstand 2,2k (zur Strombegrenzung für die LED)

3 Stk. Widerstand 100k (kann auch 47k oder 120k sein, wichtig: alle drei gleich)

4 Stk. Jumperkabel m-m (für den Bodenfeuchtesensor)

1 Stk. kurzen Draht oder weiteres Jumperkabel (für die Verbindung zur Masse-Schiene)

Die Gesamtausgaben sollten deutlich unter 20 Euro liegen.

Links

Bodenfeuchte erklärt beim Deutschen Wetterdienst

Bodenfeuchte in Tönisvorst (Messstation des Deutschen Wetterdienstes)

Ein Beitrag, der ein Bewässerungssystem beschreibt (Firma mit Werbung)

Hier gehts zum Download der Arduino-IDE

Bezugsquellen für den Bodenfeuchtesensor in Deutschland

Fa. Reichelt

Fa. AZ Delivery

Glossar

Arduino IDE

Eine integrierte Entwicklungsumgebung (IDE) ist eine Software, die verschiedene Werkzeuge zur Verfügung stellt die es Software-Entwicklern erleichtern, Code zu schreiben, Programmierfehlker zu finden und zu testen. Eine IDE vereint in der Regel mehrere Werkzeuge in einer einzigen Anwendung, z. B. Texteditor, Debugger, Compiler und Build-Tools. Eine IDE als ein Werkzeug macht den Programmierprozess effizienter, indem sie die Entwicklungszeit verkürzt, die Fehlersuche erleichtert und eine einheitliche Benutzungs-Schnittstelle für die verschiedenen Werkzeuge bietet. Insgesamt ist eine IDE ein nützliches Werkzeug für Programmierer, insbesondere für Anfänger, da sie viele der grundlegenden Funktionen für die Softwareentwicklung bereitstellt und somit den Einstieg erleichtert.

Die Arduino IDE ist eine Entwicklungsumgebung, die speziell für die Programmierung von Mikrocontrollern, insbesondere der Arduino-Boards, entwickelt wurde. Die Arduino IDE bietet eine intuitive grafische Benutzeroberfläche und enthält eine große Anzahl von Beispielprogrammen und Bibliotheken, mit denen die Benutzer ihre eigenen Projekte erstellen können. Die Arduino IDE verwendet eine vereinfachte Programmiersprache, die auf C++ basiert. Diese Sprache wurde so konzipiert, dass sie auch ohne Programmiererfahrung verwendet werden kann.

Internet der Dinge (IoT)

IoT steht für Internet der Dinge und bezieht sich auf die Verbindung von Alltagsgegenständen (z. B. Haushaltsgeräte, Autos, Thermostate) mit dem Internet. Dadurch können diese Gegenstände Daten sammeln und austauschen, was eine intelligentere Steuerung und Überwachung ermöglicht. Beispielsweise kann ein mit dem Internet verbundenes Thermostat die Raumtemperatur automatisch regeln, wenn Sie nicht zu Hause sind.

Mikrocontroller

Ein Mikrocontroller (oft abgekürzt als MCU, µController oder µC), wie z.B. im ESP32, Raspberry Pico oder Calliope Mini, ist ein sehr kleiner Schaltkreis, der auf einem einzigen Chip untergebracht ist und ein in sich geschlossenes System bildet (Single On Chip, SOC). Ein Mikrocontroller wird in vielen Alltagsgegenständen zur Steuerung und Überwachung eingesetzt. Er ist eine Art „Gehirn“ für elektronische Geräte und enthält einen Rechner, Speicher und verschiedene Ein- und Ausgänge.

Sie sind so konstruiert, dass sie nur ein einziges Programm periodisch ausführen. Sie eignen sich daher gut für vorprogrammierte, automatisierte Aufgaben, die in einem einzigen Szenario wiederholt ausgeführt werden. Dies geschieht in der Regel in einer zeitgesteuerten Schleife, die als eingebettete Anwendung bezeichnet wird. Im Gegensatz dazu steuern Mikroprozessoren (MPs oder CPUs), wie die des Raspberry Pi, vielseitigere und allgemeinere Anwendungen.

Quelltexte (als Text)

Blink-Programm

/* ===================================
Blinky230213.ino
Programm für ESP8266 , einfaches Blinkprogramm
Autoren: Janek Westphal, Claus Brell
Stand: 16.02.2023
Zum Einsatz im Rahmen der Schulkooperationen
des FB Wirtschaftswissenschaften
Hochschule Niederhein
========================================*/
// Nutzerbeglückung
// ESP32 LED an 32
// ESP8266 Node MCU SD03 oder D0=GPIO16
// ESP2866 D1Mini (AZ Delivery) D1=GPIO5
// #define LED 16 // ESP32
#define LED 5 // D1 Mini
void setup()
{
// Set pin mode
pinMode(LED,OUTPUT);
// lang (3s) leuchten zum Neustart
blinky(1,3000);
Serial.begin(9600);
delay(100);
Serial.print(„Start“);
}
void loop()
{
/* ——————————————-
Schritt 0: blinken
——————————————-*/
while(true){
blinky(3,32);
Serial.print(„.“);
delay(3000);
} // Ende while
} // Ende loop
/* ——————————
eigene Funktionen
——————————*/
/* ——————————-
Funktion:
blinky(Anzahl, Dauer LED an)
Rückmeldung für den Nutzer
——————————-*/
void blinky(int anzahl, int dauer){
/* Die interne LED wird zur Signalisierung genutzt
1 Sekunde – alles ok
64 ms Blitz – ich arbeite
5 * halbe Sekunde – etwas Schlimmes ist passiert
*/
for(int i=0;i<anzahl;i++){
digitalWrite(LED,HIGH);
delay(dauer);
digitalWrite(LED,LOW);
if(anzahl>0)delay(500);
} // Ende for
} // Ende Funktion blinky ———————-

 

Webzugriff

/* ===================================
wlantest230213.ino
Programm für ESP8266 – WLAN Test
Autoren: Claus Brell
Stand: 13.02.2023
Zum Einsatz im Rahmen der Schulkooperationen
des FB Wirtschaftswissenschaften
Hochschule Niederhein
========================================*/
// Bibliotheken für den Plattform-Zugriff
// WLAN
// Für ESP32
// #include <WiFi.h>
// Für Node MCU
#include <ESP8266WiFi.h>
// einfacher Zugriff auf den Wewbserver
//#include <WiFiClientSecure.h>
#include <ESP8266HTTPClient.h>
// ESP32 Wroom-Modul: Anschluss G35 = GPIO5 ist der verfügbare ADC1
// ESP8266 Node MCU A0
// #define SENSOR_PIN 35
#define SENSOR_PIN A0
// Nutzerbeglückung
// ESP32 LED an 32
// ESP8266 Node MCU SD03 oder D0=GPIO16
// ESP2866 D1Mini (AZ Delivery) D1=GPIO5
// #define LED 16 // ESP32
#define LED 5 // D1 Mini
// Netzwerk Parameter
//const char* ssid = „iot“;
//const char* password = „))))))“;
//const char* ssid = „Gloryhammer“;
//const char* password = „)))))“;
const char* ssid = „raspilab“;
const char* password = „raspilab1234“;
// Webserver Parameter Biene40 Plattform
const char* host = „210301.de“; // Serveradresse, ohne „https://….“
String urlpath = „/tools/verbindungstest.php“; // Webservice
const int httpsPort=443; //default für https, 80 für http
// Parameter für die Biene40 Plattform
// für jeden Sensor unterschiedlich
void setup()
{
// Set pin mode
pinMode(LED,OUTPUT);
// lang (1s) leuchten zum Neustart
blinky(1,1000);
Serial.begin(9600);
delay(100);
Serial.print(„Start“);
}
void loop()
{
/* ——————————————-
Schritt 1: WLAN Verbindung herstellen
——————————————-*/
WiFi.mode(WIFI_OFF);
WiFi.mode(WIFI_AP_STA);
if(WiFi.status() == WL_CONNECTED)Serial.println(„WLAN war verbunden“);
WiFi.begin(ssid, password);
while(WiFi.status() != WL_CONNECTED){
blinky(1,32);
Serial.print(„.“);
}
/* ——————————————-
Nun sollte WLAN verbunden sein
——————————————-*/
Serial.println();
Serial.print(„meine IP: „);
Serial.println(WiFi.localIP());
/* ——————————————-
Schritt 2: entfällt
——————————————-*/
/* ——————————————-
Schritt 3: Aufruf Webserver
——————————————-*/
// Parameter für http-Aufruf zusammenmstellen
String url = urlpath; // nur zur Kompatibilität zu anderen sketches
Serial.print(„Aufruf: „);
Serial.println(url);
// Aufruf:
callhttps(url);
/* ——————————————-
Schrittt 4: WLAN Verbindung kappen
und Ressourcen freigeben
——————————————-*/
if(WiFi.status() == WL_CONNECTED)Serial.println(„WLAN ist verbunden“);
WiFi.mode(WIFI_OFF);
if(WiFi.status() != WL_CONNECTED)Serial.println(„WLAN ist getrennt“);
/* ——————————————-
Schritt 5: Pause
——————————————-*/
Serial.println(„===================\r\nPause „);
// for (int i=0;i<180;i++){ // Produktion
for(int i=0;i<3;i++){ // Test&Entwicklung
blinky(5,22);
Serial.print(‚.‘);
delay(1000); // Pause 5000 ms = 5 s
} // Ende for
}
/* ——————————
eigene Funktionen
——————————*/
/* ——————————-
Funktion:
blinky(Anzahl, Dauer LED an)
Rückmeldung für den Nutzer
——————————-*/
void blinky(int anzahl, int dauer){
/* Die interne LED wird zur Signalisierung genutzt
1 Sekunde – alles ok
64 ms Blitz – ich arbeite
5 * halbe Sekunde – etwas Schlimmes ist passiert
*/
for(int i=0;i<anzahl;i++){
digitalWrite(LED,HIGH);
delay(dauer);
digitalWrite(LED,LOW);
if(anzahl>0)delay(500);
} // Ende for
} // Ende Funktion blinky ———————-
/* ——————————-
Funktion:
callhttps()
Übergabe der gemessenen Daten an den Server
Quelle: https://www.aeq-web.com/nodemcu-esp8266-ssl-secure-https-post-and-get-request/
——————————-*/
void callhttps(String url){
int httpsCode=666; // Vorbelegung mit einem Dummy Wert
BearSSL::WiFiClientSecure client;
client.setInsecure(); //the magic line, use with caution
HTTPClient https;
Serial.println(„Versuch Verbindungsaufbau Webservice“);
if(https.begin(client, host, httpsPort, url)){
httpsCode = https.GET();
if(httpsCode > 0){
Serial.print(„Code: „);
Serial.println(httpsCode);
if(httpsCode == HTTP_CODE_OK){
Serial.println(“ 🙂 Verbunden“);
blinky(2,500);
Serial.println(https.getString());
}
}else{
Serial.print(“ 🙁 keine Datenübertragung“);
}
}else{
Serial.print(“ 🙁 keine Verbindung zum Server „);
Serial.println(httpsCode);
}
} // Ende Funktion ——————————

 

Teile diesen Beitrag.

Schreibe einen Kommentar

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