Artículos recientes

Novedades

Tutorial ESP8266 Parte I

Tutorial ESP8266 Parte I

EL ESP8266 es un chip que gracias a la comunidad, sus características y un gran precio ha logrado convertirse en uno de los adaptadores Wifi más populares, y es que este chip alberga gran potencia en un pequeño tamaño.

¿Qué es el ESP8266?

-Soporta el protocolo 802.11 b/g/n
-Capacidad para Wi-Fi Direct (P2P), Soft-AP
-Tiene integrado el stack del protocolo TCP/IP
-Tiene un núcleo Diamond Standard Core (LX3) hecho por Tensilica
-Su núcleo de arquitectura RISC 32bits corre a 80Mhz
-64KBytes de RAM de instrucciones
-96KBytes de RAM de datos
-Tiene GPIOs, I2C, ADC, SPI, PWM, y más: http://www.esp8266.com/wiki/doku.php?id=feature_set.
-Los módulos cuentan con una memoria flash SPI Winbond W25Q40BVNIG
-Los ESP8266 son fabricados por Espressif
-Los módulos que usan este chip son de varios fabricantes y vienen en diferentes formatos.

Módulos con ESP8266

El ESP8266 está incluido en una gran variedad de módulos de diferentes formas y formatos.

En este tutorial básico vamos a trabajar con el ESP-01, uno de los más conocidos, este módulo cuenta con los componentes necesarios para que solamente alimentes el módulo y lo empieces a utilizar.

Firmware para el ESP8266

El ESP-01 viene inicialmente con el “firmware AT”, con el cual puedes usarlo como un adaptador wifi-serial, usando un microcontrolador externo como un Arduino para controlarlo y comunicarse con la red inalámbrica.

Como cualquier microcontrolador se puede cambiar el firmware del ESP8266 y usar cualquiera de los disponibles, entre los más destacables están, uLUA, microPython, y hasta programas hechos en Arduino.

Conexiones del ESP-1

La conexión es bien sencilla solamente se necesita alimentar el módulo, conectar el pin Rx y Tx serial, y conectar el pin CH_PD a 3.3 para activar el chip.

Tomar en cuenta lo siguiente al usar el módulo:

-El ESP8266 se alimenta con 3.3V, ¡no usar 5V!
-El ESP8266 NO tiene entradas tolerantes a 5V, así que necesitas convertir el nivel de las entradas si quieres comunicarte con dispositivos de 5V
-Durante los periodos de comunicación inalámbrica el ESP8266 puede necesitar hasta 250mA, por lo que sin una buena fuente de alimentación el ESP8266 se puede resetear. Si este es el caso utilizar un capacitor en las entradas de alimentación o una fuente de mayor potencia.

Usando el Firmware AT

El firmware AT que viene por defecto en el ESP-01 es el ai-thinker V0.9.2.4. 

Utilización de los comandos:

TipoEjemploDescripción
PruebaAT+CMD=?Retorna los posibles valores que puede tomar
ConsultaAT+CMD?Retorna el valor actual del parametro
EstablecerAT+CMD=ParametroEstablece el valor del parametro de usuario
EjecutarAT+CMDEjecuta comandos sin parametros de usuario

Por defecto se utiliza un baud rate de 9600.

Después de cada comando, el ESP8266 espera los caracteres especiales de nueva linea <CR><LF> para ejecutar el comando.

Lista de comandos:

ComandoRespuestaFunción
AT - Probar iniciación correcta
ATOKPrueba si el módulo responde correctamente
AT+RST - Reinicia el módulo
AT+RSTOKResetéa el módulo
AT+CWMODE - Modo Wifi
AT+CWMODE=?+CWMODE:(1-3)
OK
Lista los modos validos
AT+CWMODE?+CWMODE:modo
OK
Pregunta en que modo AP esta actualmente el módulo
AT+CWMODE=modoOKEstablece el módulo en el modo dado
1 = Modo estación (cliente)
2 = Modo AP (huésped)
3 = Modo AP + Estación (modo dual)
AT+CWLAP - Lista APs disponibles
AT+CWLAPAT+CWLAP:ecn,ssid,rssi,mac
OK
Lista los Acess Points disponibles para conectarse.
ecn: codificación, puede ser:
0 = Abierto
1 = WEP
2 = WPA PSK
3 = WPA2 PSK
4 = WPA WPA2 PSK
ssid: String que contiene el SSID del AP
rssi: Fuerza de la señal
mac: String que contiene la dirección MAC
AT+CWLAP=ssid,mac,ch+CWLAP:ecn,ssid,rssi,mac
OK
Busca Acess Points disponibles para conectarse con las condiciones especificadas
AT+CWJAP - Unirse a un Access Point
AT+CWJAP?+ CWJAP:ssid
OK
Imprime el SSID al que el módulo esta conectado
AT+CWJAP=ssid,pwdOKEl módulo se conecta al la red con el nombre ssid indicado y la contraseña pwd suministrada
AT+CWQAP - Desconectarse de una Access Point
AT+CWQAPOKSe desconecta de la red que esta actualmente conectado
AT+CWSAP - Configurar el softAP del módulo
AT+CWSAP?+CWSAP:ssid,pwd,ch,ecn
OK
Pregunta la configuración actual del softAP
AT+CWSAP=ssid,pwd,ch,ecnOKConfigura el softAP con
ssid: String con el nombre de la red
pwd: Contraseña, no mayor a 64 caracteres
ch: Canal inalámbrico
ecn: Tipo de codificación
1 = Abierto
2 = WPA_PSK
3 = WPA2_PSK
4 = WPA_WPA2_PSK
AT+CIPSTATUS - Información acerca de la coneción
AT+CIPSTATUSSTATUS:status
+CIPSTATUS:id,type,addr,port,tetype
OK
status:
2 = Se obtuvo IP
3 = Conectado
4 = Desconectado
id: ID de la conexión en caso de multiconexión (1-4)
type: Tipo de conexión, "TCP" o "UDP"
addr: Dirección IP de la conexión
port: Numero del puerto
tetype:
0 = El módulo corre como cliente
1 = El módulo corre como servidor
AT+CIPMUX - Habilitar o deshabilitar multiples conexiones
AT+CIPMUX=modeOKmode:
0 = Conexión unica
1 = Múltiples conexiones, hasta 4
AT+CIPMUX?+CIPMUX:mode
OK
Imprime el mode, el modo de conexión actual
AT+CIPSTART - Establece una conexión TCP o registra un puerto UDP e inicia la conexión
AT+CIPSTART=type,addr,portOKEmpieza una conexión como cliente (en modo conexión única)
type: puede ser "TCP" o "UDP"
addr: String que contenga la dirección IP remota
port: String que contenga el puerto remoto
AT+CIPSTART=id,type,addr,portOKEmpieza una conexión como cliente (En modo conexión múltiple)
id: ID de la conexión (1-4)
AT+CIPSTART=?[+CIPSTART:(id)(“type”),(“ip address”),(port)]
OK
Lista los posibles comandos
AT + CIPCLOSE - Cierra la conexión TCP o UDP
AT+CIPCLOSE=?OK
AT+CIPCLOSE=idOKCierra la conexión TCP o UDP con el ID "id" en modo conexión múltiple
AT+CIPCLOSEOKCierra la conexión TCP o UDP para modo de conexión única
AT+CIPSEND - Enviar datos
AT+CIPSEND=?OK
AT+CIPSEND=lengthSEND OKEstablece la longitud de datos a enviarse (máximo 2048). Para un envío normal (modo conexión única)
AT+CIPSEND=id,lengthSEND OKEstablece la longitud de datos a enviarse en la conexión número "id". Para un envío normal (modo conexión múltiple)
AT+CIPSENDEnvía datos sin adornos cada 20ms. El módulo retorna ">" después ejecutar el comando, si se recibe el comando "+++" se regresa al modo comando.
AT+CIFSR - Obtener la dirección IP local
AT+CIFSR=?OK
AT+CIFSR+CIFSR:ip
OK
Retorna la dirección IP local del módulo como cliente.
AT+CIFSERVER - Configurar como servidor
AT+CIPSERVER=mode[,port]OKConfigura el módulo como servidor donde el
modo:
0 = Borrar servidor
1 = Crear servido
puerto: numero del puerto, por defecto es el 333
AT+CIOBAUD Cambiar la velocidad de transmisión serial
AT+CIOBAUD=?+CIOBAUD:(9600-921600)
OK
Nos informa que las velocidades de transmisión permitidas están en este rango
AT+CiOBAUD?+CIOBAUD:baudrate
OK
Nos indica que el módulo está actualmente configurado a 'baudrate'
AT+CIOBAUD=baudrateOKConfigura la velocidad de transmisión a 'baudrate'

Para la lista completa de comandos visita: at_commands

Pruebas básicas con Arduino

Vamos a realizar unas pruebas en las que el módulo estará conectado a un puerto serial por software del Arduino, el puerto serial por hardware lo utilizaremos para comunicarnos con el Arduino via monitor serial.

Para esta prueba vamos a necesitar un módulo ESP-1, un protoboard, cables dupont, resistencias y un Arduino UNO r3.

Conectamos como se muestra en la imagen:

Ahora cargamos el siguiente código en el arduino.

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

Ahora vamos a abrir el monitor serial en el IDE del Arduino y configuramos los finales de linea a NL & CR, y el baud rate a 9600 como se muestra en la imagen:

Ahora para probar que todo funciona correctamente vamos a resetear el módulo, para esto conectamos el pin RST a tierra y luego lo desconectamos, cuando lo desconectemos lo siguiente debería aparecer.

Los primeros caracteres son parte de un mensaje del bootloader que no vamos a ver por el momento, se muestran así porque estan en otro baudrate. La siguiente linea que esta entre '[ ]' es el fabricante y la versión de los códigos AT que está cargada. Cuando el módulo transmita "ready" significa que esta listo para recibir comandos.

Probemos con el comando AT, este modo retorna "OK" si todo está en orden.

Ahora vamos a configurar el módulo para se conecte a una red wifi de nuestra casa y empieze a recibir datos:

El módulo solamente será cliente de una red inalámbrica existente por lo establecemos el modo del módulo a estación (cliente), enviamos el comando:

AT+CWMODE=1

Este comando nos retorna "OK" si todo esta correcto, o "no change" si el módulo ya se encontraba en ese modo. El modo se queda grabado aunque se desenergize el módulo.

Ahora vamos a ver las redes inalambricas disponibles enviando:

AT+CWLAP

Ese comando nos retorna una lista con: el tipo de codificación, el nombre de la red, intensidad de señal, dirección MAC del AP, de la siguiente manera.

+CWLAP:(4,"Naylamp",-55,"0a:18:d6:99:59:47",6)
+CWLAP:(2,"VecinoWifi",-78,"10:fe:ed:7a:a9:42",6)
+CWLAP:(3,"Anonymous-Pro",-92,"c4:17:fe:8a:2d:24",11)
OK

Ahora vamos a conectarnos a una de esas redes, para ello enviamos el siguiente comando con el nombre de red seguido por la contraseña, cada dato tipo String siempre va entre comillas:

AT+CWJAP="Naylamp","hail_hydra"

Si después de unos momentos nos responde con "OK" todo salio bien, sino revisa que hayas puesto bien el nombre y contraseña de la red.

Ahora vamos a iniciar un servidor en el módulo. Primero activamos el modo de multiconexión

AT+CIPMUX=1

Luego que nos responda "OK" iniciamos el servidor y le asignamos el número de servicio 1, este servidor correrá en el puerto 80. Este puerto es el mismo que usan los navegadores al solicitar una página web, por lo que podremos probarlo en el siguiente paso.

AT+CIPSERVER=1,80

Ahora vamos a obtener la dirección IP que tiene asignada el módulo en nuestra red local. Para esto usamos lo siguiente.

AT+CIFSR

El módulo nos responderá con una dirección IP. En mi caso fue la 192.168.88.15 si introducimos esta dirección IP en la barra URL de un navegador web como Google Chrome sucede el navegador le solicita la página web al módulo, para esto envia una serie de datos que vamos a poder ver desde el monitor serial, será algo como esto:

Link
+IPD,0,380:GET / HTTP/1.1
Host: 192.168.88.15
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: es,en-US;q=0.8,en;q=0.6

OK
Link

En el navegador seguira esperando una respuesta (una página web) del módulo, pero como no esta programado para responder no cargará nada. En el monitor serial, el texto de arriba significa que se solicitó información (mediante el método http GET), la dirección a la que va dirigida, tipo de conexión, tipo de archivo que espera recibir, tipo de cliente (navegador) desde el cual se hizo la solicitud e idioma. 

Ahora intentemos en el navegador con la siguiente dirección, reemplazando 192.168.88.15 con la dirección que hayas obtenido antes.

192.168.88.15/hola_mundo

En el monitor serial obtendremos:

Link
+IPD,0,380:GET /Hola_mundo HTTP/1.1
Host: 192.168.88.15
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: es,en-US;q=0.8,en;q=0.6

OK
Link

En el texto recibido de arriba fijate en la línea que contiene +IPD, en ahi se encuentra el texto que enviamos desde el navegador. Ahora podemos pasar información al módulo mediante el navegador web.

Controlando un led desde el navegador

Vamos a implementar un interpretador de comandos en el Arduino para controlar un LED desde el navegador.

Cargamos en el arduino el siguiente programa:

#include <SoftwareSerial.h>
// arduino Rx (pin 2) ---- ESP8266 Tx
// arduino Tx (pin 3) ---- ESP8266 Rx
SoftwareSerial esp8266(3,2);
void setup()
{
Serial.begin(9600); // monitor serial del arduino
esp8266.begin(9600); // baud rate del ESP8255

pinMode(13,OUTPUT);
digitalWrite(13,LOW);

sendData("AT+RST\r\n",2000); // resetear módulo
sendData("AT+CWMODE=1\r\n",1000); // configurar como cliente
sendData("AT+CWJAP=\"SSID\",\"PASSWORD\"\r\n",8000); //SSID y contraseña para unirse a red
sendData("AT+CIFSR\r\n",1000); // obtener dirección IP
sendData("AT+CIPMUX=1\r\n",1000); // configurar para multiples conexiones
sendData("AT+CIPSERVER=1,80\r\n",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(13, state); // Cambiar estado del pin
while(esp8266.available()){
char c = esp8266.read();
Serial.print(c);
}

//responder y cerrar la conexión para que el navegador no se quede cargando
// página web a enviar
String webpage = "";
if (state==1) webpage += "<h1>LED_13 = encendido!</h1>";
else { webpage += "<h1>LED_13 = apagado!</h1>";}

// comando para enviar página web
String comandoWebpage = "AT+CIPSEND=";
comandoWebpage+=conexionID;
comandoWebpage+=",";
comandoWebpage+=webpage.length();
comandoWebpage+="\r\n";
sendData(comandoWebpage,1000);
sendData(webpage,1000);

// comando para terminar conexión
String comandoCerrar = "AT+CIPCLOSE=";
comandoCerrar+=conexionID;
comandoCerrar+="\r\n";
sendData(comandoCerrar,3000);
}
}
}
/*
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;
}

Lo que hace el programa es automaticamente conectarse a una red inalambrica de nombre SSID y con contraseña PASSWORD. Luego incia un servidor en el puerto 80. Algo nuevo en este programa es que cuando recibe la solicitud del navegador el módulo le contesta con un pequeño mensaje que se visualiza como pagina web en el navegador, esto lo hace con la funcion AT+CIPSEND. 

Podemos verificar la ip asignada al módulo desde el monitor serial del arduino, en mi caso es el 192.168.88.41. Con esta dirección puedo controlar al LED 13 del arduino desde el navegador usando la subdirecciónes

192.168.88.41/led=0 para apagar el LED.

192.168.88.41/led=1 para encender el LED.

Con este tutorial hemos aprendido a usar el arduino en conjunto con el ESP-1 para hacer un pequeño y simple servidor embebido.

Este fue solo un ejemplo y hay muchas cosas por mejorar como: solo ejecutar comandos necesarios al inicio, algunos no necesitan ejecutarse cada vez que se inicia el módulo. Mejorar los tiempos de respuesta para que sea inmediato. También se puede añadir funciones adicionales como mostrar los estados de los pines o del ADC en la página web. Una interfaz con botones para controlar el arduino.

En este tutorial solo vimos conectividad wifi en una red local, pero con los mismos principios se puede conectar el módulo a internet y asi tener realmente un sistema con internet de las cosas.

42 Comments

    • Avatar
      Marvin Fuenmayor
      nov 16, 2016

      Hola, excelente tu información. Solo tengo unas pregunta, si el firmware del ESP es modificado para usarlo solo a el para controlar directamente sus pines de I/O, es posible restaurar de nuevo al firmware original? Para usar el propio ESP, es necesario modificar su firmware o es posible programarlo y acceder a sus pines sin necesidad de modificar o cambiar el firmware x otro???Gracias y saludos.

      • Avatar
        Naylamp
        dic 2, 2016

        Hola Marvin, Para controlar los pines GPIO es mejor cambiar el firmware por otro, como por ejemplo el LUA o usar al ESP8266 como un microcontrolador como se explica en > nuestro tutorial en dónde se programa desde el IDE de arduino . Y para regresar a usar comandos AT tienes que cargar el firmware correspondiente.

        • Avatar
          Marvin Fuenmayor
          ene 26, 2017

          Gracias x tu respuesta.Saludos.

    • Avatar
      Alejandro MOLINARI
      dic 5, 2016

      Hola, muy buena info, y te hago una consulta, tengo mi modulo esp8266 lo probé ni bien lo compre y todo Ok, luego de eso no se realmente que hice donde erre, pero ahora no tengo comunicación con el modulo, sabrías decirme si hay alguna manera física de comprobar la comunicación con el eh probado cargándole nuevo firmware, reiniciando, cambie los Baudios, me esta dando a la idea que erre en alguna conexión que no recuerdo y queme la comunicación. Bueno agradecere si alguien tiene algun truquito de como revisarlo sin empezar a desoldar chips...

      • Avatar
        Naylamp
        dic 14, 2016

        Hola Alejandro, si no te responde los comandos AT podría ser por la velocidad, intenta probar con otra velocidad, Si has logrado cargar un firmware nuevo entonces los pines de comunicación están bien, para cargar el firmware se usa el RX y TX los mismos que son para comunicarse con comandos AT. En internet puedes encontrar varias versiones del firmware prueba con diferentes.

    • Avatar
      julio
      ene 12, 2017

      hola,gracias por la información. Le hago una consulta,tengo mi modulo y quisiera saber si este modulo sirve para controlar el arduino de manera remota, es que tengo 5 sensores de humedad y necesito controlar todo de manera remota . Gracias

      • Avatar
        Naylamp
        feb 18, 2017

        Hola Julio, Si es posible controlar remotamente tu arduino, lo puedes hacer como servidor web (último ejemplo) pero tienes que configurar tu Router (abrir un puerto de tu router que direccione a tu arduino). O también puedes programar tu arduino como cliente web pero tendrás que crearle un servicio en un servidor externo (consultar: Tutorial Arduino y ESP8266 como cliente web).

    • Avatar
      manuel
      feb 6, 2017

      Hola me ha sido muy útil la información. Gracias por este magnífico tuto. Quería saber si hay alguna forma de poder guardar en memoria el estado del Led, y cuando do se des o negro el dispositivo y se vuelve a conectar a la corriente que tome el valor que tenia al desconectarse. Gracias

      • Avatar
        Naylamp
        feb 18, 2017

        Hola Manuel, tienes que ir guardando el valor del estado cada cierto tiempo en la eeprom del Arduino, y al iniciar el programa inicializar el estado con el valor guardado.

    • Avatar
      Marcio Cabanhas
      feb 17, 2017

      Cara muito bom seu blog, resolveu minha duvido e meu projeto esta agora funcionando. Muito obrigado.

    • Avatar
      Oscar Musayon
      feb 19, 2017

      Saludos cordiales. Muy interesante la información publicada por ustedes, les felicito. Por favor ojalá tengan la amabilidad de ayudarme con este escenario: Quiero capturar una huella digital con el lector que ustedes comercializan (compatible con Arduino) y enviar la información digital de la misma de forma inalámbrica hacia una pc en donde se guardará en una base de datos. 1. ¿Este módulo me puede servir? 2. Si es así ¿cuál sería el alcance máximo? y si no ¿hay otro dispositivo similar con más alcance? Gracias por la respuesta.

      • Avatar
        Naylamp
        mar 25, 2017

        Hola Oscar, el alcance de los módulo ESP8266 son similares al de una router básico, menos de 100m sin obstáculos, pero básicamente depende que haya señal wifi en donde vas a usar. En tu caso sería mejor usar el ESP como cliente y enviar los datos directamente a la base de datos a través de internet. Si lo único que deseas es establecer comunicación inalámbrica con la PC puedes usar un módulo bluetooth o módulos NRF24L01.

    • Avatar
      martin sanchez
      mar 5, 2017

      Hola, muchas gracias por el espacio! la verdad esta todo de lujo, lo unico tuve 2 problemas. El 1ero fue que sino colocaba mi programa en 19200 baudios no andaba nada (hay algun incomveniente con eso?) Después, si bien el 1er programa anduvo de lujo (es decir sin problemas) cuando quieroe correr el 2do programa, desde ya modificandole los baudios desde los 9600 que ustedes usan hasta los 19200, en la compilación me tira un error en la final donde se coloca la contraseña y el nombre de la red.El error es el sigueinte:
      exit status 1
      inconsistent user-defined literal suffixes 'SSID' and 'PASSWORD' in string literal
      para ser mas claro la fila que tira el error dice:
      sendData("AT+CWJAP="SSID","PASSWORD"rn",8000); //SSID y contraseña para unirse a red
      Ahora, si lo modifico de forma que quede de la siguiente forma el error desaparece:
      sendData("AT+CWJAP='SSID','PASSWORD'rn",8000); //SSID y contraseña para unirse a red
      es decir, le saque las comillas al nombre de la red y a la contraseña, no así a las que están después de rn. De esta forma el código carga pero cuando en el serial le quiero poner AT+CIFSR para que me tire el ip no responde. Tampoco se prende ni apaga el led al mandarle al navegador mi ip seguido de /led=0 o /led=1
      No se si fue claro o si me falto especificar info, pero desde ya estaría muy agradecido de cualquier ayuda que me puedan dar. Saludos!

      • Avatar
        Naylamp
        mar 25, 2017

        Hola Martín, A cual velocidad te refieres? Al serial.begin() o al esp8266.begin(), con el primero no debería tener problemas en modificar la velocidad, con el segundo, la velocidad tiene que ser la misma que tu ESP8266, para cambiarlo aparte de modificar la velocidad en el código, también tienes que cambiar la velocidad de tu ESP8266 usando los comandos AT respectivos. Con respecto a lo segundo son problemas de sintaxis, las comillas el compilador las interpreta como inicio y fin de una cadena. Todas las comillas internas deben ir con\" , tenemos un error al digitar el código en nuestro blog que borra el \ , estaremos solucionándolo pronto. La línea que mencionas escrita correctamente es:
        sendData("AT+CWJAP=\"SSID\",\"PASSWORD\"\r\n",8000);
        no olvides también en corregir todos los rn por \r\n.

    • Avatar
      Daniel
      mar 24, 2017

      Hola, buenas tardes. Tengo en la cabeza un proyecto que me ronda desde hace bastante tiempo, pero que no soy capaz de desarrollar por mi falta de conocimientos. Expongo lo que quiero hacer y vosotros me decís si es posible, y como. Quiero que cuando llueva se bajen las persianas de mi casa. Para ello he pensado en utilizar los esp8266-- El primero como servidor, conectado a un modulo sensor de lluvia. Para que cuando llueva se conecte con cada uno de esp8266 (AP) que habrá instalados en cada persiana y están bajen. Es posible que se comuniquen entre los esp8266 y se realice lo que quiero utilizando las entradas, salidas, gpo0 y gpo2.Quedo a la espera de vuestras respuestas. Un abrazo y GRACIAS..

      • Avatar
        Naylamp
        mar 25, 2017

        Hola Daniel, Si es factible realizar lo que estas planteando, Si el servidor es el que esta con el sensor, este no tienen la capacidad de iniciar la comunicación con un cliente, y tendrían que los otros ESP clientes estar consultando cada cierto tiempo al ESP servidor, y en tu caso no habría problema puesto que no necesitas un tiempo de respuesta rápido. Otra opción seria que en las persianas cada ESP sea un servidor con diferente IP, y en el sensor de lluvia sería un cliente, que se conectara a cada servidor para realizar la acción.

    • Avatar
      SIMON
      mar 25, 2017

      Hola sabes que cargo el codigo y me sale error ** esp8266.print(comando); // enviar el comando al ESP8266** en esta linea exit status 1 'esp8266' was not declared in this scope saludos

      • Avatar
        Naylamp
        mar 25, 2017

        Hola Simon, puede ser que te falte declarar en el inicio el SoftwareSerial esp8266(3,2);

    • Avatar
      Simon
      mar 25, 2017

      Hola naylamp copie el codigo tal cual... pero ahora me lanza error con el comando ** sendData("AT+CWJAP="DOMINGA","pass"rn",8000); //SSID y contraseña para unirse a red (puse mi red y pass, desde el monitor hago lo mismo con at+cwjap y entra sin problema) el error que dice es "inconsistent user-defined literal suffixes 'DOMINGA' and 'pass' in string literal estoy atento gracias

      • Avatar
        Naylamp
        mar 26, 2017

        Hola simón, son errores de sintaxis con las comillas internas, la línea debería ser: sendData("AT+CWJAP=\"SSID\",\"PASSWORD\"\r\n",8000); Fue un error que tuvimos al digitar el código en el blog que borro todos los “ \ ” , en el código anterior también se deben corregir todos los rn por \r\n.
        El Código en el tutorial ya fue corregido, ahora no debería haber problemas de sintaxis

    • Avatar
      David
      abr 2, 2017

      Hola, en primer lugar agradecerte el aporte. Mi pregunta es la siguiente: Voy a manejar un hardware con Arduino (entre ellos un módulo NFC para activar abrir una puerta en función del ID permitido), y a través del ESP8266 estará conectado a un servidor, este servidor nos enviará los IDs permitidos y denegados cada cierto tiempo, por otra parte, enviaremos al servidor variables del tipo a sido abierto, etc. El código más o menos me funciona tanto para enviar como para recibir. Ahora la idea sería integrar ambas partes en un solo código. Y aquí viene mi pregunta, como puedo hacer para que el Arduino no se quede escuchando el canal todo el rato a ver si le llega algo del ESP. Ya que no puedo tenerlo ocupado en eso todo el rato tengo que manejar más cosas. He pensado en actuar con interrupciones, supongo que si detecto un cambio en el pin de Rx del Arduino, es decir, el Tx del ESP, pero seguramnente se transmita información continuamente y me va a estar interrumpiendo todo el rato. He visto la segunda parte de este tutorial en el que recibes datos de un servidor, alguna vez integraste ambas partes? para poder enviar y recibir.Gracias de antemano.

      • Avatar
        Naylamp
        abr 9, 2017

        Hola David, mientras se esté enviando o recibiendo datos del módulo wifi, el microcontrolador estará ocupando realizando esta tarea, si lo trabajas con interrupciones primero tienes que analizar tu proyecto y ver que procesos son prioritarios, En este ejemplo se usa if(esp8266.available()) de esta forma se entra al if solo cuando hay datos disponibles en el ESP, de esta forma mientras no haya datos no afecta al resto del programa. ¿Cuando dices en integrar los dos tutoriales a que te refieres? Este tutorial no es ni para enviar datos a un servidor ni para recibir de él, sino es para trabajar al arduino como un servidor, en el segundo tutorial se usa como cliente, para conectarse a un servidor y poder enviar o recibir datos, en tu caso ese es el tutorial que debes de seguir.

    • Avatar
      Fernando
      abr 23, 2017

      Debiera compilar en arduino uno? el sketch para controlar LedMe aparece como comando erroneo sendData("AT+RSTrn",2000); !sendData was not declared

      • Avatar
        Naylamp
        may 1, 2017

        Hola Fernando, el error es porque la función senData no está definida, la función está en la parte final del código, asegúrate de haber copiado todo el código o que tenga el nombre correcto.

    • Avatar
      kikelo
      may 8, 2017

      hola buenos días, me gustaría saber si a alguien tiene el mismo problema que yo, ya que no consigo comunicar mi arduino uno con el esp8266. he probado desde los 9600 a 15200 baudios sabe alguien a que puede ser debido. las conexiones están todas correctas y la alimentación la hago desde una fuente externa de 3,3v

    • Avatar
      pepe
      may 17, 2017

      Pues a mi me pasa también lo mismo que tu kikelo, pero lo curioso del caso es que ayer me funciono un rato, lo que de todas maneras no creo que correctamente, ya que me salia una sola linea con caracteres raros. Hoy lo he probado con otro de nuevo y hace lo mismo, no funciona, al conectar la alimentación se encienden los dos les un parpadeo y se paran y no se conecta, que complicado.Saludos.

      • Avatar
        Naylamp
        may 30, 2017

        Lo más probable es que tenga otra velocidad, prueben con todas las velocidades, 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 y 115200 lo más probable es que sea de 9600 38400 o 115200 baudios, recuerda que puedes cambiar la velocidad con el comando el AT correspondiente.

    • Avatar
      Johnny
      may 18, 2017

      Buenas noches, este mismo esquema de conexión funciona para un Arduino Leonardo? Como podria realizar la conexión con un Arduino Leonardo? Agradezco de antermano la ayuda que me puedan brindar. Quiero subirle un Firmware actualizado al modulo ESP8266.

      • Avatar
        Naylamp
        may 30, 2017

        Hola Johnny, las conexiones para un arduino Leonardo son las mismas, Para que el ESP8266 entre en modo de programación el Pin GPIO_0 debe estar conectado a GND antes de inicializarse. Es recomendable usar un Conversor USB-Serial para cargar el Firmware.

    • Avatar
      Molecula_Girl
      may 26, 2017

      Hola..! Espero te encuentres bien... Yo estoy intentando programar este modulo pero con un PICAXE usando el hserin y hserout que dispone para enviar y recibir datos seriales este dispositivo, pero la respuesta que recibo cuando mando el AT es un "[A9]" en lugar de un OK y la verdad que no se que significa eso, llegue a pensar que el modulo esta dañado pero le he mandado otros comandos AT y la respuesta es diferente es decir esta respondiendo al comando pero no se como interpretar la respuesta, hay alguna manera de saber si se daño a nivel de hardware?.

      • Avatar
        Naylamp
        may 30, 2017

        Para descartar problemas de hardware prueba el ESP8266 con un arduino. ¿Qué terminal estas usando para enviar y visualizar los datos seriales? tal vez muestre los valores en Hexadecimal, prueba con el monitor serial de Arduino.

    • Avatar
      alejandro
      jun 13, 2017

      disculpa yo utilise el modulo esp-01 pero solo puedo acceder dela misma red en la que el esta conectado si intento utilizar datos mobiles no se conecta como puedo hacer para que se conecte

      • Avatar
        Naylamp
        jun 30, 2017

        Hola Alejandro, el ejemplo solo es para una red local, si quieres acceder remotamente desde fuera de tu red tienes que configurar tu módem y direccionar uno de los puertos a la IP local del ESP. Para acceder remotamente se tendría que usar la IP pública de tu red y el puerto configurado.

    • Avatar
      jose
      jun 21, 2017

      disculpa, ante que todo tus tutoriales han sido de mucho ayuda pero con respecto a este modulo wi fe, he tenido problemas para comunicarlo con mi arduino, ya he probado las diferentes velocidades y nada, el modulo esp si lee los comandos AT pero me responde a veces con letras diferentes, o puros cuadros blancos, he tratado de todo, agradecería mucho su ayuda

      • Avatar
        Naylamp
        jun 30, 2017

        Hola José, si nunca te responde el OK es porque la velocidad no es la correcta, intenta con otra velocidad, si te responde el OK pero no siempre o con caracteres basura, puede ser por un falso contacto en la conexión o porque estas usando una velocidad muy alta para el SoftwareSerial, de ser este último el caso, usa el comando AT+CIOBAUD=9600 para cambiar de velocidad.

    • Avatar
      MarianaR
      ago 22, 2017

      Hola gracias por tu aporte pero tengo una duda le cargue el código tal cual aparece y no funcionó me mandaba mucha basura y no se detenia e intente otros valores de baudios y nada después volvi a conectarlo y ya me prendian el led azul y el rojo y nunca se apaga el azul, eso a que se debe?

      • Avatar
        Naylamp
        ago 29, 2017

        Hola Mariana, Si te envía basura lo más probable es que tenga otra velocidad, prueben con todas las velocidades, lo más probable es que sea de 9600 38400 o 115200 baudios, recuerda que puedes cambiar la velocidad con el comando el AT correspondiente. También puede ser que tu ESP esté continuamente reseteándose, sería un problema de alimentación, agrega un condensador de unos 100uF a los 3.3V o usa una fuente externa.

    • Avatar
      Manuel
      oct 9, 2017

      Hola! Genial el tutorial. Gracias. Quería hacerte una consulta, yo lo que queciera hacer es poder mandar una configuración al modulo directo, no usar mi arduino uno, para poder cargar un programa como el WIFI Manager, así el usuario puede setear su propia WIFI y ademas quería cargar algunas funciones para usar MQTT. Como puedo hacer que la placa tome los datos cargados con el IDE de Arduino? GRACIAS!

    • Avatar
      Victor
      oct 10, 2017

      Excelente tutorial, me funciono perfecto !

    • Avatar
      Freddy
      oct 19, 2017

      Hola, muy buen aporte, quisiera saber si este modulo me funciona para realizar un envio de datos por minuto de un registro de no mas de 10 numeros a una base de datos en un servidor. web. Ya que mi idea es realizar un portal que administre las lecturas de un contador de energia.

Leave a Reply

* Name:
* E-mail: (Not Published)
   Website: (Site url withhttp://)
* Comment: