Arduino mega, envio de correo modulo esp8266

Hola,
Ya tengo un arduino mega con modulo esp8266 funcionando en mi casa para controlar el termostato/persianas/alarma (Si alguien quiere el proyecto lo puedo compartir).

Ahora me gustaria que fuera capaz de mandar correos electronicos. He buscado bastante por internet y no consigo encontrar nada que me pueda valer.
Por ejemplo:
-Libreria Adafruit_ESP8266-master.zip, no encuentro ejemplo send_email_smtp
-Ejemplo ESP8266_Gmail_Sender, en mi arduino no tengo la libreria #include <ESP8266WiFi.h>, en mi caso utilizo la libreria #include "ESP8266.h" con #include <SoftwareSerial.h>

Lo ideal seria utilizar una cuenta en GMAIL.
Llevo un par de dias buscando y no encuentro nada que me sirva ¿podeis orientarme?

Si hace falta, tambien puedo publicar mi proyecto entero.

Gracias de antemano.

Tienes un ejemplo en mi página
Usa la libreria Gsender

Gracias por responder.

He copiado los ficheros Gsender.h y Gsender.cpp donde tengo el proyecto.
Al realizar el #include "Gsender.h" y compilarlo aparece:

sketch\Gsender.h:10:30: fatal error: WiFiClientSecure.h: No such file or directory

¿Dónde puedo bajarme esta librería?

Hola,
No estoy muy seguro de lo que voy a decir.
La libreria WiFiClientSecure.h se encuenta dento de ESP8266WiFi.

En mi caso, utilizo la libreria ESP8266.h ¿debo incluir la libreria ESP8266WiFi en mi proyecto?

Los ficheros Gsender han de ponerse en el directorio \libraries y dentro de un directorio Gsender que tendrás que crear tu.

Hola,
Perdona, no te entiendo muy bien.
En mi ordenador, la librerias las tengo instaladas en el directorio:

C:\Users\mnoga\OneDrive\Documentos\Arduino\libraries

El programa que usa las librerias lo tengo localizado en:

C:\Users\mnoga\Desktop\Elegoo Super Starter Kit for UNO V1.0.2017.10.31\ESP8266_Gmail_Sender

¿Podrias ponerme un ejemplo de cual debería ser la estructura de directorios?

Mil gracias

No uses OneDrive para repositorio de Arduino.
Esta reportado que OneDrive crea problemas no resueltos por ahora por el IDE, habland de Agosto o Octubre 2018 para tener una solución, no se porqué.

Usa todo en otro directorio.

Mi estructura de directorios es "la normal"

C:/archivos de programa/arduino/libraries

Gracias, lo cambiare (el domingo) y os cuento.

Seguramente va a funcionar. Asi lo usamos todos.

Te recomiendo que pruebes este Send e-mail - NodeMCU with Mikroelektronika Clicks

Perdon, se envió el mensaje antes de tiempo:
He reinstalado arduino en otro ordenador, ahora las librerias las veo en:

C:\Users\Administrador\Documents\Arduino\libraries

Las librerias Gsender las he puesto en:

C:\Users\Administrador\Documents\Arduino\libraries\Gsender

En un programa de prueba tengo puesto:

#include "ESP8266.h"
#include <SoftwareSerial.h>
#include "Gsender.h"
SoftwareSerial softSerial(2, 3); // RX, TX
ESP8266 wifi(softSerial);
:
:

Al compilar vuelve a aparecer:

C:\Users\Administrador\Documents\Arduino\libraries\Gsender/Gsender.h:10:30: fatal error: WiFiClientSecure.h: No such file or directory

#include <WiFiClientSecure.h>

No se si la barra "/" tiene algo que ver....
No se, me da que tengo algun problema con la libreria esp8266...

¿Se os ocurre algo?
La libreria ESP8266.h la cogi de ITEADLIB_Arduino_WeeESP8266-master, lo mismo van por ahi los tiros...

Por cierto, si en el codigo pongo:
#include "ESP8266WiFi.h"

Tampoco me funciona, no encuentra esta libreria:

C:\Users\Administrador\Desktop\arduino\Elegoo Super Starter Kit for UNO V1.0.2017.10.31\termostato\ESP8266_web_server_NOOK\ESP8266_web_server_NOOK.ino:4:25: fatal error: ESP8266WiFi.h: No such file or directory

#include "ESP8266WiFi.h"

                      ^

compilation terminated.

Gracias de antemano por la ayuda.

C:\Users\Administrador\Documents\Arduino\libraries\Gsender/Gsender.h:10:30: fatal error: WiFiClientSecure.h: No such file or directory

Al final dice No such file or directory, no existe tal archivo o directorio.

Asi que ve a
C:\Users\Administrador\Documents\Arduino\libraries\Gsender

y comprueba que dentro tienes otra carpeta Gsender y ahi si estan los archivos
Lo que debes hacer es mover todo a

C:\Users\Administrador\Documents\Arduino\libraries\Gsender y no como esta ahora en

C:\Users\Administrador\Documents\Arduino\libraries\Gsender\Gsender

Hola,
La verdad es que lo veo bien, como dices:

C:\Users\Administrador\Documents\Arduino\libraries\Gsender>dir
El volumen de la unidad C no tiene etiqueta.
El número de serie del volumen es: B2F6-1B07

Directorio de C:\Users\Administrador\Documents\Arduino\libraries\Gsender

16/06/2018  23:04    <DIR>          .
16/06/2018  23:04    <DIR>          ..
05/10/2016  18:33             3.381 Gsender.cpp
16/06/2018  23:05             1.199 Gsender.h
              2 archivos          4.580 bytes
              2 dirs  129.837.862.912 bytes libres

C:\Users\Administrador\Documents\Arduino\libraries\Gsender>

Ve a esta página y descarga lo que hay en el botón "clone or download"
Descomprime el zip y copia todas las carpetas de Arduino-master\libraries a la carpeta libraries del Arduino.

Hola,

He hecho lo que comentaba jopapa, bajado las librerias y copiadas en:

C:\Users\Administrador\Documents\Arduino\libraries

Al compilar aparece el error:

Arduino:1.8.4 (Windows 7), Tarjeta:"Arduino/Genuino Uno"

In file included from C:\Users\Administrador\Documents\Arduino\libraries\ESP8266WiFi\src/WiFiClientSecureAxTLS.h:25:0,

                 from C:\Users\Administrador\Documents\Arduino\libraries\ESP8266WiFi\src/WiFiClientSecure.h:23,

                 from C:\Users\Administrador\Documents\Arduino\libraries\Gsender/Gsender.h:10,

                 from C:\Users\Administrador\Desktop\arduino\Elegoo Super Starter Kit for UNO V1.0.2017.10.31\termostato\ESP8266_web_server_NOOK\ESP8266_web_server_NOOK.ino:3:

C:\Users\Administrador\Documents\Arduino\libraries\ESP8266WiFi\src/WiFiClient.h:24:18: fatal error: memory: No such file or directory

 #include <memory>

                  ^

compilation terminated.

exit status 1
Error compilando para la tarjeta Arduino/Genuino Uno.

Este reporte podría tener más información con
"Mostrar salida detallada durante la compilación"
opción habilitada en Archivo -> Preferencias.

He buscado por internet y veo el siguiente comentario:

You need to understand there are two different ways of using the ESP8266 with Arduino:

-ESP8266 as a WiFi adapter controlled by a standard Arduino board. This is the way you're using it. This is most commonly done by controlling the ESP8266 running the AT firmware by sending serial commands but that is not the only option.
-Directly programming an ESP8266.

The ESP8266WiFi library can only be used with the esp8266 Arduino core:

to directly program the ESP8266 used in the second way listed above. You cannot use it on the Arduino Uno.

There is a library with a confusingly similar name:

(note capitalization difference!). That can be used on an Arduino Uno to control an ESP8266 running the AT firmware. The sketches written for the ESP8266WiFi library can not be used with the ESP8266wifi.

I actually recommend a different library for that configuration:
GitHub - bportaluri/WiFiEsp: Arduino WiFi library for ESP8266 modules

La verdad no logro entender bien lo que significa....en mi caso tengo arduino uno (o mega) + ESP8266 Módulo WIFI arduino PIC ESP-01 ESP01.

Un apunte, tengo dos tarjetas arduino, una mega que es donde tengo montado todo, y una arduino uno que es donde estoy probando todo esto.

Hola,
Antes de nada agradecer a surbyte la ayuda prestada a traves de los mensajes.
Finalmente el problema está en que no utilizo la forma estandar de programación con el módulo esp-01. Lo normal es utilizar un módulo conversor usb para programar el módulo wifi esp-01, en este caso, se suele usar la librería ESP8266WiFi.h

En mi caso, utilizo la librería ESP8266.h que viene en Adafruit_ESP8266-master.zip, esta librería lo que hace es enviar comandos AT al módulo wifi, la programación se hace directamente en arduino (uno, mega….).
Por si a alguien le interesa, la esp-01 suele venir programada para trabajar a 115200 baudios, a esta velocidad tanto arduino mega y uno no trabajan bien, para ello utilizo el siguiente programa para bajarle la velocidad:

#include <SoftwareSerial.h>
SoftwareSerial BT1(2, 3); // RX | TX

void setup()
 {  Serial.begin(115200);
    BT1.begin(115200);
 }

void loop()
 {  String B= "." ;
    if (BT1.available())
        { char c = BT1.read() ;
          Serial.print(c);
        }
    if (Serial.available())
        {  char c = Serial.read();
           BT1.print(c);
        }
  }

A través del monitor serie se pueden introducir comandos para bajar la velocidad.
Hay muchas páginas donde encontrar documentación de comandos AT.
El siguiente comando no me funciona : AT+CIOBAUD=9600

El siguiente comando deja el módulo inservible: AT+IPR=9600

El comando que utilizo para bajar la velocidad a 9600 es: AT+UART_DEF=9600,8,1,0,0

La solucion que voy a intentar dar a mi problema es realizar una función con comandos AT para enviar correos con GMAIL, hay un par de ejemplos en internet. Si consigo que me funcione os mando el ejemplo.

Un saludo

Hola,
He ido avanzando y ya consigo enviar correos desde Arduino UNO, previamente me he creado una cuenta en smtp2go. El caso es que consigo enviar correos desde el monitor Serie, sin embargo no consigo enviar el correo poniendo los comandos desde el programa Arduino.

Introduciendo los comandos desde el monitor Serie puedo enviar correos, utilizo el siguiente programa:

#include <SoftwareSerial.h>
SoftwareSerial BT1(2, 3); // RX | TX

void setup()
 {  Serial.begin(9600);
    BT1.begin(9600);
 }

void loop()
 {  String B= "." ;
    if (BT1.available())
        { char c = BT1.read() ;
          Serial.print(c);
        }
    if (Serial.available())
        {  char c = Serial.read();
           BT1.print(c);
        }
  }

Los comandos que introduzcon en el monitor serie son:

AT+CWJAP="MXXXX_XXXX","XXXXXXXm7nujvTyT3us"     //Cambiado algunos caracteres
AT+CIFSR
AT+CIPSTART="TCP","mail.smtp2go.com",2525

AT+CIPSEND=19
EHLO 192.168.1.55
AT+CIPSEND=12
AUTH LOGIN
AT+CIPSEND=26
XX5vZ2FsZXNAYYYhaWwuZZZZ //Base 64, cambiados caracteres usuario
AT+CIPSEND=18
ZZZZTAAAR2YYYjdp //Base 64, cambiados caracteres contraseña personal
AT+CIPSEND=32
MAIL FROM:<xxxxxxxx@gmail.com> //Cambiados caracteres para no proporcionar información personal
AT+CIPSEND=30
RCPT To:<xxxxxxxx@gmail.com>     //Cambiados caracteres para no proporcionar información personal
AT+CIPSEND=6
DATA
AT+CIPSEND=17
Testing Success
AT+CIPSEND=3
.
AT+CIPSEND=6
QUIT

Con este programa consigo enviar correos, por el monitor serie voy viendo las respuestas del servidor smtp

Como introducir comandos por el monitor serie no es muy operativo he realizado el siguiente programa para automatizarlo, sin embargo el correo no llega.

#include <SoftwareSerial.h>
 
 
 
SoftwareSerial softSerial(2, 3); // RX, TX

void envioCorreo(){
  Serial.println("Intentando conexion smptp");
  softSerial.print("AT+CWJAP=\"XXXXXXX_XXXX\",\"XXXXXXXm7nujvTyT3us\""); //Cambiado algunos caracteres para no publicar datos mios
  delay(6000);
  softSerial.println("AT+CIFSR");
  softSerial.println("AT+CIPSTART=\"TCP\",\"mail.smtp2go.com\",2525");
  delay(2000);
  softSerial.println("AT+CIPSEND=19");
  delay(2000);
  softSerial.println("EHLO 192.168.1.55");
  delay(2000);
  softSerial.println("AT+CIPSEND=12");
  delay(2000);
  softSerial.println("AUTH LOGIN");
  delay(2000);

softSerial.println("AT+CIPSEND=26");
delay(2000);
softSerial.println("XX5vZ2FsZXNAYYYhaWwuZZZZ"); //Base 64  //Cambiado algunos caracteres para no publicar datos mios
delay(2000);
softSerial.println("AT+CIPSEND=18");
delay(2000);
softSerial.println("ZZZZTAAAR2YYYjdp");  //Base 64 //Cambiado algunos caracteres para no publicar datos mios
delay(2000);
softSerial.println("AT+CIPSEND=32");
delay(2000);
softSerial.println("MAIL FROM:<xxxxxxxx@gmail.com>"); //Cambiado algunos caracteres para no publicar datos mios
delay(2000);
Serial.println("Por la mitad");
softSerial.println("AT+CIPSEND=30");
delay(2000);
softSerial.println("RCPT To:<xxxxxxxx@gmail.com>"); //Cambiado algunos caracteres para no publicar datos mios
delay(2000);
softSerial.println("AT+CIPSEND=6");
delay(2000);
softSerial.println("DATA");
delay(2000);
softSerial.println("AT+CIPSEND=17");
delay(2000);
softSerial.println("Testing Success");
delay(2000);
softSerial.println("AT+CIPSEND=3");
delay(2000);
softSerial.println('.');
delay(2000);
softSerial.println("AT+CIPSEND=6");
delay(2000);
softSerial.println("QUIT");
Serial.println("Fin");
}
 
void setup()
{
 //  Serial.begin(9600);
   softSerial.begin(9600);
   Serial.print("setup begin\r\n");
  envioCorreo();
}
 
void loop()
 {  
 }

El problema de hacerlo asi, es que no salen por pantalla las respuestas del servidor smtp, por lo que no se si hay algo que no le gusta. Lo que si veo con un scaneador de la red que el modulo se conecta a la wifi.

¿Alguna idea?

El comentario que he puesto en el void setup ();
// Serial.begin(9600);

Lo he puesto de prueba, siempre lo pruebo con eso descomentado...

Hola,
Ya he conseguido poder enviar correos desde Arduino, adjunto el programa:

#include "ESP8266.h"
#include <SoftwareSerial.h>
SoftwareSerial softSerial(2, 3); // RX, TX
ESP8266 wifi(softSerial);

const char* SSID = "XXXXXX";
const char* PASSWORD = "XXXXXX";

void arrancarWifi(){
   wifi.restart();
   delay(3000);
   if (wifi.setOprToStationSoftAP()) {
      Serial.print("to station + softap ok\r\n");
   }
   else {
      Serial.print("to station + softap err\r\n");
   }
 
   if (wifi.joinAP(SSID, PASSWORD)) {
      Serial.print("Join AP success\r\n");
      Serial.print("IP: ");
      Serial.println(wifi.getLocalIP().c_str());
   }
   else {
      Serial.print("Join AP failure\r\n");
   }
 
   if (wifi.enableMUX()) {
      Serial.print("multiple ok\r\n");
   }
   else {
      Serial.print("multiple err\r\n");
   }
 
   if (wifi.startTCPServer(92)) {
      Serial.print("start tcp server ok\r\n");
   }
   else {
      Serial.print("start tcp server err\r\n");
   }
 
   if (wifi.setTCPServerTimeout(10)) {
      Serial.print("set tcp server timout 10 seconds\r\n");
   }
   else {
      Serial.print("set tcp server timout err\r\n");
   }
 
   Serial.println("setup end\r\n");  
}

void envioCorreo(){
  Serial.println("Intentando conexion smptp");
  delay(3000);
  //Serial1.println("AT+CIFSR");
  softSerial.println("AT+CIPSTART=0,\"TCP\",\"mail.smtp2go.com\",2525");
  delay(2000);
  softSerial.println("AT+CIPSEND=0,19");
  delay(2000);
  softSerial.println("EHLO 192.168.1.55");
  delay(2000);
  softSerial.println("AT+CIPSEND=0,12");
  delay(2000);
  softSerial.println("AUTH LOGIN");
  delay(2000);
  softSerial.println("AT+CIPSEND=0,26");
  delay(2000);
  softSerial.println("XXXXXX"); //Usuario en smtp en codificado en base64
  delay(2000);
  softSerial.println("AT+CIPSEND=0,18");
  delay(2000);
  softSerial.println("XXXXXXX");  //contraseña smtp codificado en base64
  delay(2000);
  softSerial.println("AT+CIPSEND=0,32");
  delay(2000);
  softSerial.println("MAIL FROM:<correo@correo.com>"); //Cambiado algunos caracteres para no publicar datos mios
  delay(2000);
  Serial.println("Por la mitad");
  softSerial.println("AT+CIPSEND=0,30");
  delay(2000);
  softSerial.println("RCPT To:<correo@correo.com>"); //Cambiado algunos caracteres para no publicar datos mios
  delay(2000);
  softSerial.println("AT+CIPSEND=0,6");
  delay(2000);
  softSerial.println("DATA");
  delay(2000);
  softSerial.println("AT+CIPSEND=0,11");
  delay(2000);
  softSerial.println("Alarma ON");
  delay(2000);
  softSerial.println("AT+CIPSEND=0,3");
  delay(2000);
   softSerial.println('.');
  delay(2000);
  softSerial.println("AT+CIPSEND=0,6");
  delay(2000);
  softSerial.println("QUIT");
  Serial.println("Fin");
  softSerial.println("AT+CIPCLOSE=0");
}
 
void setup()
{
   Serial.begin(9600);
   softSerial.begin(9600);
   //Serial1.begin(9600);
   Serial.print("setup begin\r\n");
   arrancarWifi();
   delay(3000);
   envioCorreo();
}
 
void loop()
 {  
 }

La sintaxis:
AT+CIPSEND=0,32
Significa mandar un mensaje de 32 bytes por el canal 0, para sacar el numero de bytes a enviar hay que realizar la siguiente regla: "caracteres a enviar"+2

Un saludo