WEMOS D1-MINI SWITH CONTROL


A D1-Mini with 3 Swiths controlled through

a PHP web server embedded in a Smartphone

         
        In this project we will create a system to controll 3 relays. We will use a  Unused/old Smartphone Android with a PHP server and a web page to controll D1-Mini.

    Used to:
- A automatic irrigation system with 3 circuits/eletrovalves (from Washing machine).
- Other electric equipments (Ventilation , Heating, hot water cylinder, …)



In this system, we connected the Wemos D1 mini to three relays. These electronic switches are used to control the electrovalves, turning them on or off based on the signal received from the microcontroller. The relays used can handle a maximum power of 10 Ampers operating as normally open (NO) or normally closed (NC), making them suitable for controlling a variety of home or office devices.

The buzzer is connected to the Wemos D1 mini and acts as an audio indicator. It operates at a frequency between 1kHz to 3kHz. It is usually used in this system to give sound notifications based on the programming logic installed in the microcontroller. For instance, it beeps when a device is turned on or off.

An on/off button is also included in this system which is programmed to turn ON or OFF the working periods of the relays.



The firmware of this system is written in Arduino, C, C++ language, which is a user-friendly programming language and has a wide range of libraries that support various components, including the Wemos D1 mini, relays, and buzzers. This firmware is loaded onto the microcontroller using the Arduino IDE, allowing one to define the operation logic of this system.


Given the combination of these components and the flexibility of the Arduino programming language, this system can is customized to perform a wide array of tasks, either locally or over the internet, proving beneficial for home automation, industrial control, or various IoT applications.


The firmware is as indicated bellow, is necessary insert your SSID Name and Password, Your email from and to, if is gmail acount.


#include <ESP_Mail_Client.h>
#include <ESPAsyncTCP.h>
#include <AsyncElegantOTA.h>
#include <ESPAsyncWebServer.h>

#include <EEPROM.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>


#define Relay1 D1 //D5
#define Relay2 D2 //D6
#define Relay3 D5 //D5
long int analogInPin = A0;
long int ligar11inihr, ligar11inimn, ligar11fimhr, ligar11fimmn, ligar21inihr,
ligar21inimn, ligar21fimhr, ligar21fimmn, ligar31inihr, ligar31inimn, ligar31fimhr,
ligar31fimmn;
long int ligar12inihr, ligar12inimn, ligar12fimhr, ligar12fimmn, ligar22inihr,
ligar22inimn, ligar22fimhr, ligar22fimmn, ligar32inihr, ligar32inimn, ligar32fimhr,
ligar32fimmn;
long int ligar13inihr, ligar13inimn, ligar13fimhr, ligar13fimmn, ligar23inihr,
ligar23inimn, ligar23fimhr, ligar23fimmn, ligar33inihr, ligar33inimn, ligar33fimhr,
ligar33fimmn;

String textmsgtxt, msgtxt, msgtxt1, msgtxt2, msgtxt3, IPremoto, localIP1, psswrd,
psswrd1, onoff, localport, nowmn, nowhrs;

String T11, T12, T13, T21, T22, T23, T31, T32, T33, Tmr11, Tmr12, Tmr13, Tmr21,
Tmr22, Tmr23, Tmr31, Tmr32, Tmr33;
String Temp1, Temp2, Temp3, System, even_days1, even_days2, even_days3;
//int address = 0;
int resettime = 1;
int portinf = 1;
int inPIN = D7;
//int onoffend = 0;
int Buzzer1 = D6;   //Buzzer Beep
long int hrs = 0;
long int mn = 0;
long int seg = 0;
long int pairdays = 1;
long int onoffini = 0;
unsigned long previousMillis = 0;
//unsigned long currentMillis1 = 0;
const long secinterval = 1000;
//const long onoffinterval = 2000;


const char* ssid = "Your wifi network name";
const char* password = "your wifi password ";

// To send Emails using Gmail on port 465 (SSL), you need to create an app password:
https://support.google.com/accounts/answer/185833
#define AUTHOR_EMAIL    "YOUR_FROM_EMAIL@gmail.com"
#define AUTHOR_PASSWORD "password_YOUR_FROM_EMAIL@gmail.com "
#define SMTP_HOST       "smtp.gmail.com"
#define SMTP_PORT       465
#define RECIPIENT_EMAIL "YOUR_TO_EMAIL@gmail.com"

/* The SMTP Session object used for Email sending */
SMTPSession smtp;

    /* Declare the message class */
    //SMTP_Message message;

   //ESP_Mail_Session session;

/* Callback function to get the Email sending status */
void smtpCallback(SMTP_Status status);




unsigned int localUdpPort, serverport;
WiFiUDP Udp;
//unsigned int localUdpPort = 465;  // local port to listen on
char incomingPacket[255];  // buffer for incoming packets
//char  replyPacket[] = "Hi there! Got the message :-)";  // a reply string to
send back
AsyncWebServer server(90); //choose your own router port, if you want!

const char* loginIndex =
 "<meta charset=utf-8>"
    "<meta http-equiv=X-UA-Compatible content='IE=edge'>"
    "<meta name=viewport content='width=device-width,initial-scale=1'>"
 "<form name='loginForm' method='post'>"
    "<table width='20%' bgcolor='0070FF' align='center'>"
        "<tr>"
            "<td colspan=2>"
 
"<center><font size=4><b>D1 Mini - 3SWITCHS, Login Menu</b></font></center>"
                "<br>"
            "</td>"
            "<br>"
            "<br>"
        "</tr>"
        "<tr>"
             "<td>Username:</td>"
             "<td><input type='text' size=25 name='userid'><br></td>"
        "</tr>"
        "<br>"
        "<br>"
        "<tr>"
            "<td>Password:</td>"
            "<td><input type='Password' size=25 name='pwd'><br></td>"
            "<br>"
            "<br>"
        "</tr>"
        "<tr>"
            "<td><input type='submit' onclick='check(this.form)' value='Login'></td>"
        "</tr>"
    "</table>"
"</form>"
"<script>"
    "function check(form)"
    "{"
    "if(form.userid.value=='TYPE A USER_NAME' && form.pwd.value=='TYPE A PASSWORD')"
    "{"
    "window.open('/update')"
    "}"
    "else"
    "{"
    " alert('Wrong password or Username')/*displays error message*/"
    ";"
    "window.open('https://www.google.com/?gws_rd=ssl')"
    "}"
    "}"
"</script>";

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
void setup()
{

    pinMode(inPIN, INPUT);
    digitalWrite(inPIN, LOW);
    pinMode(Relay1, OUTPUT);
    digitalWrite(Relay1, LOW);
    pinMode(Relay2, OUTPUT);
    digitalWrite(Relay2, LOW);
    pinMode(Relay3, OUTPUT);
    digitalWrite(Relay3, LOW);
    pinMode(Buzzer1, OUTPUT);
    digitalWrite(Buzzer1, LOW);
           
    EEPROM.begin(512);
    Serial.begin(115200);
    Serial.println();

    WiFi.disconnect();
    WiFi.softAPdisconnect(true);
    WiFi.mode(WIFI_STA);
  Serial.printf("Connecting to %s ", ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println(" connected");

   MailClient.networkReconnect(true);

    smtp.debug(1);
     int resettime = 1;
 
          unsigned int localUdpPort = 8080;  // local port to listen on
          Udp.begin(localUdpPort);

Serial.printf("UDP IP %s, porta UDP  %d\n", WiFi.localIP().toString().c_str(),
localUdpPort);
          localIP1 = WiFi.localIP().toString().c_str();    
          String msgtxt = ("Switch connected to: " + localIP1 + ":" + localUdpPort);
          sendUDP(msgtxt);    
          msgtxt = "";            
         // }
          // Start in OFF
         onoff = "OF";
         writeeeprom(243,onoff);

         even_days1 = "OF";
         writeeeprom(246,even_days1);
         even_days2 = "OF";
         writeeeprom(250,even_days2);
         even_days3 = "OF";
         writeeeprom(253,even_days3);        

}

//#################################################################
void loop()
{
  unsigned long currentMillis = millis();
      //Serial.println(currentMillis);

        onoffini = digitalRead(inPIN); //read the pin D7 from the switch command (IN)
- LOW(0v) HIGH(3v3)   10KOhm to GND
        //Serial.println(onoffini);
          delay(1);        
        if(onoffini == 1){  // Button to turn ON or OFF all the system D7 as a pullup
          delay(10);

                            System = readeeprom(243);
                            if(System == "ON"){
                            onoff = "OF";
                            writeeeprom(243,onoff);
                            String mensage = "Sistem OFF";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
                            tone(Buzzer1, 1800, 300); // play tone for 500 ms
                            delay(1000);
                            tone(Buzzer1, 1800, 300); // play tone for 500 ms
                            delay(5000);                                                          
                            }
                            if(System == "OF"){
                            onoff = "ON";
                            writeeeprom(243,onoff);
                            String msgtxt = "Sistem ON";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
                            tone(Buzzer1, 1800, 2000); // play tone for 2000 ms                            
                            }
                            delay(3000);                
       
        }

     
if (currentMillis - previousMillis >= secinterval){
  previousMillis = currentMillis;
      currentMillis = 0;
      seg = seg + 1;
      Serial.print("seg:");
        Serial.println(seg);


              System = readeeprom(243);
              if (System == "ON") {
              workingswitchs();
            }
             
//---------------------------------------------------------    
    if (seg == 60){
      seg = 0;
      mn = mn + 1;
    //Serial.print("mn:");
       //Serial.println(mn);

    }            
      if (mn == 60){
        mn = 0;
        hrs = hrs + 1;
//    Serial.print("hrs:");
//        Serial.println(hrs);
       }              
        if (hrs == 24){
          hrs = 0;
          pairdays = pairdays + 1;
        }
         if (pairdays == 2){
          pairdays = 1;
          }
}

//========================================================================================

 
  int packetSize = Udp.parsePacket();
  if (packetSize > 5)
  {
    // receive incoming UDP packets
    Serial.printf("Received %d bytes from %s, port %d\n",
packetSize, Udp.remoteIP().toString().c_str(), Udp.remotePort());
    IPremoto = Udp.remoteIP().toString().c_str();    
    int len = Udp.read(incomingPacket, 255);
    if (len > 0)
    {
      incomingPacket[len] = 0;
    }
    Serial.printf("UDP packet contents: %s\n", incomingPacket);

    textmsgtxt = incomingPacket;

    //Serial.println(textMessage);    
    delay(1);

            if(textmsgtxt.indexOf("IPServer")>=0){   //Exemple IPServer:192.xxx.x.xx
   
                psswrd1 = textmsgtxt.substring(9 ,21);
                    //Serial.println("IP: " + psswrd1);
                writeeeprom(0,psswrd1);
                delay(10);
               psswrd1 = readeeprom(0).substring(0, 14);
               String msgtxt = "New IP: " + psswrd1;
               sendUDP(msgtxt);    
               textmsgtxt = "";              
//                Serial.print("psswrd1: ");
//                Serial.println(psswrd1);    
              }
            else if(textmsgtxt.indexOf("ReiniciaIP")>=0)//  Apagar o IP e colocar
o de defeito
            {
              psswrd1 = Udp.remoteIP().toString().c_str();
              //Serial.println("IP: " + psswrd1);
              writeeeprom(0,psswrd1);
              delay(10);
              psswrd1 = readeeprom(0).substring(0, 14);
               String msgtxt = "IP dfault: " + psswrd1;
              sendUDP(msgtxt);
            }
           
            if(textmsgtxt.indexOf("Portalocal")>=0)//  Ex: Portalocal:1234
- if different of 8080)
            {
                psswrd1 = textmsgtxt.substring(11 ,15);
                    //Serial.println("Porta local: " + psswrd1);
                writeeeprom(110,psswrd1);
                delay(1);
               psswrd1 = readeeprom(110).substring(0, 4);
               String msgtxt = "Local Port: " + psswrd1;
               sendUDP(msgtxt);    
               textmsgtxt = "";
            }

            if(textmsgtxt.indexOf("Portaserver")>=0)//  Ex: Portaserver:1234
- Port of the Smartphone)
            {
                psswrd1 = textmsgtxt.substring(12 ,16);
                    Serial.println("IP: " + psswrd1);
                writeeeprom(120,psswrd1);
                delay(1);
               psswrd1 = readeeprom(120).substring(0, 4);
               String msgtxt = "Server Port : " + psswrd1;
               sendUDP(msgtxt);    
               textmsgtxt = "";
            }
                             
            if(textmsgtxt.indexOf("Apagarmem")>=0)//  Apagarmem
- erase the memory and restart the D1 Mini
            {
              // write a 0 to all 512 bytes of the EEPROM
               for (int i = 0; i < 512; i++) {
               EEPROM.write(i, 0);
               EEPROM.commit();
               }
               Serial.println("Mem erased");
               ESP.restart();
            }

           if(textmsgtxt.indexOf("Reiniciar")>=0)//  reinicia Sistema
            {
               ESP.restart();
            }  

            if (textmsgtxt.indexOf("Serveron")>=0) { //start Server to updte OTA
            server.on("/", HTTP_GET, [](AsyncWebServerRequest * request) {
            request->send_P(200, "text/html", loginIndex);
            });
            // Start ElegantOTA
            AsyncElegantOTA.begin(&server);            
            //AsyncElegantOTA.begin(&server);
            // Start server
            server.begin();
            String msgtxt = "Server Activ";
            sendUDP(msgtxt);
            textmsgtxt = "";
            }

            if (textmsgtxt.indexOf("Serveroff")>=0) {

            server.end();
            String msgtxt = "Server Desconnected";
            sendUDP(msgtxt);
            textmsgtxt = "";
            }
                     
           
            if (textmsgtxt.indexOf("Horascertas")>=0){ //Ex. Horascertas:20:14 -Adjust the hours and minutes
                            String hrs1 = textmsgtxt.substring(12 ,14);
                            //writeeeprom(103,hrs1);
                            String mn1 = textmsgtxt.substring(15 ,17);
                            //Serial.println("temp1 " + temp1);
                            //writeeeprom(106,mn1);
                            String msgtxt = "Inserted Hours in D1Mini to: " + hrs1 + ":" + mn1;
                            sendUDP(msgtxt);    
                            textmsgtxt = "";    
                            hrs = hrs1.toInt();
                            mn = mn1.toInt();                                                                                    
            }
                       
            if (textmsgtxt.indexOf("Quehoras")>=0){ //to now the internal time
                            if((hrs >= 0) && (hrs < 10)) {
                            nowhrs = "0" + String(hrs);
                            }
                            else{
                             nowhrs = String(hrs);  
                            }
                            if((mn >= 0) && (mn < 10)) {
                              nowmn = "0" + String(mn);
                            }
                            else{
                             nowmn = String(mn);  
                            }                                        
                            String msgtxt = " D1Mini Internal hours: " + nowhrs + ":" + nowmn;
                            sendUDP(msgtxt);    
                            textmsgtxt = "";    
                                                                                 
            }

            if (textmsgtxt.indexOf("Timer11")>=0){ //Exemplo Timer1:HrsINI,HrsFIM (Timer11:20:50,21:05)

                            String Timer11hi = textmsgtxt.substring(8 ,10);
                            writeeeprom(20,Timer11hi);
                            String Timer11mni = textmsgtxt.substring(11 ,13);
                            writeeeprom(24,Timer11mni);                            
                            String Timer11hf = textmsgtxt.substring(14 ,16);
                            writeeeprom(28,Timer11hf);
                            String Timer11mnf = textmsgtxt.substring(17 ,19);
                            writeeeprom(32,Timer11mnf);
                            String msgtxt = "Timer1-1 On at: " + readeeprom(20).substring(0 ,2) + ":" + readeeprom(24).substring(0 ,2) + ", Off at: " + readeeprom(28).substring(0 ,2) + ":" + readeeprom(32).substring(0 ,2);
                            sendUDP(msgtxt);    
                            textmsgtxt = "";    
            }
            if (textmsgtxt.indexOf("Timer12")>=0){ //Exemplo Timer12:HrsINI,HrsFIM (Timer12:20:50 21:05)

                            String Timer12hi = textmsgtxt.substring(8 ,10);
                            writeeeprom(162,Timer12hi);
                            String Timer12mni = textmsgtxt.substring(11 ,13);
                            writeeeprom(165,Timer12mni);                            
                            String Timer12hf = textmsgtxt.substring(14 ,16);
                            writeeeprom(168,Timer12hf);
                            String Timer12mnf = textmsgtxt.substring(17 ,19);
                            writeeeprom(171,Timer12mnf);
                            String msgtxt = "Timer1-2 ON at: " + readeeprom(162).substring(0 ,2) + ":" + readeeprom(165).substring(0 ,2) + ", OFF at: " + readeeprom(168).substring(0 ,2) + ":" + readeeprom(171).substring(0 ,2);
                            sendUDP(msgtxt);    
                            textmsgtxt = "";    
            }
            if (textmsgtxt.indexOf("Timer13")>=0){ //Exemplo Timer13:HrsINI,HrsFIM (Timer13:20:50,21:05)

                            String Timer13hi = textmsgtxt.substring(8 ,10);
                            writeeeprom(174,Timer13hi);
                            String Timer13mni = textmsgtxt.substring(11 ,13);
                            writeeeprom(177,Timer13mni);                            
                            String Timer13hf = textmsgtxt.substring(14 ,16);
                            writeeeprom(180,Timer13hf);
                            String Timer13mnf = textmsgtxt.substring(17 ,19);
                            writeeeprom(183,Timer13mnf);
                            String msgtxt = "Timer1-3 ON at: " + readeeprom(174).substring(0 ,2) + ":" + readeeprom(177).substring(0 ,2) + ", OFF at: " + readeeprom(180).substring(0 ,2) + ":" + readeeprom(183).substring(0 ,2);
                            sendUDP(msgtxt);    
                            textmsgtxt = "";    
                               
            }
            if (textmsgtxt.indexOf("Timer21")>=0){ //Exemplo Timer21:HrsINI,HrsFIM (Timer21:20:50,21:05)

                            String Timer21hi = textmsgtxt.substring(8 ,10);
                            writeeeprom(40,Timer21hi);
                            String Timer21mni = textmsgtxt.substring(11 ,13);
                            writeeeprom(44,Timer21mni);                            
                            String Timer21hf = textmsgtxt.substring(14 ,16);
                            writeeeprom(48,Timer21hf);
                            String Timer21mnf = textmsgtxt.substring(17 ,19);
                            writeeeprom(52,Timer21mnf);
                            String msgtxt = "Timer2-1 ON at: " + readeeprom(40).substring(0 ,2) + ":" + readeeprom(44).substring(0 ,2) + ", OFF at: " + readeeprom(48).substring(0 ,2) + ":" + readeeprom(52).substring(0 ,2);
                            sendUDP(msgtxt);    
                            textmsgtxt = "";        
                               
            }
            if (textmsgtxt.indexOf("Timer22")>=0){ //Exemplo Timer22:HrsINI,HrsFIM (Timer22:20:50,21:05)

                            String Timer22hi = textmsgtxt.substring(8 ,10);
                            writeeeprom(186,Timer22hi);
                            String Timer22mni = textmsgtxt.substring(11 ,13);
                            writeeeprom(189,Timer22mni);                            
                            String Timer22hf = textmsgtxt.substring(14 ,16);
                            writeeeprom(192,Timer22hf);
                            String Timer22mnf = textmsgtxt.substring(17 ,19);
                            writeeeprom(195,Timer22mnf);
                            String msgtxt = "Timer2-2 ON at: " + readeeprom(186).substring(0 ,2) + ":" + readeeprom(189).substring(0 ,2) + ", DesON at: " + readeeprom(192).substring(0 ,2) + ":" + readeeprom(195).substring(0 ,2);
                            sendUDP(msgtxt);    
                            textmsgtxt = "";        
                               
            }
            if (textmsgtxt.indexOf("Timer23")>=0){ //Exemplo Timer23:HrsINI,HrsFIM (Timer23:20:50 21:05)

                            String Timer23hi = textmsgtxt.substring(8 ,10);
                            writeeeprom(198,Timer23hi);
                            String Timer23mni = textmsgtxt.substring(11 ,13);
                            writeeeprom(201,Timer23mni);                            
                            String Timer23hf = textmsgtxt.substring(15 ,16);
                            writeeeprom(204,Timer23hf);
                            String Timer23mnf = textmsgtxt.substring(17 ,19);
                            writeeeprom(207,Timer23mnf);
                            String msgtxt = "Timer2-3 ON at: " + readeeprom(198).substring(0 ,2) + ":" + readeeprom(201).substring(0 ,2) + ", DesON at: " + readeeprom(204).substring(0 ,2) + ":" + readeeprom(207).substring(0 ,2);
                            sendUDP(msgtxt);    
                            textmsgtxt = "";        

            }
            if (textmsgtxt.indexOf("Timer31")>=0){ //Exemplo Timer31:HrsINI,HrsFIM (Timer31:20:50,21:05)

                            String Timer31hi = textmsgtxt.substring(8 ,10);
                            writeeeprom(60,Timer31hi);
                            String Timer31mni = textmsgtxt.substring(11 ,13);
                            writeeeprom(64,Timer31mni);                            
                            String Timer31hf = textmsgtxt.substring(14 ,16);
                            writeeeprom(68,Timer31hf);
                            String Timer31mnf = textmsgtxt.substring(17 ,19);
                            writeeeprom(72,Timer31mnf);
                            String msgtxt = "Timer3-1 ON at: " + readeeprom(60).substring(0 ,2) + ":" + readeeprom(64).substring(0 ,2) + ", DesON at: " + readeeprom(68).substring(0 ,2) + ":" + readeeprom(72).substring(0 ,2);
                            sendUDP(msgtxt);    
                            textmsgtxt = "";
            }              
            if (textmsgtxt.indexOf("Timer32")>=0){ //Exemplo Timer32:HrsINI,HrsFIM (Timer32:20:50 21:05)

                            String Timer32hi = textmsgtxt.substring(8 ,10);
                            writeeeprom(210,Timer32hi);
                            String Timer32mni = textmsgtxt.substring(11 ,13);
                            writeeeprom(213,Timer32mni);                            
                            String Timer32hf = textmsgtxt.substring(14 ,16);
                            writeeeprom(216,Timer32hf);
                            String Timer32mnf = textmsgtxt.substring(17 ,19);
                            writeeeprom(219,Timer32mnf);
                            String msgtxt = "Timer3-2 ON at: " + readeeprom(210).substring(0 ,2) + ":" + readeeprom(213).substring(0 ,2) + ", DesON at: " + readeeprom(216).substring(0 ,2) + ":" + readeeprom(219).substring(0 ,2);
                            sendUDP(msgtxt);    
                            textmsgtxt = "";
            }                  
            if (textmsgtxt.indexOf("Timer33")>=0){ //Exemplo Timer33:HrsINI,HrsFIM (Timer33:20:50 21:05)

                            String Timer33hi = textmsgtxt.substring(8 ,10);
                            writeeeprom(222,Timer33hi);
                            String Timer33mni = textmsgtxt.substring(11 ,13);
                            writeeeprom(225,Timer33mni);                            
                            String Timer33hf = textmsgtxt.substring(14 ,16);
                            writeeeprom(228,Timer33hf);
                            String Timer33mnf = textmsgtxt.substring(17 ,19);
                            writeeeprom(231,Timer33mnf);
                            String msgtxt = "Timer3-3 ON at: " + readeeprom(222).substring(0 ,2) + ":" + readeeprom(225).substring(0 ,2) + ", DesON at: " + readeeprom(228).substring(0 ,2) + ":" + readeeprom(231).substring(0 ,2);
                            sendUDP(msgtxt);    
                            textmsgtxt = "";    
                                                               
            }
            if (textmsgtxt.indexOf("SystemON")>=0){
                            onoff = "ON";
                            writeeeprom(243,onoff);
                            String msgtxt = "Sistema ON";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
            }
            if (textmsgtxt.indexOf("SystemOFF")>=0){
                            onoff = "OF";
                            writeeeprom(243,onoff);
                            String msgtxt = "Sistema OFF";
                            digitalWrite(Relay1, LOW);
                            digitalWrite(Relay2, LOW);
                            digitalWrite(Relay3, LOW);
                            sendUDP(msgtxt);
                            textmsgtxt = "";
             }
            if (textmsgtxt.indexOf("Pares1ON")>=0){
                            onoff = "ON";
                            writeeeprom(246,onoff);
                            String msgtxt = "S1-ON, pairdays Pares";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
            }
            if (textmsgtxt.indexOf("Pares1OFF")>=0){
                            onoff = "OF";
                            writeeeprom(246,onoff);
                            String msgtxt = "S1 Funcionamento Diário";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
             }

            if (textmsgtxt.indexOf("Pares2ON")>=0){
                            onoff = "ON";
                            writeeeprom(250,onoff);
                            String msgtxt = "S2-ON, pairdays Pares";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
            }
            if (textmsgtxt.indexOf("Pares2OFF")>=0){
                            onoff = "OF";
                            writeeeprom(250,onoff);
                            String msgtxt = "S2 Funcionamento Diário";
                             sendUDP(msgtxt);
                            textmsgtxt = "";
             }

            if (textmsgtxt.indexOf("Pares3ON")>=0){
                            onoff = "ON";
                            writeeeprom(253,onoff);
                            String msgtxt = "S3-ON, pairdays Pares";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
            }
            if (textmsgtxt.indexOf("Pares3OFF")>=0){
                            onoff = "OF";
                            writeeeprom(253,onoff);
                            String msgtxt = "S3 Funcionamento Diário";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
             }
                                   
            if (textmsgtxt.indexOf("Relay1ON")>=0){
                            onoff = "ON";
                            writeeeprom(234,onoff);
                            String msgtxt = "Temporizador 1 ON";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
            }
             if (textmsgtxt.indexOf("Relay1OFF")>=0){
                            onoff = "OF";
                            writeeeprom(234,onoff);
                            digitalWrite(Relay1, LOW);
                            String msgtxt = "Temporizador 1 OFF";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
            }  
             if (textmsgtxt.indexOf("Relay2ON")>=0){
                            onoff = "ON";
                            writeeeprom(237,onoff);
                            String msgtxt = "Temporizador 2 ON";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
            }
             if (textmsgtxt.indexOf("Relay2OFF")>=0){
                            onoff = "OF";
                            writeeeprom(237,onoff);
                            digitalWrite(Relay2, LOW);
                            String msgtxt = "Temporizador 2 OFF";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
            }
            if (textmsgtxt.indexOf("Relay3ON")>=0){
                            onoff = "ON";
                            writeeeprom(240,onoff);
                            String msgtxt = "Temporizador 3 ON";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
            }
             if (textmsgtxt.indexOf("Relay3OFF")>=0){
                            onoff = "OF";
                            writeeeprom(240,onoff);
                            digitalWrite(Relay3, LOW);                            
                            String msgtxt = "Temporizador 3 OFF";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
            }                    
            if (textmsgtxt.indexOf("Temp11ON")>=0){
                            onoff = "ON";
                            writeeeprom(75,onoff);
                            String msgtxt = "Temporizador 1-1 ON atdo";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
            }
            if (textmsgtxt.indexOf("Temp11OFF")>=0){  
                            onoff = "OF";
                            writeeeprom(75,onoff);
                            String msgtxt = "Temporizador 1-1 DesON atdo";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
            }
            if (textmsgtxt.indexOf("Temp12ON")>=0){
                            onoff = "ON";
                            writeeeprom(78,onoff);
                            String msgtxt = "Temporizador 1-2 ON atdo";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
            }
            if (textmsgtxt.indexOf("Temp12OFF")>=0){  
                            onoff = "OF";
                            writeeeprom(78,onoff);
                            String msgtxt = "Temporizador 1-2 DesON atdo";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
            }
            if (textmsgtxt.indexOf("Temp13ON")>=0){
                            onoff = "ON";
                            writeeeprom(81,onoff);
                            String msgtxt = "Temporizador 1-3 ON atdo";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
            }
            if (textmsgtxt.indexOf("Temp13OFF")>=0){  
                            onoff = "OF";
                            writeeeprom(81,onoff);
                            String msgtxt = "Temporizador 1-3 DesON atdo";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
            }                        
            if (textmsgtxt.indexOf("Temp21ON")>=0){
                            onoff = "ON";
                            writeeeprom(84,onoff);
                            String msgtxt = "Temporizador 2-1 ON atdo";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
            }
            if (textmsgtxt.indexOf("Temp21OFF")>=0){        
                            onoff = "OF";
                            writeeeprom(84,onoff);
                            String msgtxt = "Temporizador 2-1 DesON atdo";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
            }
            if (textmsgtxt.indexOf("Temp22ON")>=0){
                            onoff = "ON";
                            writeeeprom(87,onoff);
                            String msgtxt = "Temporizador 2-2 ON atdo";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
            }
            if (textmsgtxt.indexOf("Temp22OFF")>=0){        
                            onoff = "OF";
                            writeeeprom(87,onoff);
                            String msgtxt = "Temporizador 2-2 DesON atdo";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
            }
            if (textmsgtxt.indexOf("Temp23ON")>=0){
                            onoff = "ON";
                            writeeeprom(90,onoff);
                            String msgtxt = "Temporizador 2-3 ON atdo";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
            }
            if (textmsgtxt.indexOf("Temp23OFF")>=0){        
                            onoff = "OF";
                            writeeeprom(90,onoff);
                            String msgtxt = "Temporizador 2-3 DesON atdo";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
            }                        
            if (textmsgtxt.indexOf("Temp31ON")>=0){
                            onoff = "ON";
                            writeeeprom(93,onoff);
                            String msgtxt = "Temporizador 3-1 ON atdo";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
            }
            if (textmsgtxt.indexOf("Temp31OFF")>=0){        
                            onoff = "OF";
                            writeeeprom(93,onoff);
                            String msgtxt = "Temporizador 3-1 DesON atdo";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
            }
            if (textmsgtxt.indexOf("Temp32ON")>=0){
                            onoff = "ON";
                            writeeeprom(96,onoff);
                            String msgtxt = "Temporizador 3-2 ON atdo";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
            }
            if (textmsgtxt.indexOf("Temp32OFF")>=0){        
                            onoff = "OF";
                            writeeeprom(96,onoff);
                            String msgtxt = "Temporizador 3-2 DesON atdo";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
            }
            if (textmsgtxt.indexOf("Temp33ON")>=0){
                            onoff = "ON";
                            writeeeprom(99,onoff);
                            String msgtxt = "Temporizador 3-3 ON atdo";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
            }
            if (textmsgtxt.indexOf("Temp33OFF")>=0){        
                            onoff = "OF";
                            writeeeprom(99,onoff);
                            String msgtxt = "Temporizador 3-3 DesON atdo";
                            sendUDP(msgtxt);
                            textmsgtxt = "";
            }            
            if (textmsgtxt.indexOf("STTimer")>=0){ // Condição dos Temporizadores ON ou OFF
                            T11 = readeeprom(75);
                            msgtxt1 = "T1-1: " + T11;  
                            T12 = readeeprom(78);
                            msgtxt1 = msgtxt1 + " ,T1-2: " + T12;  
                            T13 = readeeprom(81);
                            msgtxt1 = msgtxt1 + " ,T1-3: " + T13;                                                        
                            T21 = readeeprom(84);
                            msgtxt2 = "T2-1: " + T21;  
                            T22 = readeeprom(87);
                            msgtxt2 = msgtxt2 + " ,T2-2: " + T22;  
                            T23 = readeeprom(90);
                            msgtxt2 = msgtxt2 + " ,T2-3: " + T23;    
                            T31 = readeeprom(93);
                            msgtxt3 = "T3-1: " + T31;  
                            T32 = readeeprom(96);
                            msgtxt3 = msgtxt3 + " ,T3-2: " + T32;  
                            T33 = readeeprom(99);
                            msgtxt3 = msgtxt3 + " ,T3-3: " + T33;                              
                            msgtxt = "Status Temporizadores: " + msgtxt1 + " - " + msgtxt2 + " - " + msgtxt3;
                            sendUDP(msgtxt);
                            textmsgtxt = "";
            }

            if (textmsgtxt.indexOf("Status")>=0){ // Condição do Sistema ON ou OFF

             
                            String msgtxt = "Sistema: " + readeeprom(243).substring(0 ,2) + ", Circuito 1: " + readeeprom(234).substring(0 ,2) + ", Circuito 2: " + readeeprom(237).substring(0 ,2) + ", Circuito 3: " + readeeprom(240).substring(0 ,2);
                             msgtxt = msgtxt + ", S1 pairdays Pares: " + readeeprom(246).substring(0 ,2);
                             msgtxt = msgtxt + ", S2 pairdays Pares: " + readeeprom(250).substring(0 ,2);
                             msgtxt = msgtxt + ", S3 pairdays Pares: " + readeeprom(253).substring(0 ,2);
                            sendUDP(msgtxt);    
                            textmsgtxt = "";              
            }

            if (textmsgtxt.indexOf("StartEndT1")>=0){ // Horario de funcionamento ON ou OFF
                            String msgtxt1 = "Timer1-1 ON: " + readeeprom(20).substring(0 ,2) + ":" + readeeprom(24).substring(0 ,2) + ", OFF: " + readeeprom(28).substring(0 ,2) + ":" + readeeprom(32).substring(0 ,2);
                            String msgtxt2 = "Timer1-2 ON: " + readeeprom(162).substring(0 ,2) + ":" + readeeprom(165).substring(0 ,2) + ", OFF: " + readeeprom(168).substring(0 ,2) + ":" + readeeprom(171).substring(0 ,2);
                            String msgtxt3 = "Timer1-3 ON: " + readeeprom(174).substring(0 ,2) + ":" + readeeprom(177).substring(0 ,2) + ", OFF: " + readeeprom(180).substring(0 ,2) + ":" + readeeprom(183).substring(0 ,2);
                            msgtxt = msgtxt1 + " - " + msgtxt2 + " - " + msgtxt3;                                                    
                            sendUDP(msgtxt);    
                            textmsgtxt = "";    
            }
            if (textmsgtxt.indexOf("StartEndT2")>=0){ // Horario de funcionamento ON ou OFF
           
                            String msgtxt1 = "Timer2-1 ON: " + readeeprom(40).substring(0 ,2) + ":" + readeeprom(44).substring(0 ,2) + ", OFF: " + readeeprom(48).substring(0 ,2) + ":" + readeeprom(52).substring(0 ,2);
                            String msgtxt2 = "Timer2-2 ON: " + readeeprom(186).substring(0 ,2) + ":" + readeeprom(189).substring(0 ,2) + ", OFF: " + readeeprom(192).substring(0 ,2) + ":" + readeeprom(195).substring(0 ,2);                          
                            String msgtxt3 = "Timer2-3 ON: " + readeeprom(198).substring(0 ,2) + ":" + readeeprom(201).substring(0 ,2) + ", OFF: " + readeeprom(204).substring(0 ,2) + ":" + readeeprom(207).substring(0 ,2);                            
                            msgtxt = msgtxt1 + " - " + msgtxt2 + " - " + msgtxt3;                                                    
                            sendUDP(msgtxt);    
                            textmsgtxt = "";    
            }

            if (textmsgtxt.indexOf("StartEndT3")>=0){ // Horario de funcionamento ON ou OFF
           
                            String msgtxt1 = "Timer3-1 ON: " + readeeprom(60).substring(0 ,2) + ":" + readeeprom(64).substring(0 ,2) + ", OFF: " + readeeprom(68).substring(0 ,2) + ":" + readeeprom(72).substring(0 ,2);
                            String msgtxt2 = "Timer3-2 ON: " + readeeprom(210).substring(0 ,2) + ":" + readeeprom(213).substring(0 ,2) + ", OFF: " + readeeprom(216).substring(0 ,2) + ":" + readeeprom(219).substring(0 ,2);
                            String msgtxt3 = "Timer3-3 ON: " + readeeprom(222).substring(0 ,2) + ":" + readeeprom(225).substring(0 ,2) + ", OFF: " + readeeprom(228).substring(0 ,2) + ":" + readeeprom(231).substring(0 ,2);                          
                            msgtxt = msgtxt1 + " - " + msgtxt2 + " - " + msgtxt3;                                                    
                            sendUDP(msgtxt);    
                            textmsgtxt = "";    
            }
                                   
  }

}

//----------------------------------------------------- Function that sends UDP msgtxt
void sendUDP(String msgtxt){
    // send back a reply, to the IP address and port we got the port from: 1 to remote port, 2 to server port

    if ((Udp.remotePort()) > 0){
    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
    Udp.println(msgtxt);
    Udp.endPacket();    
    }


    else {
    String myIP = readeeprom(0).substring(0, 14);
    portinf =  myIP.length();
    Serial.print("Comp IP Server: ");
    Serial.println(portinf);  
    if (portinf > 0) {
    serverport = readeeprom(120).substring(0, 4).toInt();
    char myIP1[15];
    //String myIP = readeeprom(0).substring(0, 14);
    myIP.toCharArray(myIP1, 15);          
    Udp.beginPacket(myIP1, serverport);
    Udp.println(msgtxt);
    Udp.endPacket();
    //portinf = 0;
    }
    }
    String textMsgOut = msgtxt;
    send_email(textMsgOut);
}

//***************************************************
void writeeeprom(int enderecoBase1, String &mensagem){ // Salva a string nos endereços de forma sequencial
   Serial.println (mensagem.length());
    Serial.println (EEPROM.length());
  if (mensagem.length()>EEPROM.length() || (enderecoBase1+mensagem.length()) >EEPROM.length() ){ // verificamos se a string cabe na memória a partir do endereço desejado
   Serial.println ("A sua String não cabe na EEPROM"); // Caso não caiba mensagem de erro é mostrada
  }      
   Serial.println (mensagem);
   Serial.println (readeeprom(enderecoBase1));
   
   String psswrd = readeeprom(enderecoBase1).substring(0, 6);//readeeprom(enderecoBase1);
  // psswrd.trim();
      Serial.println (psswrd);
//         int psswrd1 = mensagem;
//               Serial.println (psswrd1);  

 if(mensagem == psswrd) { // Economizar escritas de EEPROM (MAX: 100K)

    Serial.println ("Psswrds iguais, não escreve");
   }
  else { // Caso pass diferente e seja possível armazenar
    for (int i = 0; i<mensagem.length(); i++){
       EEPROM.write(enderecoBase1,mensagem[i]); // Escrevemos cada byte da string
de forma sequencial na memória
       enderecoBase1++; // Deslocamos endereço base em uma posição a cada byte salvo
    }
    EEPROM.write(enderecoBase1,'\0'); // Salvamos marcador de fim da string
    EEPROM.commit();
      Serial.println ("Escrito EEPROM");
  }
}
//******************************************************************
String readeeprom(int enderecoBase1){
  String mensagem="";
  if (enderecoBase1>EEPROM.length()){ // Se o endereço base for maior que o espaço
de endereçamento da EEPROM retornamos uma string vazia
    return mensagem;
  }
  else { // Caso contrário, lemos byte a byte de cada endereço e montamos uma nova
String
    char pos;
    do{
      pos = EEPROM.read(enderecoBase1); // Leitura do byte com base na posição atual
      enderecoBase1++; // A cada leitura incrementamos a posição a ser lida
      mensagem = mensagem + pos; // Montamos string de saída
    }
    while (pos != '\0'); // Fazemos isso até encontrar o marcador de fim de string
  }
  return mensagem; // Retorno da mensagem
}

//==============================================================

  void workingswitchs(){

                            Temp1 = readeeprom(234);
                            if (Temp1 == "ON") {
                              even_days1 = readeeprom(246);
                              if (even_days1 == "OF") {
                                  switch1();
                                }

                              if (even_days1 == "ON") {
                                if (pairdays == 2){
                                switch1();
                                }
                              }
                            }

                            Temp2 = readeeprom(237);
                            if (Temp2 == "ON") {

                              even_days2 = readeeprom(250);
                             if (even_days2 == "OF") {
                                switch2();
                                }
                             if (even_days2 == "ON") {
                                if (pairdays == 2){
                                switch2();
                                }
                              }
                            }

                            Temp3 = readeeprom(240);
                            if (Temp3 == "ON") {
                             
                              even_days3 = readeeprom(253);
                             if (even_days3 == "OF") {
                                switch3();
                                }
                              if (even_days3 == "ON") {
                                  if (pairdays == 2){
                                  switch3();
                                  }

                                }
                            }
   }
  //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  void switch1(){
 
                              Tmr11 = readeeprom(75);
                              if (Tmr11 == "ON") {
                              ligar11inihr = readeeprom(20).substring(0 ,2).toInt();
                              ligar11inimn = readeeprom(24).substring(0 ,2).toInt();
                              ligar11fimhr = readeeprom(28).substring(0 ,2).toInt();
                              ligar11fimmn = readeeprom(32).substring(0 ,2).toInt();
       
if ((hrs == ligar11inihr) && (mn == ligar11inimn) && (seg == 3)){
                                digitalWrite(Relay1, HIGH);
                                delay(5);
 
msgtxt = "Timer1-1 ligado entre:" + readeeprom(20).substring(0 ,2) + ":"
+ readeeprom(24).substring(0 ,2) + " e: " + readeeprom(28).substring(0 ,2) + ":
" + readeeprom(32).substring(0 ,2);
                                sendUDP(msgtxt);
                                }
 
if ((hrs == ligar11fimhr) && (mn == ligar11fimmn) && (seg == 3)){
                                digitalWrite(Relay1, LOW);
                                delay(5);
                                msgtxt = "Timer1-1 desligado";
                                sendUDP(msgtxt);                                
                                }
                            }
                            Tmr12 = readeeprom(78);
                            if (Tmr12 == "ON") {                            
                            ligar12inihr = readeeprom(162).substring(0 ,2).toInt();
                            ligar12inimn = readeeprom(165).substring(0 ,2).toInt();
                            ligar12fimhr = readeeprom(168).substring(0 ,2).toInt();
                            ligar12fimmn = readeeprom(171).substring(0 ,2).toInt();
                     if ((hrs == ligar12inihr) && (mn == ligar12inimn) && (seg == 3)){
                            digitalWrite(Relay1, HIGH);
                            delay(5);
                    msgtxt = "Timer1-2 ligado entre:" + readeeprom(162).substring(0 ,2) + ":" + readeeprom(165).substring(0 ,2) + " e: " + readeeprom(168).substring(0 ,2) + ":" + readeeprom(171).substring(0 ,2);
                            sendUDP(msgtxt);
                            }
                    if ((hrs == ligar12fimhr) && (mn == ligar12fimmn) && (seg == 3)){
                            digitalWrite(Relay1, LOW);
                            delay(5);
                            msgtxt = "Timer1-2 desON atdo";
                            sendUDP(msgtxt);                                
                            }
                            }
                            Tmr13 = readeeprom(81);
                            if (Tmr13 == "ON") {                            
                            ligar13inihr = readeeprom(174).substring(0 ,2).toInt();
                            ligar13inimn = readeeprom(177).substring(0 ,2).toInt();
                            ligar13fimhr = readeeprom(180).substring(0 ,2).toInt();
                            ligar13fimmn = readeeprom(183).substring(0 ,2).toInt();
                if ((hrs == ligar13inihr) && (mn == ligar13inimn) && (seg == 3)){
                            digitalWrite(Relay1, HIGH);
                            delay(5);
 msgtxt = "Timer1-3 ligado entre:" + readeeprom(174).substring(0 ,2) +
":" + readeeprom(177).substring(0 ,2) + " e: " + readeeprom(180).substring(0 ,2) +
":" + readeeprom(183).substring(0 ,2);
                            sendUDP(msgtxt);
                            }
         if ((hrs == ligar13fimhr) && (mn == ligar13fimmn) && (seg == 3)){
                            digitalWrite(Relay1, LOW);
                            delay(5);
                            msgtxt = "Timer1-3 desligado";
                            sendUDP(msgtxt);                                
                            }                                                        
                            }
  }

  //WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW

  void switch2(){

                         
                            Tmr21 = readeeprom(84);
                            if (Tmr21 == "ON") {
                            ligar21inihr = readeeprom(40).substring(0 ,2).toInt();
                            ligar21inimn = readeeprom(44).substring(0 ,2).toInt();
                            ligar21fimhr = readeeprom(48).substring(0 ,2).toInt();
                            ligar21fimmn = readeeprom(52).substring(0 ,2).toInt();
       if ((hrs == ligar21inihr) && (mn == ligar21inimn) && (seg == 3)){
                            digitalWrite(Relay2, HIGH);
                            delay(5);
    msgtxt = "Timer2-1 ligado entre:" + readeeprom(40).substring(0 ,2) + ":"
+ readeeprom(44).substring(0 ,2) + " e: " + readeeprom(48).substring(0 ,2) +
":" + readeeprom(52).substring(0 ,2);
                            sendUDP(msgtxt);                                
                            }
           if ((hrs == ligar21fimhr) && (mn == ligar21fimmn) && (seg == 3)){
                            digitalWrite(Relay2, LOW);
                            delay(10);
                            msgtxt = "Timer2-1 desligado";
                            sendUDP(msgtxt);                                
                            }
                            }
                            Tmr22 = readeeprom(87);
                            if (Tmr22 == "ON") {                            
                            ligar22inihr = readeeprom(186).substring(0 ,2).toInt();
                            ligar22inimn = readeeprom(189).substring(0 ,2).toInt();
                            ligar22fimhr = readeeprom(192).substring(0 ,2).toInt();
                            ligar22fimmn = readeeprom(195).substring(0 ,2).toInt();
    if ((hrs == ligar22inihr) && (mn == ligar22inimn) && (seg == 3)){
                            digitalWrite(Relay2, HIGH);
                            delay(5);
    msgtxt = "Timer2-2 ligado entre:" + readeeprom(186).substring(0 ,2) + ":"
+ readeeprom(189).substring(0 ,2) + " e: " + readeeprom(192).substring(0 ,2) +
":" + readeeprom(195).substring(0 ,2);
                            sendUDP(msgtxt);                                
                            }
                  if ((hrs == ligar22fimhr) && (mn == ligar22fimmn) && (seg == 3)){
                            digitalWrite(Relay2, LOW);
                            delay(10);
                            msgtxt = "Timer2-2 desligado";
                            sendUDP(msgtxt);                                
                            }
                            }
                            Tmr23 = readeeprom(90);
                            if (Tmr23 == "ON") {                            
                            ligar23inihr = readeeprom(198).substring(0 ,2).toInt();
                            ligar23inimn = readeeprom(201).substring(0 ,2).toInt();
                            ligar23fimhr = readeeprom(204).substring(0 ,2).toInt();
                            ligar23fimmn = readeeprom(207).substring(0 ,2).toInt();
         if ((hrs == ligar23inihr) && (mn == ligar23inimn) && (seg == 3)){
                            digitalWrite(Relay2, HIGH);
                            delay(5);
         msgtxt = "Timer2-3 ligado entre:" + readeeprom(198).substring(0 ,2) + ":"
+ readeeprom(201).substring(0 ,2) + " e: " + readeeprom(204).substring(0 ,2) +
":" + readeeprom(207).substring(0 ,2);
                            sendUDP(msgtxt);                                
                            }
      if ((hrs == ligar23fimhr) && (mn == ligar23fimmn) && (seg == 3)){
                            digitalWrite(Relay2, LOW);
                            delay(10);
                            msgtxt = "Timer2-3 desligado";
                            sendUDP(msgtxt);                                
                            }                                                                                      
                            }
  }
                         
//»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  void switch3() {

                            Tmr31 = readeeprom(93);
                            if (Tmr31 == "ON") {
                            ligar31inihr = readeeprom(60).substring(0 ,2).toInt();
                            ligar31inimn = readeeprom(64).substring(0 ,2).toInt();
                            ligar31fimhr = readeeprom(68).substring(0 ,2).toInt();
                            ligar31fimmn = readeeprom(72).substring(0 ,2).toInt();
     if ((hrs == ligar31inihr) && (mn == ligar31fimmn) && (seg == 3)){
                            digitalWrite(Relay3, HIGH);
                            delay(5);
     msgtxt = "Timer3-1 ligado entre:" + readeeprom(60).substring(0 ,2) + ":"
+ readeeprom(64).substring(0 ,2) + " e: " + readeeprom(68).substring(0 ,2) + ":"
+ readeeprom(72).substring(0 ,2);
                            sendUDP(msgtxt);                                
                            }
     
if ((hrs == ligar31fimhr) && (mn == ligar31fimmn) && (seg == 3)){
                            digitalWrite(Relay3, LOW);
                            delay(5);
                            msgtxt = "Timer3-1 desligado";
                            sendUDP(msgtxt);                                
                            }
                            }
                            Tmr32 = readeeprom(96);
                            if (Tmr32 == "ON") {                            
                            ligar32inihr = readeeprom(210).substring(0 ,2).toInt();
                            ligar32inimn = readeeprom(213).substring(0 ,2).toInt();
                            ligar32fimhr = readeeprom(216).substring(0 ,2).toInt();
                            ligar32fimmn = readeeprom(219).substring(0 ,2).toInt();
            if ((hrs == ligar32inihr) && (mn == ligar32fimmn) && (seg == 3)){
                            digitalWrite(Relay3, HIGH);
                            delay(5);
           msgtxt = "Timer3-2 ligado entre:" + readeeprom(210).substring(0 ,2) + ":"
+ readeeprom(213).substring(0 ,2) + " e: " + readeeprom(216).substring(0 ,2) + ":"
+ readeeprom(219).substring(0 ,2);
                            sendUDP(msgtxt);                                
                            }
            if ((hrs == ligar32fimhr) && (mn == ligar32fimmn) && (seg == 3)){
                            digitalWrite(Relay3, LOW);
                            delay(5);
                            msgtxt = "Timer3-2 desligado";
                            sendUDP(msgtxt);                                
                            }
                            }
                            Tmr33 = readeeprom(99);
                            if (Tmr33 == "ON") {                            
                            ligar33inihr = readeeprom(222).substring(0 ,2).toInt();
                            ligar33inimn = readeeprom(225).substring(0 ,2).toInt();
                            ligar33fimhr = readeeprom(228).substring(0 ,2).toInt();
                            ligar33fimmn = readeeprom(231).substring(0 ,2).toInt();
            if ((hrs == ligar33inihr) && (mn == ligar33fimmn) && (seg == 3)){
                            digitalWrite(Relay3, HIGH);
                            delay(1);
     msgtxt = "Timer3-3 ligado entre:" + readeeprom(222).substring(0 ,2) + ":"
+ readeeprom(225).substring(0 ,2) + " e: " + readeeprom(228).substring(0 ,2) + ":"
+ readeeprom(231).substring(0 ,2);
                            sendUDP(msgtxt);                                
                            }
          if ((hrs == ligar33fimhr) && (mn == ligar33fimmn) && (seg == 3)){
                            digitalWrite(Relay3, LOW);
                            delay(1);
                            msgtxt = "Timer3-3 desligado";
                            sendUDP(msgtxt);                                
                            }                            
                            }
  }
//SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS


/* Callback function to get the Email sending status */
void smtpCallback(SMTP_Status status){
  /* Print the current status */
  Serial.println(status.info());

  /* Print the sending result */
  if (status.success()){
    Serial.println("----------------");
    ESP_MAIL_PRINTF("Message sent success: %d\n", status.completedCount());
    ESP_MAIL_PRINTF("Message sent failled: %d\n", status.failedCount());
    Serial.println("----------------\n");
    struct tm dt;

    for (size_t i = 0; i < smtp.sendingResult.size(); i++){
      /* Get the result item */
      SMTP_Result result = smtp.sendingResult.getItem(i);
      time_t ts = (time_t)result.timestamp;
      localtime_r(&ts, &dt);

      ESP_MAIL_PRINTF("Message No: %d\n", i + 1);
      ESP_MAIL_PRINTF("Status: %s\n", result.completed ? "success" : "failed");
      ESP_MAIL_PRINTF("Date/Time: %d/%d/%d %d:%d:%d\n", dt.tm_year + 1900, dt.tm_mon +
1, dt.tm_mday, dt.tm_hour, dt.tm_min, dt.tm_sec);
      ESP_MAIL_PRINTF("Recipient: %s\n", result.recipients.c_str());
      ESP_MAIL_PRINTF("Subject: %s\n", result.subject.c_str());
    }
    Serial.println("----------------\n");

          // You need to clear sending result as the memory usage will grow up.
        smtp.sendingResult.clear();
  }
}

//==============================

void send_email( String textMsgOut ){   //void send_email( void ){
/* Declare the session config data */
  ESP_Mail_Session session;

//String textMsgOut;

    //send email
  Serial.println("Sending email...");
   Serial.println(textMsgOut);

    /* Set the callback function to get the sending results */
    smtp.callback(smtpCallback);

    /* Declare the ESP_Mail_Session for user defined session credentials */
    //ESP_Mail_Session session;
 

  /* Set the session config */
  session.server.host_name = SMTP_HOST;
  session.server.port = SMTP_PORT;
  session.login.email = AUTHOR_EMAIL;
  session.login.password = AUTHOR_PASSWORD;
  session.login.user_domain = "";

  /* Declare the message class */
  SMTP_Message message;

  /* Set the message headers */
  message.sender.name = "D1_Mini Switchs";
  message.sender.email = AUTHOR_EMAIL;
  message.subject = "Condition Reply";
  message.addRecipient("Mike", RECIPIENT_EMAIL);

    /* Enable the chunked data transfer with pipelining for large message if
server supported */
    message.enable.chunking = true;


  //Send raw text message
  String textMsg = "D1-MINI Repy: " + textMsgOut;

  message.text.content = textMsg.c_str();
  message.text.charSet = "us-ascii";
  message.text.transfer_encoding = Content_Transfer_Encoding::enc_7bit;
 
  message.priority = esp_mail_smtp_priority::esp_mail_smtp_priority_high;
  message.response.notify = esp_mail_smtp_notify_success |
esp_mail_smtp_notify_failure |
esp_mail_smtp_notify_delay;

  /* Set the custom message header */
  //message.addHeader("Message-ID: <abcde.fghij@gmail.com>");

  /* Connect to server with the session config */
  if (!smtp.connect(&session))
    return;

  /* Start sending Email and close the session */
  if (!MailClient.sendMail(&smtp, &message))
    Serial.println("Error sending Email, " + smtp.errorReason());

    // to clear sending result log
    // smtp.sendingResult.clear();

    ESP_MAIL_PRINTF("Free Heap: %d\n", MailClient.getFreeHeap());

   
}



Smart Android with Android 4.0 to 9

        -Install the PHP Server APK downloaded from:    APK PHP Server file
         (Server for PHP_1.17.2-arm.apk)


        - The PHP pages are installed in the folder "www/public" in the Smartphone 


After install the PHP Server and the files we can see the following menus:

 


The file "PHP_Files.zip" has all files


   You can view intired project in the next video or in Youtube


Comentários