Zisterne Füllstandsanzeige 2.0 mit Wemos Lolin32 + MySQL Datenbank

24 Kommentare
Zisterne Füllstandsanzeige 2.0 mit Wemos Lolin32 + MySQL Datenbank

Es handelt sich hier um eine Abänderung von meiner 1. Zisternen Überwachung, den Beitrag dazu findet Ihr hier. In der 2. Version werden die Daten in einer MySQL Datenbank gespeichert und können von überall abgerufen werden, vorausgesetzt Ihr habt eine MySQL Datenbank im Internet. Ihr könnt euch auch eine Lokale Datenbank anlegen, dazu benötigt Ihr eine Apache Server Software. Ich haben anfangs mit diesem Programm getestet Xampp, könnt Ihr hier Herunterladen.

Warum habe ich das ganze jetzt mit einer MySQL Datenbank realisiert?

Der Grund ist ganz einfach, in der 1. Version läuft das Wemos D1 mini Board rund um die Uhr. Ich wollte aber den Stromverbrauch reduzieren, gut die Boards verbrauchen ja nicht soviel, trotzdem müssen da nicht permanent Daten gesendet werden. Daher wird in der 2. Version, je nachdem wie man es einstellt, 2 mal am Tag eine Messung durchgeführt. Anschließend geht der Wemos Lolin32 in den Schlafmodus und verbraucht dadurch sehr wenig Strom.
Die Datenbank sieht wie folgt aus.

Hier könnt hier euch die Datenbank runterladen und importieren.

Warum nehme ich den Wemos Lolin32?

Der Wemos Lolin32 ist sehr gut geeignet, da er nach dem Schlafmodus von alleine wieder aufwacht, ohne das ein Knopf oder ähnliches betätigt werden muss. Bei den anderen Wemos Board ist es so das, dass Board noch dem Schlafmodus in einen Standby Modus geht und nur durch eine Aktion aufgeweckt werden kann.

Hier könnt Ihr die Datein für das Schreiben in die Datenbank und das Lesen der Datenbank herunterladen.


Beschaltung


Funktion

Der Wemos ruft eine Internetseite auf, in meinem Fall "https://arduino-projekte.info/zisterne/writemysql.php", dann werden über eine Ergänzung in der URL, die gemessenen Daten + Datum an die MySQL Datenbank übergeben.

Der Programmcode

#include <wifi.h>
const int sleepSeconds = 3600;
const char* ssid = "WLAN NAME"; //WLAN Netzwerk
const char* password = "PASSWORT";    //WLAN Passwort
  
//Webserver, wo die Datei zum befüllen der Datenbank leigt, nur die Adresse (z.B. arduino-projekte.info)
const char* host = "HIER KOMMT DIE WEDADRESSE REIN";
  
WiFiClient client;
  
int trigger = 13;
int echo = 12;
long dauer = 0;
long entfernung = 0;
  
void setup() {
  pinMode(trigger, OUTPUT);
  pinMode(echo, INPUT);
  WiFi.begin(ssid, password);
}
  
void loop() {
  digitalWrite(trigger, LOW);
  delay(5);
  digitalWrite(trigger, HIGH);
  delay(10);
  digitalWrite(trigger, LOW);
  dauer = pulseIn(echo, HIGH);
  entfernung = (dauer / 2) / 29.1;
  
  if (entfernung >= 200 || entfernung <= 0)
  {
    entfernung = 0;
  }
  else
  {
  entfernung = 192 - entfernung;
  entfernung = entfernung * 84.7457;
  }
  Serial.println("nStarting connection to server...");
  //URL wird erzeugt und gesendet
  WiFiClient client;
  if (client.connect(host, 80)) {
    String url = "/writemysql.php";
    url += "?liter=";
    url += entfernung;
    client.print(String("GET ") + url + " HTTP/1.1rn" +
                 "Host: " + host + "rn" +
                 "Connection: closernrn");
    client.println();  //Verbindungs mit Server aufbauen und HTTP Anfrage senden
  }
  client.stop();
  //Beenden der Verbindung
  delay(1000);
  ESP.deepSleep(sleepSeconds * 1000000); //Schalfmodus
}

UPDATE:

Ich habe einen Wasserdichten Sensor gefunden und getestet. Der JSN-SR04T, dieser Funktioniert ohne Probleme und kann in den bestehenden Sketch eingebunden werden ohne was zu verändern. Ich habe auch den DYP-ME007Y ausprobiert, diesen habe ich jedoch nicht zum laufen bekommen. Ich hatte zwei Stück und beide haben nicht funktioniert.

Solltet Ihr fragen haben schreibt sie doch einfach in die Kommentare, dann kann ich den Artikel anpassen.

Folgende Bauteile wurden verwendet:

1x Ultraschallsensor HC-SR04 https://ap-url.de/hcsr04
1x Ultraschallentfernungsmesser AJ-SR04M / JSN-SR04T Wasserdicht https://ap-url.de/jsnsr04t
1x Lolin32 – ESP32 4MB https://arduino-projekte.info/produkt/lolin32-esp32-4mb/

1x ca. 2m 4 Adrige Leitung http://amzn.to/2nqOzWs
1x Silikon http://amzn.to/2nHPqOn
1x Abzweigdose klein
1x Abzweigdose groß http://amzn.to/2nHWFpA
1x ein Stück Blech um den Sensor am Decker der Zisterne zu befestigen

Arduino HC-SR04 MySQL Projekte Wemos Lolin32 Zisterne Füllstandsanzeige

24 Kommentare

… was mich etwas verwirrt ist, dass der obige Code einen Deepsleep von 479 Minuten setzen “will” . Der DeepSleep verlangt ein unsigned int was bei 32Bit = 4.294.967.295 ist was dann wiederum den 71Minuten entspricht. Wie funktioniert die Messung 1x am Tag?

Christian

Ich möchte auch eine Frage stellen. Zunächst, KLASSE PROJEKT! Ist kopiert :) !
Allerdings frage ich mich wie hoch die DeepSleep Zeit beim Lolin sein darf? Ich habe den D1 mini pro hier und der erlaubt laut Datenblatt nur ~71 Minuten. Über den Lolin konnte ich nichts finden (unbegrenzt?). Weiß jemand Näheres?
Vielen Dank schonmal!

Christian

Ich habe eine Frage, eventuell betreibt diese Lösung schon jemand am LoPi? Im USB Betrieb funktioniert alles super, nur im Batteriebetreib kann ich keine Werte messen, muss hier noch etwas beachtet werden?

Ich verwende den JSN-SR04T

Juergen

Echt eine Tolle Anleitung und eine Inspiration: Mein Projekt ist im Laborbetrieb aber fertig und muss noch einige Tage Test überwinden:
https://github.com/schwoediauer/arduino_IoT

Juergen Schwoediauer

Hallo,
ein Kommentar zum Wemos D1 und das Aufwachen nach dem deep-sleep:
Das funktioniert problemlos, man muss nur den D0 Anschluss mit dem RST Anschluss verbinden. Dann weckt er sich nach dem Ablauf der Sleepzeit selber auf.
Bei den original-WemosD1 v3 Modulen gibt es sogar an der Unterseite zwei Lötpunkte, die mit ein bisschen Lötzinn verbunden werden können.

Rai

Hinterlassen Sie einen Kommentar

Bitte beachten Sie, dass Kommentare vor der Veröffentlichung genehmigt werden müssen.