ESP8266 (Primeros pasos)

Buenas, tengo un módulo ESP8266 (ESP-12-E) que llevo usando unos días.
Tengo una fuente de alimentación externa que alimenta el módulo y éste conectado a un Arduino Pro Micro de la siguiente forma

Fuente externa 7,5V → Reductor de tensión a 3,3V
Arduino Pro Micro alimentado a 7,5V
ESP-12-E alimentado a 3,3V
Todas las masas unidas

ESP-12-E:
RX → TX del Arduino
TX → RX del Arduino
EN → +Vcc (3,3V)
GPI00 → +3,3V
GPI015 → GND

El módulo venía con frecuencia 115200 pero la cambié a 19200 para evitar problemas con el Wifi y todo OK

El viernes conseguí la IP correctamente y enviar unos comandos a través del Mozilla. Al volver a enchufarlo ayer, ya no iba.
Hice un AT+RST y AT+RESTORE pero el viernes, después de ello, iba bien. No sé si tendrá algo que ver.

Ahora ya no va. ¿Alguna idea?
El código que estoy usando ahora mismo es el básico para establecer conexión y enviar comandos AT:

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

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

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

He ido probando de una en una las diferentes frecuencias y nada.
Alguna idea?
Gracias.

Puedes dar mas datos del Reductor de tensión a 3,3V?
Es un DC to DC?
La fuente de 7.5V que corriente entrega?
Probaste con un adaptador USB to SERIAL TTL 3.3V para conectarte directamente al ESP?

Buenas,
La fuente es de 7,5V y entrega hasta 3A
El reductor de tensión, si, es un DC DC
La entrega está conectada a 7,5V y a través de un potenciómetro regulo la tensión de salida a 3,3V
las masas ambas unidas (como todas las del sistema para que tengan la masa común)

No dispongo de USB/Serial TTL así que no, no he podido probar ésto

El módulo ESP12-E ha funcionado conectado como explico en el primer post. Después intenté cargar un programa para encender un led y se ha debido de “volver loco” (pego el programa más abajo).

Ahora cuando lo conecto, en el monitor serial aparecen un montón de caracteres constantemente, sin parar, como si estuviera “loco”

#include <SoftwareSerial.h>
 // arduino Rx (pin 8) ---- ESP8266 Tx
 // arduino Tx (pin 9) ---- ESP8266 Rx
SoftwareSerial esp8266(8,9); 

void setup()
{
 Serial.begin(19200);  // monitor serial del arduino
 esp8266.begin(19200); // baud rate del ESP8255
 
 pinMode(10,OUTPUT);
 digitalWrite(10,LOW);
 
// sendData("AT+RSTrn",2000);       resetear módulo
 sendData("AT+CWMODE=1rn",1000); // configurar como cliente
 sendData("AT+CWJAP=\"RED\",\"CONTRASEÑA\"rn",8000); //SSID y contraseña para unirse a red 
 sendData("AT+CIFSRrn",1000);    // obtener dirección IP
 sendData("AT+CIPMUX=1rn",1000); // configurar para multiples conexiones
 sendData("AT+CIPSERVER=1,80rn",1000);         // servidor en el puerto 80
}

void loop()
{
 if(esp8266.available())   // revisar si hay mensaje del ESP8266
 {
 if(esp8266.find("+IPD,")) // revisar si el servidor recibio datos
 {
 delay(1500); // esperar que lleguen los datos hacia el buffer
 int conexionID = esp8266.read()-48; // obtener el ID de la conexión para poder responder
 esp8266.find("led="); // bucar el texto "led="
 int state = (esp8266.read()-48); // Obtener el estado del pin a mostrar
 digitalWrite(10, state); // Cambiar estado del pin

while(esp8266.available()){
 char c = esp8266.read();
 Serial.print(c);
 }


 }
 }
}

/*
Enviar comando al esp8266 y verificar la respuesta del módulo, todo esto dentro del tiempo timeout
*/
void sendData(String comando, const int timeout)
{
 long int time = millis(); // medir el tiempo actual para verificar timeout
 
 esp8266.print(comando); // enviar el comando al ESP8266
 
 while( (time+timeout) > millis()) //mientras no haya timeout
 {
 while(esp8266.available()) //mientras haya datos por leer
 { 
 // Leer los datos disponibles
 char c = esp8266.read(); // leer el siguiente caracter
 Serial.print(c);
 }
 } 
 return;
}

Es es porque ahora esta en otra velocidad. Vuelve a 115k solo para probar si tiene mas sentido su respuesta serial.

He vuelto a poner a 11500K y nada

El módulo se “vuelve loco”, el led del módulo está continuamente encendido y en el monitor serial se ven continuamente letras y “no para” si no quito la alimentación.
El GPI00 lo he tenido que quitar porque sino aunque quite la VCC tampoco para…

Se quedaría así:
ESP-12-E:
RX → TX del Arduino
TX → RX del Arduino
EN → +Vcc (3,3V)
GPI015 → GND

… no entiendo muy bien qué sucede…

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

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

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 9600 sale esto (no para)

‚’ò�z—‹‡6’†šŠV–òøš‡Z–´’Ð8‚%û‡Ç°E‚‹Ž‘’ŽÒŽðšE’‹Ò—‡R†z‚ðšE‚Rž4Ò–EƒÃ‚
’‹Ò—E‚R†R’=Kš°†RžR‚2E‚ÒERv’ÇÒÒzðEVErÒÒGKRERERÒEVErÒÒGKRERERÒEÒERRR’EÒEVZrEVErÒÒGKRRRÒEVErÒ’EZÒE°ZrEVErÒÒGKREÒRv’‡EÒ‚

a 115200 no para
(no me deja copiar)

a 19200 no para

BbÂ…úeØÐPÊþ^X8Â�Ä^@’ŒR~К^XÃÂ�Xâ)[8Ðûñâ·AâÃëx蚉8˜‰8ÒxÂQjsVêÂTYÂ0œR:ÂÂÊ­aÂÂÐzÂÂÊ·aŠ¥ZÚRÊ’”çâ¡YÂÂÂ�–aÂÊíÎYÂÂ�@¨wêµNêÈ>ÂÁCâƒcÂÂ>ÂÂÊíIYÂÂ�¨wÈ>ÂBʨwÈÂÂ�íÂwê>c>ÂYÂÂwµ>Â>ÂÂÂwÈ>ÂÂʨwÈÂÂÂʨw>Â>Âʨê>â>¹�ÂwÈ>Â>ÂÂ�ÂwÈ>ÂÂʨwÈÂ>Âʨê>C>ÂÎÂwê>Â>B9�ÂwRÊçÂʨwÈÂ>ÂʨêR’–YÂÂwRÊçÂʨwÈÂÂÂʨêÈÂ>Âʨk>Â>ÂYÂÂwêÊ”ÂÂÂÂwÈÂÂÂʨwÈÂ>Âʨê>Â>ÂíB¨ê>â>¸�

Si lo pongo a 38400 no para pero sale esto:

b„HÈÈ))k%
H
N$ño!~!…•�1bæ¹i))©BoC­•ùïÃ.'úŒ'fçÿFùôBï)J
)%õ/©Bßo-'þ„Œ'tçÿCʤÄæyµˆk­PoÃ)BÙo)'b„^ÈÈ))k%
H
%òˆÈaåãÌÂæ¸i))¨¡oC¡•ùïÃ-'úŒ'fçýCÄ7Äæyµˆ)©BoÃ1%ùïC!$„™'fçýCÄuÄæyµˆk­BoÃ)Bùo)'ÐŒ'fçÿCÄ'Ôˆïó�7
Ì!#áÂ!®C†¤„¥Æ„HŠ()))%7J/9)))©Ð1öB­††„„„Ä„eŠ))))'ä7
Ì!#áÌ!®CŽ¤„¥Æ„H%9©)Š&Ì᥊)J(9©Š(
CÆ79©(Š'7Ìá¥(J))Š)
 ¤„)7)1†Š)
!Æ)J))Š)#„Š)J)ö„‹)
®Æ%/))Š)#„Š)J))„Š)
i%/)„
%éÞˆ'
k†„4)Š)#„Š)J)ö„Š(
®„%9©„„$Ìá¥))J))Š))
!¤„79©„„'7Ìá¥)/))Š)#„Š)7)á)õ)!ˆÎ&/­H)7)Â)Š7Ìá¥)J))Š)#„Š)J)B„Š)
CÆ79©)Š'Ìá¥))J)†„)(
b„HÈÈ)*k%
H
%ño!r„”«ÔNœüæ¹i))©BoC­•ùüÃ-'ðŒ'fäˆù÷Lï)J
)%õ/¨Bßo-'þ„Œ'tçÿCʤÄæyµˆk­BoÃ)BÙo)'ðŒ'tçÿCÊ„bùý�7
Ì!#áÂ!®C†¤„¥Æ„HŠ))))%7J/9)))©Ð1öB�†††„„Ä„Š))))'ê7
Ì!#áÂ!®Ei«-%7J/9)„L))Àˆˆ
)!„)J©Š)
®Æ%/)†Ä&á„Š)I))!))C„79©(Š$á„Š)J)B„))
C„79©)Š'7Ìá¥)J(†Ä(#„Š)7)B©Š)
CÆ79©)Š'á¥))J))!Š)
¤„)7(1)Š)
!Æ)/(†Ä)á„Š)7)ö©Š)
®Æ)/))Ä'à¥))J(9©Š)
CÆ$9©)Š'à¥))J)‡†()
!¤„79©„„(ÌáÆ)/)†Ä)#i4)©„)õ)!ˆÎ'.¬„‹)JH)Š$à§))J)†„))
#¤„)7)ö(Š7Ìá¥)J))Š))
#¤„)7)ö©Š¤„)7)ö)Š(
Ì®Æ%/)†Ä)á„Š(J))©))
¤„79©)Š'Íá¥)J))Š)
#†Š)J)B©Š)
CÆ%8¨„„'Í᥊)J((!Š)

Bueno, con paciencia, vuelve a empezar desde 115200 para abajo, velocidad x velocidad hasta que alguna responda. Si eso no va, yo compraría un USB to serial 3.3V Ojo que los hay de 5V.
A ver si alguien sugiere otra cosa.

Me sigue pasando lo mismo, "se vuelve loco" y no para de enviar letras...
A ver si a alguien más se le ocurre otra cosa
El USB serial para qué sería? para cargar el firmware? (eso se puede hacer a través de arduino no?)

Gracias

El módulo USB serial a 3.3V (no a 5V) es lo que necesitas para conectarte directamente y no a través de arduino. Puedes cambarle el firmware pero también puedes interactuar directamente con el ESP.
Cambiar el firmware no se puede hacer via arduino.

Yo estoy investigando un poco sobre el esp8266 ya que tengo muchas ganas de hace un poryecto con estos modulos, pero todavia no me llegaron. Pero dentro de lo que estuve leyendo encontre como actualizar el firmware mediante arduino. La verdad es que no se si funciona o no, yo lo tengo guardado en favoritos, igual junto con el esp pedi un USb a TTL (http://www.ebay.com/itm/400999252414)

Aca el tutorial, espero que te sirva http://www.instructables.com/id/Cargar-firmware-al-ESP8266-con-Arduino/?ALLSTEPS

Acá te explica como usar el IDE de Arduino para cargar directamente un firmware en el ESP8266. Es mas completo y usa una serie de librerías con mucho potencial:
http://fabricadigital.org/2015/11/programando-el-modulo-wifi-esp8266-con-arduino-ide/

Esta está más interesante:
http://polaridad.es/modulo-wifi-esp8266/

elcd:
Me sigue pasando lo mismo, "se vuelve loco" y no para de enviar letras...
A ver si a alguien más se le ocurre otra cosa
El USB serial para qué sería? para cargar el firmware? (eso se puede hacer a través de arduino no?)

Gracias

Ni te molestes en usar los comandos AT.
Usa el core de arduino/esp8266 como te indican antes. Pero debes poner almenos un zener entre el arduino y el rx del modulo. NO SON TOLERANTE A 5V. Se las aguantan pero no se sabe hasta cuando.

aca tienes un interfaz simple para ayudarte a programarlo poniendolo en modo programacion.

Buenas tardes, disculpen aprovecho que este post es reciente y están hablando del ESP8266.

Últimamente he estado leyendo de el y ya lo quiero probar :slight_smile: , he leído que se puede programar directamente desde el IDE de arduino al procesador que este trae sin necesidad de arduino usando el debido conversor serial-usb. Siendo ello así quisiera en un aplicación hacerlo funcionar con sleep cíclico es decir enviar un mensaje cada n segundos y volver a dormir para ahorrar batería los códigos que he visto desde el IDE solo prenden y apagan un LED el típico Blink si alguien sabe si se puede hacer, tiene algún link o ejemplo de código le agradecería me lo compartiera muy amables :smiley: .

firius2010:
Buenas tardes, disculpen aprovecho que este post es reciente y están hablando del ESP8266.

Últimamente he estado leyendo de el y ya lo quiero probar :slight_smile: , he leído que se puede programar directamente desde el IDE de arduino al procesador que este trae sin necesidad de arduino usando el debido conversor serial-usb. Siendo ello así quisiera en un aplicación hacerlo funcionar con sleep cíclico es decir enviar un mensaje cada n segundos y volver a dormir para ahorrar batería los códigos que he visto desde el IDE solo prenden y apagan un LED el típico Blink si alguien sabe si se puede hacer, tiene algún link o ejemplo de código le agradecería me lo compartiera muy amables :smiley: .

lee unos post anteriores y te enteras de todo.
Con respecto al sleep busca informacion en el foro de esp8266/arduino

Buenas,

Muchasg racias a todos.
He pedido unos modulos de TTL a USB de 3,3V para probar lo del firmware.
Escribiré en cuanto lo pruebe y lo reciba.
De momento no he conseguido nada más.

surbyte:
El módulo USB serial a 3.3V (no a 5V) es lo que necesitas para conectarte directamente y no a través de arduino. Puedes cambarle el firmware pero también puedes interactuar directamente con el ESP.
Cambiar el firmware no se puede hacer via arduino.

elcd:
Buenas,

Muchasg racias a todos.
He pedido unos modulos de TTL a USB de 3,3V para probar lo del firmware.
Escribiré en cuanto lo pruebe y lo reciba.
De momento no he conseguido nada más.

el firmware es solo para los comandos AT. si lo programas desde arduino se borra todo y ya no escucha comandos.
La ventaja desde arduino es que tienes acceso a funciones internas, como almacenar en la eeprom, guardar claves wifi e incluso llamadas a la API del nucleo.

maxid:
el firmware es solo para los comandos AT. si lo programas desde arduino se borra todo y ya no escucha comandos.
La ventaja desde arduino es que tienes acceso a funciones internas, como almacenar en la eeprom, guardar claves wifi e incluso llamadas a la API del nucleo.

Buenas,

He estado trastreando un poco y, con el USB-TTL he conseguido conectarme a la red WIFI mediante los comandos AT y cambiar la velocidad (ya que por defecto funcionaba a 115200 y lo he puesto a 19200).

Placa: ESP-12-E QIO L2
ESP8266MOD
AI-THINKER

Para los comandos AT y ver el famoso “ready” he utilizado el programa ESP8266 User Program Ver1.1.

Para cargar el firmware
Programa: Nodemcu
.bin: ai-thinker-v1.1.1.bin (en 0x00000)
Baudrate: 115200
Flash size: 4MByte
Flash speed: 40MHz
SPI Mode: QDIO

Pero, si conecto la placa a Arduino con el siguiente programa para ver el famoso “ready” y poder hacer lo mismo con los comandos AT; muchas veces no aparece el “ready” y no puedo hacer nada.
¿A qué puede ser debido?
Dejo el programa.

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

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

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

elcd:
Para los comandos AT y ver el famoso “ready” he utilizado el programa ESP8266 User Program Ver1.1.

bien, vamos por partes

el programa ESP8266 User Program Ver1.1 es una utilidad para probar el modulo evitandote tener el apunte con todos los comandos.

con tu arduino deberias programar el envio y recepcion de los comandos AT como lo hace la aplicacion.
con el codigo que muestras lo que haces es simplemente hacer el envio y eco del modulo pero quizas no veas nada porque falta enviar el caracter terminador que depende del firmware es un CR/FL o un CR solo, o un CTRL-Z

El ready no importa porque la inicializacion trae basura. lo que importa es que conteste OK al comando enviado sino no lo entendió o esta mal.

Pero te aconsejo algo, porque me arme una hermosa placa con arduino, eeprom extra y manejo de relés y termino no sirviendome, porque el firmware cuando le envias muchas secuencias seguidas se cuelga y empieza a no entender nada dando una respuesta “Busy…”. No se ahora con las nuevas versiones.

Lo mejor es instalar el core arduino/esp8266, sigue las intrucciones

Luego eliges la placa ESP8266 generic y empiezas a jugar con los ejemplos, Con respecto a un arduino tiene mas del triple de capacidad en memoria y procesador.

para programarlo solo debes armarte el circuito que puse antes y con un adaptador usb serie y listo. Antes de programar presionas el boton prog y reseteas, sueltas el boton prog y queda en modo programacion hasta que termina de cargar el sketch se resetea solo.

Recuerda que funciona a 3v3 por lo que debes tener precaucion de no conectar nada a 5v. Para adaptar las tensiones del puerto RX/TX colocas una resistencia de 1k y un zener de 3v3. Te dejo un circuito de ejemplo y una foto de una placa funcionando que maneja un buzzer, un rele y 2 leds

WP_20160211_11_26_32_Pro.jpg

Saludos,

Soy nuevo en el campo de la electronica, pero quiero aprender poco a poco y tengo un problema conectando un Arduino Nano a un modulo WIFI ESP8266, segui los pasos que encontre en youtube.

Tengo conectado el WIFI ESP8266 a una pila de 9V con un regulador LM1117 a 3.3V.
El Arduino Nano va conectado al pc por USB.
y las conexiones estan de la siguiente forma.

ESP8266 Arduino Nano Fuente-Externa-3.3V(LM1117)
GND <----------------------------->GND
Vcc <----------------------------->Vcc
RX <------------> D11
TX <------------> D10

La conexion es tal como esta en el video tutorial, solo que no conecto el ESP8266 directo al Arduino sino a una fuente aparte.

Utilizo el siguiente codigo

#include <SoftwareSerial.h>

SoftwareSerial mySerial(11, 10); // RX, TX

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  // set the data rate for the SoftwareSerial port
  mySerial.begin(9600);

}

void loop() { // run over and over
  if (mySerial.available()) {
    Serial.write(mySerial.read());
  }
  if (Serial.available()) {
    mySerial.write(Serial.read());
  }
}

Cuando abro el RealTerm y envio algun comando AT no devuelve nada, pero veo que el Modulo WIFI enciende la luz azul y la apaga, igualmente ocurre cuando envio desde el monitor serial del arduino.

Hice una actualizacion de Firmware desde el arduino usando el ESP Download Tool V2.4

hace todo el proceso y sale ok.

Pero cuando intento enviar comandos no ressponde nada.

No se que debo hacer o si alguien tiene un diagrama con el que le haya funcionado y un codigo para testear, les agradezco cualquier ayuda.

Te falta el terminador de linea