Uno als Webserver oder per Mail Daten senden

Hallo zusammen,
ich habe einen Uno. Diesen nutze ich für meine Bewässerung. Das funktioniert auch soweit ganz gut.
Ich würde jetzt gerne die gemessen Werte loggen und abrufen können. Bodenfeuchtigkeit, Füllstand und ob gewässert wurde oder nicht zum Beispiel. Wie würde ich das am besten umsetzen?
Ich habe versucht in Erfahrung zu bringen was für Hardware ich noch brauche. Reicht da ein ESP8266 Wifi-Modul und SD-Karten Modul für meinen Uno? Ich weiß noch nicht was am einfachsten ist. Die Daten als CSV zu loggen und dann abrufen ober einfach per Mail zusenden zulassen dann bräuchte ich keine SD-Karte? Ich will gar nichts auswerten. Mir ist nur wichtig, dass ich die Daten sehen kann wenn ich nicht zu hause bin. Was wäre denn der geringste Aufwand?
Danke und Gruß

Das widerspricht sich.

Wenn Du nur aktuelle Daten sehen willst: Kleines Web-Fontend.
Minimalistisch.
Sobald Du Daten, die nicht den aktuellen entsprechen - also die in der Vergangenheit liegen... - sehen willst, kommst Um Datenspeicher und Auswertungsscript nicht drum rum.

Hallo danke für die Rückmeldung.
Ich frage zur Zeit alle zwei Stunden die Sensoren ab. Ich hatte mir das so vorgestellt das ich dann alle zwei Stunden eine E-mail bekomme. Dann kann ich auch auch in der Vergangenheit schauen oder? Wie gesagt ich brauche keine Datenbank und ich will eigentlich auch nichts grafisch darstellen. Ich will nur sehen, dass alles läuft und wie feucht die Erde ist um ggf nachzuregeln.
Habe ich mir das zu einfach vorgestellt?

Dann brauchst sowas wie nen Mailserver, den Du beschreiben kannst.
Da heutige externe Mailserver mindestens SSL verlangen, ist das in konventionell nicht mehr ganz so einfach.

Vielleicht:

Eine einfache Lösung ist auch, den Uno um einen ESP8266 zu erweitern und die Daten per UDP an den PC oder an einen anderen ESP zu senden. Da tut es auch der kleine ESP-01 oder auch der etwas größere Wemos D1 mini bzw. NodeMCU. Alle auf Basis des ESP8266.
Die Daten kannst du vom Uno per serial an den ESP übertragen.
I2C geht auch, ist nur etwas komplizierter, da der ESP Master sein muss.

Auch mit dieser Kombination kannst du ein Web-Frontend zur Visualisierung verwenden. Ich nutze z.B. in einigen Projekten beides, Web-Frontend und UDP zur Datenübertragung und Auswertung für spezielle Vorgänge.

Guten Morgen, nach dem Input von euch habe ich nochmal gelesen. Kann ich denn den UNO zum Beispiel durch ein esp32 ersetzen? Dann die Anlage über den esp32 steuern und auch direkt die Daten via Mail zu senden? Die Pins reichen und mehr als 3,3V brauche ich nicht.
So ähnlich wird das doch hier auch gemacht oder?
Mausefalle
https://iotcon.de/blog/iot-konferenz/mausefalle-im-iot-bauen/

ESP32 Send Emails
https://randomnerdtutorials.com/esp32-send-email-smtp-server-arduino-ide/

Was hat eine Mausefalle mit einer Gartenbewässerung zu tun ?

Um das zu beantworten, kennen wir dein Projekt und deine Anforderungen zu wenig bis überhaupt nicht.

:wink: Gute Frage. Ich steure ja auch nur die einzelnen Pins und schalte ein paar Relais und bekomme ein paar analog Daten. Ist jetzt ja nichts großes an Rechenleistung was verlangt wird. Bei der Mausfalle wird ja auch nur die Email versendet wenn eine bestimmte Bedingung erfüllt ist oder? Mehr will ich ja eigentlich auch nicht. Schafft das ein esp32 nicht?

In Post #8 hatte ich schon kurz was geschrieben. Ohne genaue Infos ist das schwer zu beantworten.
Am besten du postest mal ein aktuelles Schaltbild deines jetzigen Projektes. 3,3V reicht nicht unbedingt für alles aus.

Eine Skizze ist anbei. Ist aber ein bisschen älter. Die Relais vorsorge ich nicht mehr über den UNO mit Storm. Freilaufdioden sind auch nicht eingezeichnet. Ich denke es geht nur um den Überblick.
Der Sketch ist auch dabei.


//define soil moisture in the next line
int SoilTomato = 620;        // Summer reading slightly too moist =590
(2019 May), 600 to 620 ok June 2019
int SoilGround = 670;        // Summer 2020 new Soil Test 670
int WaterLevel = 800;         // Waterlevel, water tank greater than 800
then empty

//int Sensor = A0;            //Senor pin plant
const byte SensorPower = 7;   //Power pin plant - use digital I/O pin
const byte SensorGnd = 8;     //Gnd pin plant - use digital I/O pin
const byte Sensor = A0;       //Sensor pin plant

//int Sensor2 = A1;           //Senor pin water lever
const byte SensorPower2 = 12; //Power pin water level - use digital I/O pin
const byte SensorGnd2 = 13;   //Gnd pin water level - use digital I/O pin
const byte Sensor2 = A1;      //Sensor pin water level

//int Sensor3 = A2;           //Senor pin plant - ground
const byte SensorPower3 = 9;  //Power pin water level - use digital I/O pin
const byte SensorGnd3 = 10;   //Gnd pin water level - use digital I/O pin
const byte Sensor3 = A2;      //Sensor pin water level

//relay solenoid valve
int pumpPin = 4;              //1.
int pumpPin2 = 3;             //2. Tomato - Solenoid valve pin, solenoid
valve
int pumpPin3 = 6;             //3. Ground - Solenoid valve pin, solenoid
valve
int pumpPin4 = 5;             //4. Ground2 - Solenoid valve pin,
solenoid valve

 // SSR pump
int relayPin = 2;   // set pin 2 for relay output


void setup() {

  digitalWrite(pumpPin, HIGH);     // Relais wird nicht
gestartet,Prevents relays from starting up engaged
  digitalWrite(pumpPin2, HIGH);    // Relais wird nicht
gestartet,Prevents relays from starting up engaged
  digitalWrite(pumpPin3, HIGH);    // Relais wird nicht
gestartet,Prevents relays from starting up engaged
  digitalWrite(pumpPin4, HIGH);    // Relais wird nicht
gestartet,Prevents relays from starting up engaged

  pinMode(pumpPin, OUTPUT);
  pinMode(pumpPin2, OUTPUT);
  pinMode(pumpPin3, OUTPUT);
  pinMode(pumpPin4, OUTPUT);

  pinMode(relayPin, OUTPUT);

  Serial.begin(9600);
}

void loop() {

//********* Round 1 ***************
//check

  Serial.println(F("***Start measuring plant in 60s! warmuup Sensor***"));
  pinMode(SensorPower, OUTPUT);
  pinMode(SensorPower2, OUTPUT);
  pinMode(SensorPower3, OUTPUT);
  pinMode(SensorGnd, OUTPUT);
  pinMode(SensorGnd2, OUTPUT);
  pinMode(SensorGnd3, OUTPUT);
  digitalWrite(SensorPower, HIGH);
  digitalWrite(SensorPower2, HIGH);
  digitalWrite(SensorPower3, HIGH);
  digitalWrite(SensorGnd, LOW);
  digitalWrite(SensorGnd2, LOW);
  digitalWrite(SensorGnd3, LOW);

  delay(60000);                       //warmup Time

  Serial.print("plant-tomato:");
  Serial.println(analogRead(A0));
  delay(500);
  Serial.print("plant-ground:");
  Serial.println(analogRead(A2));
  delay(500);
  Serial.print("water level:");
  Serial.println(analogRead(A1));
  delay(500);


// 1. sensor and pump Tomato:

  if((analogRead(A0) <SoilTomato) && (analogRead(A1) <WaterLevel)) {
    Serial.println(F("Soil Tomato still moist. Water tank filled."));
    }
  if((analogRead(A0) <SoilTomato) && (analogRead(A1) >WaterLevel)) {
    Serial.println(F("Soil Tomato still moist. empty water tank!!!"));
    }
  if((analogRead(A0) >SoilTomato) && (analogRead(A1) >WaterLevel)) {
    Serial.println(F("Soil Tomato dry. empty water tank!!!"));
    }

 if((analogRead(A0) >SoilTomato) && (analogRead(A1) <WaterLevel)) {
    Serial.println(F("Soil Tomato dry. Water tank filled."));
    }


  if((analogRead(A0) >SoilTomato) && (analogRead(A1) <WaterLevel)) {

    digitalWrite(relayPin, HIGH);
    Serial.println(F("pump-on:"));
    delay(2000);                                          //pump
pressure delay 2 Sek
    digitalWrite(pumpPin2, LOW);
    Serial.println(F("Tomato-valve-on:"));
    delay(25000); //watering time
    digitalWrite(relayPin, LOW);
    Serial.println(F("pump-off:"));
    digitalWrite(pumpPin2, HIGH);
    Serial.println(F("Tomato-valve-off:"));
    Serial.println(F("watering Tomato successfully"));
    }


// 1. sensor and pump Ground:

  if((analogRead(A2) <SoilGround) && (analogRead(A1) <WaterLevel)) {
    Serial.println(F("Soil Ground still moist. Water tank filled."));
    }

  if((analogRead(A2) <SoilGround) && (analogRead(A1) >WaterLevel)) {
    Serial.println(F("Soil Ground still moist. empty water tank!!!"));
    }

  if((analogRead(A2) >SoilGround) && (analogRead(A1) >WaterLevel)) {
    Serial.println(F("Soil Ground dry. empty water tank!!!"));
    }

     if((analogRead(A2) >SoilGround) && (analogRead(A1) <WaterLevel)) {
    Serial.println(F("Soil Ground dry. Water tank filled."));
    }

  if((analogRead(A2) >SoilGround) && (analogRead(A1) <WaterLevel)) {

    digitalWrite(relayPin, HIGH);
    Serial.println(F("pump-on:"));
    delay(2000);                                          //pump
pressure delay 2 Sek
    digitalWrite(pumpPin3, LOW);
    Serial.println(F("Ground1-valve-on:"));
    delay(25000); //watering time
   // digitalWrite(relayPin, LOW);
    digitalWrite(pumpPin3, HIGH);
    Serial.println(F("Ground1-valve-off:"));

   // delay(3000);                                         //Break 3 Sek

   // digitalWrite(relayPin, HIGH);
    digitalWrite(pumpPin4, LOW);
    Serial.println(F("Ground2-valve-on:"));
    delay(25000); //watering time
    digitalWrite(relayPin, LOW);
    Serial.println(F("pump-off:"));
    digitalWrite(pumpPin4, HIGH);
    Serial.println(F("ground2-valve-off:"));

    Serial.println(F("watering ground successfully"));
    }


//poweroff
 { Serial.println(F("***Measurement done. Disconnecting sensor.***"));
  pinMode(SensorPower, INPUT);
  pinMode(SensorGnd, INPUT);
  pinMode(SensorPower2, INPUT);
  pinMode(SensorGnd2, INPUT);
  pinMode(SensorPower3, INPUT);
  pinMode(SensorGnd3, INPUT);

//   delay(180000);
    }



  delay(7200000); // 2hour
//    delay(3000);  //Test

  //delay(2UL * 60UL * 60UL * 1000UL);  //x hours each of 60 minutes
each of 60 seconds each of 1000 milliseconds all unsigned longs


}


Ok, sollte funktionieren.
Allerdings musst du dabei beachten, dass viele Relaismodule nicht mit 3,3V angesteuert werden können. Die funktionieren dann nicht. Wie es mit deinen Sensoren ist, musst du prüfen.

Allerdings würde ich den Aufwand nicht treiben, alles umzubauen.
Kleine Erweiterung um einen ESP und gut ists. :wink:

OK? :wink:
Also was brauche ich jetzt noch an Hardware? Nur einen ESP8266?
Die Daten vom UNO === > serial an den ESP übertragen ===> Email
Habe ich das richtig verstanden?

Beide senden E-Mails :slightly_smiling_face:

Sehr schön!

Weniger Spannung und weniger Strom an den Pins sind die problematischen Kriterien. Wurde schon geschrieben, ich betone es noch mal. ESP8266 entfällt wegen zu wenigen analogen Eingängen, der ESP32 hat genügend. Ich habe Relaismodule, die mit einem ESP32 nicht funktionieren.

Doch, hinsichtlich Speicher und Geschwindigkeit locker! Die Reichweite zum Router kann kritisch sein, bei mir reicht es nicht quer durch's Haus.

Der ESP32 ist ein Füllhorn an Möglichkeiten, was die Frage aufwirft, wenn der ESP32 es schafft, ob Du dem gewachsen bist. Ich kenne Dich nicht, daher muß ich diese Frage mal stellen.

Hallo,
wenn Du auf aktuelle Werte zu beliebigen Zeitpunkten abrufen willst wird es mit den delay() eventuell etwas schwierig werden. Du verwendest jetzt ein delay() für 2 Stunden, in der Zeit wirst Du von dem Uno keine Daten bekommen. Du kannst Sie natürlich bei jedem Messzyklus einmalig an den ESP senden( z.B seriell) und dort zwischenspeichern um sie z.B über eine Webseite anzeigen zu können.

Ich würde Dir allerdings von dem kleinen ESP8266-01 abraten. Von Hause aus läuft er mit AT Kommandos, das geht ist aber ziemlich umständlich und würde mit Deinen delay() gar nicht klappen. In dem Fall muss der Uno ja jederzeit auf den ESP reagieren können und mit Ihm kommunizieren. Du kannst allerdings auch mit der IDE einen eigenen Sketch aufspielen , und dann das die Daten zwischenspeichern. Allerdings ist gerade für Anfänger der ESP8266-01 bei der Programmierung und Händling etwas schwierig.

Ob Du alles auf einen ESP umbauen kannst hängt von den Sensoren ab. Wenn die Relais bei 3,3V nicht gehen könnte man noch einen Transistor dazwischen bauen. ESP8266 Systeme haben in aller Regel nur einen Analogeingang. Damit kämme dann ein i2c Analog Erweiterung in Frage.

Um E-mails zu senden gibt es Libs hab ich aber noch nicht benutzt. Ich würde einen Webserver nehmen. Schau Dich mal bei Fips um , da findest Du bestimmt was Passendes.

Heinz

Mir reicht das alle 2 Stunden. Es ist eher als Statusbericht für mich zu sehen ich brauche keine Daten zwischen drin. Ich weiß dass ich den UNO mit dem delay unbrauchbar mache. Er hat aber sonst keine Funktion in der zwischen Zeit. Ich hatte auch schon überlegt eine RTC nach zurüsten. Mir war jetzt aber erstmal die Statusmeldung wichtiger.

Genau das hatte ich mir vorgestellt.

Und das hatte ich dir schon vorgeschlagen. Mit einem ESP-01 oder Wemos. Damit wird es einfach um die nötigen Funktionen erweitert.

Und natürlich ist es mit einem Wemos oder NodeMCU einfacher.
Aber keine Angst vor dem ESP8266-01

Alles klar, nicht streiten. :hugs:
Danke für die Hilfe.

Wir streiten nicht.
Wir versuchen dir nur unterschiedliche Vorschläge zu unterbreiten.