Conectar ESP8266EX a Arduino.

Hola, después de buscar por el foro y por webs durante unos cuantos días, ya recurro a poner un post a ver si consigo solucionarlo.

El problema es que cuando conecto el ESP8266EX al arduino UNO, no consigo comunicarme con él correctamente.

Cuando sigo el 90% de los manuales que he encontrado en internet, me dicen que es tal que así:

Diagrama del ESP8266EX:

Diagrama de montaje entre arduino y ESP8266EX:

Código que subo al arduino UNO:

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

void setup()
  {  Serial.begin(9600);
     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);
         }
   }

Una vez hecho esto, entro el en Monitor Serie del IDE de Arduino, pongo el primer

MIra, no soy un experto en esos módulos, pero he peleado con algunos otros similares. En general los módulos de comunicación se llevan mejor con pines de comunicacion. Si ves en tu Arduino, veras que 0 y 1 tanto en el Arduino UNO como el MEGA son de comunicacion, RX y TX, pero 2 y 3 no lo son. Eso explicaría la mitad de tu experiencia. Ahora bien, si necesitas usar el Monitor Serial, entonces no puedes usar los pines 0 y 1. Si tienes un Arduuino MEGA podrías probar con los 14 y 15 y ver que pasa.

Saludos y espero que soluciones los inconvenientes.!!

Acabo de probar con los puertos 14 y 15 con un arduino MEGA:

pongo el código:

#include <SoftwareSerial.h>
SoftwareSerial ESP(15, 14); // RX | TX

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

void loop()
  {
     // Repetir lo recibido por el ESP8266 hacia el monitor serial
     if (ESP.available())
         { char c = ESP.read() ;
           Serial.print(c);
         }

     // Repetir lo recibido por el monitor serial hacia el ESP8266
     if (Serial.available())
         {  char c = Serial.read();
            ESP.print(c);
         }
   }

y me sigue dando el mismo error:

Arduino:1.8.2 (Windows 7), Tarjeta:"Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

El Sketch usa 3870 bytes (1%) del espacio de almacenamiento de programa. El máximo es 253952 bytes.
Las variables Globales usan 297 bytes (3%) de la memoria dinámica, dejando 7895 bytes para las variables locales. El máximo es 8192 bytes.
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_getsync(): timeout communicating with programmer
Ha ocurrido un error mientras se enviaba el sketch

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

Por lo tanto, cuando pongo los pines de comunicación del ESP8266EX en los pines 2 y 3, me deja subir el sketch perfectamente pero luego no comunico con el ESP8266EX desde el Monitor Serie.

Si pongo los pines “0 y 1” o “14 y 15” que ambos son RX y TX, y conecto el pin RESET con la masa común, entonces si que comunico por Monitor Serie, pero no sube el sketch, me da el mismo errorantes descrito.

¿¿¿Alguna idea???

Gracias!

Confundes muchas cosas!
Primero el ESP es 3.3V y no debes usar ni los 3.3V del UNO o los del MEGA para alimentarlo. Usa un AMS1117 de 3.3V para esa tarea o compra una fuente externa. Hoy venden ese módulo listo para conectarlo a los 5V y obtener 3.3V pero con los 200mA necesarios.
El UNO/MEGA solo entregan 60mA maximo por la salida 3.3V, asi que OJO!!!

Luego sigue siendo 3.3V por lo que la comunicación del TX del UNO/MEGA y de cualquier pin del UNO hacia el ESP debe usar adaptador de nivel. Sea con resistencias, diodo sener, integrados, o transitores Mosfet.

No vi nada de eso en tu esquema y/o explicacion, asi que si te funciona alegrate.

Con todo eso bien, aun queda algo.
Si usas el monitor serie, no puedes cablear nada en 0/1 del UNO/Mega
La mayoría de los tutoriales con UNO y ESP usan SoftwareSerial.
Con Mega puedes disponer de 3 puertos mas los adaptadores de nivel.

Confundes muchas cosas!
Primero el ESP es 3.3V y no debes usar ni los 3.3V del UNO o los del MEGA para alimentarlo. Usa un AMS1117 de 3.3V para esa tarea o compra una fuente externa. Hoy venden ese módulo listo para conectarlo a los 5V y obtener 3.3V pero con los 200mA necesarios.
El UNO/MEGA solo entregan 60mA maximo por la salida 3.3V, asi que OJO!!!

Luego sigue siendo 3.3V por lo que la comunicación del TX del UNO/MEGA y de cualquier pin del UNO hacia el ESP debe usar adaptador de nivel. Sea con resistencias, diodo sener, integrados, o transitores Mosfet.

No vi nada de eso en tu esquema y/o explicacion, asi que si te funciona alegrate.

Con todo eso bien, aun queda algo.
Si usas el monitor serie, no puedes cablear nada en 0/1 del UNO/Mega
La mayoría de los tutoriales con UNO y ESP usan SoftwareSerial.
Con Mega puedes disponer de 3 puertos mas los adaptadores de nivel.

Finalmente tu ultimo código
El MEGA tiene 4 puertos.
El puerto qu usas se llama Serial1 y ya esta definido, no debes usar SoftwareSerial.

void setup()
  {  Serial.begin(9600);
     Serial3.begin(9600);  // aca esta conectado el ESP con los adaptadores de nivel
  }

void loop()
  {
     // Repetir lo recibido por el ESP8266 hacia el monitor serial
     if (Serial3.available())
         { char c = Serial1.read() ;
           Serial.print(c);
         }

     // Repetir lo recibido por el monitor serial hacia el ESP8266
     if (Serial.available())
         {  char c = Serial.read();
            Serial3.print(c);
         }
   }

14,15 TX, RX Serial3
16,17 TX, RX Serial2
18,19 TX, RX Serial1

te sugiero que con el FTDI, le cargues al modulo un firmware nuevo de los comandos AT, eso te resuelve mucho porque increiblemente hace que el modulo arranque con los 3.3V del Arduino y sus 60mA, a mi me funciono hacer eso, el resto es lo mismo, monta y conecta a a 3 y2 recuerda que el que sea el trasmisor del modulo va al receptor y viceversa

surbyte:
Confundes muchas cosas!
Primero el ESP es 3.3V y no debes usar ni los 3.3V del UNO o los del MEGA para alimentarlo. Usa un AMS1117 de 3.3V para esa tarea o compra una fuente externa. Hoy venden ese módulo listo para conectarlo a los 5V y obtener 3.3V pero con los 200mA necesarios.
El UNO/MEGA solo entregan 60mA maximo por la salida 3.3V, asi que OJO!!!

He puesto una fuente de alimentación externa de 3.3V y creo que 700mA. Como está puesto en el esquema.

surbyte:
Luego sigue siendo 3.3V por lo que la comunicación del TX del UNO/MEGA y de cualquier pin del UNO hacia el ESP debe usar adaptador de nivel. Sea con resistencias, diodo sener, integrados, o transitores Mosfet.

¿¿qué tipo de resistencias debería poner y dónde???

surbyte:
No vi nada de eso en tu esquema y/o explicacion, asi que si te funciona alegrate.

Con todo eso bien, aun queda algo.
Si usas el monitor serie, no puedes cablear nada en 0/1 del UNO/Mega
La mayoría de los tutoriales con UNO y ESP usan SoftwareSerial.

Con Mega puedes disponer de 3 puertos mas los adaptadores de nivel.

Cuales son esos 3 puertos que dispongo en el Mega y qué son los adaptadores de nivel?? imagino que pueda usar resistencias “que tengo de todo tipo” en vez de adaptadores de nivel no??

GRACIAS

rvinaso:
te sugiero que con el FTDI, le cargues al modulo un firmware nuevo de los comandos AT, eso te resuelve mucho porque increiblemente hace que el modulo arranque con los 3.3V del Arduino y sus 60mA, a mi me funciono hacer eso, el resto es lo mismo, monta y conecta a a 3 y2 recuerda que el que sea el trasmisor del modulo va al receptor y viceversa

Muchas gracias! ayer intenté durante un par de horas sin éxito actualizar el firmware de mi ESP desde arduino uno y mega, ya que el chip FTDI aún no me ha llegado de china. Me dejaron uno pero ya tuve que devolverle.

he actualizado el firmware del ESP a la versión “v0.9.2.2 AT Firmware.bin” con la aplicación ESP8266 Flash Downloader, me llega al 99% y luego me pone “Leaving…Failed to leave Flash mode” pero por lo que he visto por ahí es que está el firmware cargado con éxito. Pero sigo luego conectándolo con el código:

#include <SoftwareSerial.h>
SoftwareSerial BT1(3, 2); // 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);
        }
  }

con el esquema:

entro en el Monitor Serie, apago y enciendo la fuente de alimentacíón externa y sigue sin aparecerme el famoso Ready.

Pero si cargo un sketch vacío, y cambio el montaje poniendo el RX del ESP al RX del arduino UNO “pin 0” y del TX de ESP al TX del arduino UNO “pin 1” y conecto el pin “RESET” del arduino UNO al GRD común de la protoboard “compartido con el GND del arduino UNO y de la alimentación externa de 3.3v que también está conectada a la protoboard” entonces sí que funciona en el monitor serie y me aparece el tan esperado “Ready” al apagar y encender la fuente externa de 3.3v y funcionan hasta los comandos AT, pero no puedo conectar desde el sketch de arduino para hacer las funciones deseadas con el ESP.

¿¿Alguna idea??

GRACIAS!

surbyte:
Confundes muchas cosas!
Primero el ESP es 3.3V y no debes usar ni los 3.3V del UNO o los del MEGA para alimentarlo. Usa un AMS1117 de 3.3V para esa tarea o compra una fuente externa. Hoy venden ese módulo listo para conectarlo a los 5V y obtener 3.3V pero con los 200mA necesarios.
El UNO/MEGA solo entregan 60mA maximo por la salida 3.3V, asi que OJO!!!

Luego sigue siendo 3.3V por lo que la comunicación del TX del UNO/MEGA y de cualquier pin del UNO hacia el ESP debe usar adaptador de nivel. Sea con resistencias, diodo sener, integrados, o transitores Mosfet.

No vi nada de eso en tu esquema y/o explicacion, asi que si te funciona alegrate.

Con todo eso bien, aun queda algo.
Si usas el monitor serie, no puedes cablear nada en 0/1 del UNO/Mega
La mayoría de los tutoriales con UNO y ESP usan SoftwareSerial.
Con Mega puedes disponer de 3 puertos mas los adaptadores de nivel.

Finalmente tu ultimo código
El MEGA tiene 4 puertos.
El puerto qu usas se llama Serial1 y ya esta definido, no debes usar SoftwareSerial.

void setup()

{  Serial.begin(9600);
    Serial3.begin(9600);  // aca esta conectado el ESP con los adaptadores de nivel
  }

void loop()
  {
    // Repetir lo recibido por el ESP8266 hacia el monitor serial
    if (Serial3.available())
        { char c = Serial1.read() ;
          Serial.print(c);
        }

// Repetir lo recibido por el monitor serial hacia el ESP8266
    if (Serial.available())
        {  char c = Serial.read();
            Serial3.print(c);
        }
  }





![|500x252](https://cdn-reichelt.de/bilder/web/xxl_ws/B300/ARDUINO_MEGA_A03.png)

14,15 TX, RX Serial3
16,17 TX, RX Serial2
18,19 TX, RX Serial1

Si conecto del pin del ESP8266 TX y del RX al Serial1 "pin 18 TX y pin 19 RX" o Serial2 "pin 16 TX y pin 17 RX" o Serial3 "pin 14 TX y pin 15 RX" no consigo que aparezca el "Ready" en ningún momento, pero si lo conecto al pin pin 0 RX y al pin 1 TX del Arduino MEGA sí que me funciona y me conecta, me aparece el Ready perfectamente. Pero... ¿cómo puedo referirme a los puertos RX y TX 0 y 1 del arduino mega desde el sketch??

GRACIAS

Mezcláis Serial1 con Serial3 en el Sketch del Mega

ElEspanol:
Mezcláis Serial1 con Serial3 en el Sketch del Mega

¿¿dónde ves tú que se haya mezclado el Serial1 con el Serial3 del MEGA??

Porque yo he probado como puso surbyte que creo que es la manera correcta, aunque sigue sin funcionar:

14,15 TX, RX Serial3
16,17 TX, RX Serial2
18,19 TX, RX Serial1

GRACIAS!

void setup()
  {  Serial.begin(9600);
     Serial3.begin(9600);  // aca esta conectado el ESP con los adaptadores de 
void loop()
  {
     // Repetir lo recibido por el ESP8266 hacia el monitor serial
     if (Serial3.available())
         { char c = Serial1.read() ;                           <-----------------aqui
           Serial.print(c);
         }

     // Repetir lo recibido por el monitor serial hacia el ESP8266
     if (Serial.available())
         {  char c = Serial.read();
            Serial3.print(c);
         }
   }

Miratelo bien. Se lee de Serial1, pero se debe leer de Serial3

Bueno por fín lo he SOLUCIONADO.... para el que le esté pasando con el ESP8266 como a mí, que sólo le funcione cuando conecta el ESP-01 del pin RX al "pin 0 RX del arduino" y del pin TX al "pin 1 TX del arduino". Que pruebe a poner unas resistencias como en la foto:

De esta manera sacamos dos tercio del votaje que tiene el pin. Es decir... si lo conectamos al pin directamente sin resistencias, este pin creo entender que da 5v y por eso da problemas... al poner tres resistencias, sacamos dos tercios del valor del pin, por lo que quedaría en 3.3V.

Sé que no será exáctamente así, pero sólo sé que me ha funcionado y por fin puedo encender y apagar el dichoso led del arduino desde mi móvil.

GRACIAS A TODOS POR VUESTRA INESTIMABLE AYUDA.