Haga clic para más productos.
No se encontraron productos.

Tutorial ESP8266 Parte I

159320

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
Prueba AT+CMD=? Retorna los posibles valores que puede tomar
Consulta AT+CMD? Retorna el valor actual del parametro
Establecer AT+CMD=Parametro Establece el valor del parametro de usuario
Ejecutar AT+CMD Ejecuta 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
AT OK Prueba si el módulo responde correctamente
AT+RST - Reinicia el módulo
AT+RST OK Reseté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=modo OK Establece 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+CWLAP AT+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,pwd OK El 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+CWQAP OK Se 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,ecn OK Configura 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+CIPSTATUS STATUS: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=mode OK mode:
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,port OK Empieza 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,port OK Empieza 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=id OK Cierra la conexión TCP o UDP con el ID "id" en modo conexión múltiple
AT+CIPCLOSE OK Cierra la conexión TCP o UDP para modo de conexión única
AT+CIPSEND - Enviar datos
AT+CIPSEND=? OK
AT+CIPSEND=length SEND OK Establece la longitud de datos a enviarse (máximo 2048). Para un envío normal (modo conexión única)
AT+CIPSEND=id,length SEND OK Establece la longitud de datos a enviarse en la conexión número "id". Para un envío normal (modo conexión múltiple)
AT+CIPSEND Enví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] OK Configura 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=baudrate OK Configura 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.

Productos relacionados
Artículos relacionados
70 Comentarios
  • Se******* ****or

    Se******* ****or 29/01/2021 Responder

    Me podria decir como hacer para cuando yo resetee el modulo al quitarle la fuente de alimentacion y conectarla de nuevo, el comando AT+CIPMUX=1 ya este activado o puesto.
    Tambien podria decirme si hai una forma o un comando en el que el puerto que yo le asigne al modulo cuando le habilite el comando de ser servidor se quede predeterminado, si es que hai algun comando u otra accion por favor, tambien, me podria decir otro para quitar el puerto que ya puse y poner otro por si se satura o por algun otro inconveniente.
    Gracias por su atencion.
  • ef****

    ef**** 07/05/2020 Responder

    beun tutorial pero me sale este error
    C:UsersepamplonaDocumentsPRUARDUINOPrueba_4Prueba_4.ino: In function 'void loop()':

    C:UsersepamplonaDocumentsPRUARDUINOPrueba_4Prueba_4.ino:26:25: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]

    if(esp8266.find("+IPD,")) // revisar si el servidor recibio datos

    ^

    C:UsersepamplonaDocumentsPRUARDUINOPrueba_4Prueba_4.ino:30:21: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]

    esp8266.find("led="); // bucar el texto "led="

    ^


    a que se debe
  • DA****

    DA**** 07/04/2020 Responder

    Buenas. La información es muy buena.
    El problema que me encuentro es que a través del Arduino (Primer programa básico del post), no me funciona.

    Si anulo el micro, y trabajo directo con TX,RX y el monitor serial puedo hacer todo con el modulo ESP01.
    Cuando lo hago a través del micro, no consigo que comunique.
    He probado también con un MEGA y uno de sus puertos series y tampoco.

    He probado los BAUDS, y nada, he mirado si comunica a través de los pins del serial virtual, y hay señal de salida, pero nunca tengo retorno.

    a ver si mu puedes ayudar.
    un saludo
  • Sa****** *****ro

    Sa****** *****ro 23/02/2020 Responder

    Hola, muchas felicidades, muy buena información y muy bien explicado.
    Saludos,
  • Fr******* ****** ********* *****do

    Fr******* ****** ********* *****do 31/01/2020 Responder

    Buenas noches:
    Estoy intentando poner en funcionamiento una ESP8266 D1 mini. La comunicación es correcta (consigo cargar y ejecutar por ejemplo el uso del led), pero no consigo encontrar la velocidad apropiada del serial. He probado una por una las velocidades, y con ninguna consigo OK. Con la velocidad que en el serial hay un mensaje claro es con 74880, pero en cualquier caso tampoco da el ready final ni contesta a los comando AT. ¿Qué puedo hacer?
  • Ma****

    Ma**** 25/04/2019 Responder

    Estimado funciona perfecto tu programa, tengo una duda cuando lees al esp le restas 48, ese offset es para ?

    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

  • rg*****

    rg***** 19/04/2019 Responder

    Hola, tengo un ESP8266MOD (ESP-07) y quiero usarlo con Arduino Uno, que es el que tengo en este momento, sinceramente no puedo encontrar info para conectarlo primero a arduino para actualizar firmware y dps para usarlo como server o como cliente.

    Donde puedo ver un plano para conectar al breadboard.

    Muchas Gracias de Antemano
  • ju**

    ju** 11/01/2019 Responder

    Buen día,
    estoy desarrollando un proyecto (control de acceso) que consiste en usar el modulo ESP8266, el MRC522 y una Micro SD para almacenar la información, que me recomendarías que hiciera o como puedo hacer para que la información almacena en la SD pueda descargarla en el PC como un archivo TXT sin tener que retirar la SD del arduino, es posible bajar la información por medio del servidor web? que comandos puedo usar para realizar dicha operación?. Gracias.
  • ce*** **ar

    ce*** **ar 23/12/2018 Responder

    Se puede cambiar el ip usando CIPSTA

    gracias
  • st****

    st**** 07/12/2018 Responder

    buenas, a mi me si me sirvio todo pero ocupo ayuda para poder conectarlo a una red publica osea que lo pueda controlar desde cualquier otro lugar que no sea el wifi de mi casa ojala me puedan ayudar gracias
  • jo***

    jo*** 22/11/2018 Responder

    hola y si por ejemplo le quisiera agregar un botón que encienda y apague el led como le puedo hacer??
  • he*** ******ez

    he*** ******ez 14/08/2018 Responder

    Exxelente, me sirvio muchisimo para lograr que esto funcionara, desde mucho que busque. lo otro en mi caso no se debe cambiar el rx y tx no van cruzados.
  • Ad******

    Ad****** 14/07/2018 Responder

    Genial flaco, te consulto de la misma manera le puedo pedir info desde arduino a la web, por ejemplo, info de sensores de temp, humedad etc. para consultar los datos a distancia
  • ca**** *****ez

    ca**** *****ez 14/07/2018 Responder

    Buenos días, tengo un proyecto puesto en marcha sobre una incubadora pero quiero digitalizar los parámetros por teléfono, pero mi pregunta es puedo controlar todo por el arduino normal y solo mandar y recibir los datos de los sensores por el esp8266, por internet para luego visualizar por teléfono,
  • Ar****

    Ar**** 15/06/2018 Responder

    Hola, estuvo excelente, en serio te agradezco infinitamente, me funciono perfectamente, pero tengo una consulta; me gustaría que en la pagina, el explorador, salieran dos botones, prender y apagar, en vez de colocar directamente en la url, ¿me ayudas? que tendría que hacer, tengo conocimientos de html pero no sé al momento de incrustarlo en Arduino como quedaría, de antemano muchísimas gracias. : )
  • ko*

    ko* 29/05/2018 Responder

    Gracias sinceramente por este tutorial. Pero aún tengo una pregunta ¿cómo puedo enviar una señal desde el arduino hasta un sensor mediante WiFi? Ejemplo: enviar una señal de apagar y encender led desde arduino?
  • Ca**

    Ca** 23/05/2018 Responder

    Buen día,

    Muy interesante la información, me ha ayudado mucho pero no he logrado comunicarme con el modulo desde mi pc, ya logre conectarme a la red wifi y según el monitor de serie mi ip es CIFSR:STAIP,#192.168.0.139" pero al momento de ingresar al navegador http://192.168.0.139/led=0 el navegador me dice que no puede acceder al sitio y la verdad no entiendo porque, me podrías ayudar con este inconveniente por favor.

    Gracias
  • JV

    JV 17/04/2018 Responder

    hola tengo una duda sobre el codigo....
    sendData("AT+CWJAP="SSID","PASSWORD"rn",8000); //SSID y contraseña para unirse a red
    en esa parte en ves de poner SSID pondremos en nombre de nuestra red local y donde die PASSWORD pondremos la contraseña de nuestra red? o debemos dejarlo tal como esta?
  • NE**** ******* ********NO

    NE**** ******* ********NO 05/03/2018 Responder

    En el ejemplo dado por ustedes le quiero agregar un pagina web con botones, para realizar el pedido a través de la ip y el estado del led, quisiera preguntar si se puede utilizar la funcion $.get() de javascript con la URL y el parametro ld=13 por ejemplo. La función $.get() hace lo mismo que el navegador. Gracias por vuestra respuesta. Saludos
  • Re****** *******to

    Re****** *******to 02/03/2018 Responder

    Hola a todos,
    Mi problema con 8266 es que no puedo ver ningún mensaje legible. Solo basura. He intentado cambiar a cualquier otro boudrate desde 1200 a 115200 y diferentes monitores como Arduino IDE, termita, ppty, etc.
    Lo intenté también con dos boards 8266 diferentes y el resultado es el mismo.
    E incluso escribiendo AT, por ejemplo, no tengo respuesta.
    ¿Algún consejo?
    Gracias
    • Je**** ****ra

      Je**** ****ra 10/04/2018 Responder

      Hola. El problema suele estar en la dificultad de gestionar el puerto serie virtual de arduino uno a la velocidad de 115200 baudios, que es a la que suele estar el ESP por defecto. A mi me ha pasado y al final le he bajado la velocidad al ESP utilizando un USB TTL, luego ya funciona con arduino sin problemas.
  • Lu** Z

    Lu** Z 11/02/2018 Responder

    Buenas, una consulta, quiero testar el GPI0 del esp8266 y enviar el estado del dicho pin por wifi..... se puede??
    Gracias
  • Pa*** W

    Pa*** W 03/12/2017 Responder

    Buenas. Fantastico tutorial!

    Una sola pregunta. Como puedo hacer para definir la IP a la que se conecta el modulo? Porque para redireccionar los puertos del router, y poder acceder desde afuera de la LAN, necesito que la IP nunca cambie... no he encontrado informacion al respecto. Hay manera de configurar la conexion que no sea por DHCP?
    • Je**** ****ra

      Je**** ****ra 11/04/2018 Responder

      En el servidor de DHCP del router puedes añadir una reserva para la MAC del ESP así siempre te asignará la misma IP!
  • PE****

    PE**** 28/11/2017 Responder

    HOLA me urge saber que onda con el modulo, no logro hacerlo funcionar, con ninguna velocidad hay comunicacion, si fueran tan amables de contestar ya probe modificando en el sketch de arduino y en el monitor y no me comunica. que puedo hacer AYUDAA
  • PE****

    PE**** 28/11/2017 Responder

    HOLA me urge saber que onda con el modulo, no logro hacerlo funcionar, con ninguna velocidad hay comunicacion, si fueran tan amables de contestar ya probe modificando en el sketch de arduino y en el monitor y no me comunica. que puedo hacer AYUDAA
  • Dv****

    Dv**** 03/11/2017 Responder

    Hola, excelente publicación, una pregunta , tal vez algo novata, debo retira el Atmega para realizar el ejemplo?
  • Fr****

    Fr**** 19/10/2017 Responder

    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.
  • Vi****

    Vi**** 10/10/2017 Responder

    Excelente tutorial, me funciono perfecto !
  • Ma****

    Ma**** 09/10/2017 Responder

    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!
  • Ma******

    Ma****** 22/08/2017 Responder

    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?
    • Na*****

      Na***** 29/08/2017 Responder

      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.

  • jo**

    jo** 21/06/2017 Responder

    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
    • Na*****

      Na***** 30/06/2017 Responder

      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.
  • al*******

    al******* 13/06/2017 Responder

    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
    • Na*****

      Na***** 30/06/2017 Responder

      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.
  • Mo***********

    Mo*********** 26/05/2017 Responder

    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?.
    • Na*****

      Na***** 30/05/2017 Responder

      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.
  • Jo****

    Jo**** 18/05/2017 Responder

    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.
    • Na*****

      Na***** 30/05/2017 Responder

      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.
  • pe**

    pe** 17/05/2017 Responder

    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.
    • Ja****

      Ja**** 21/02/2020 Responder

      Cuando el ESP viene por defecto con una velocidad grande, por ejemplo con 115200 baudios, el SoftwareSerial no lo puede procesar bien y hay que cambiar la velocidad a una baja, por ejemplo 9600. En los nuevos ESP el comando CIOBAUD para cambiar los baudios ya es obsoleto y no funciona. Este comando ha sido reemplazado por "AT+UART_CUR" o "AT+UART_DEF", los cuales tienen diferentes sintaxis.
      Entonces para cambiar los baudios del ESP escribe en el monitor:
      AT+UART_DEF=9600,8,1,0,0 (Cambia a 9600 Bd)
    • Na*****

      Na***** 30/05/2017 Responder

      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.
      • Ax**

        Ax** 09/08/2017 Responder

        Hola, buen día. Tengo casi el mismo problema que ellos, la diferencia es que yo si logro la comunicación con el modulo a 115200 bauds. Mi problema es que a pesar de que logro la comunicación, la información que muestra el monitor serie tiene algunos errores, por ejemplo, se cambian unas letras por otras o se muestran numeros que no son los correctos. ¿Me podrian ayudar con este problema? ya probé con otras velocidades y no me funciona correctamente el modulo.
        Tengo declarado esto:
        Serial.begin(115200);
        WFI.begin(115200);


        Gracias por el aporte, muy buena información.
  • ki****

    ki**** 08/05/2017 Responder

    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
  • Fe******

    Fe****** 23/04/2017 Responder

    Debiera compilar en arduino uno? el sketch para controlar Led

    Me aparece como comando erroneo sendData("AT+RSTrn",2000); !sendData was not declared
    • Na*****

      Na***** 01/05/2017 Responder

      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.
  • Da***

    Da*** 02/04/2017 Responder

    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.
    • Na*****

      Na***** 09/04/2017 Responder

      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.
  • Si***

    Si*** 25/03/2017 Responder

    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
    • Na*****

      Na***** 26/03/2017 Responder

      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
  • SI***

    SI*** 25/03/2017 Responder

    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
    • Na*****

      Na***** 25/03/2017 Responder

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

        SI*** 25/03/2017 Responder

        Hola lo pegue tal cual sale en el tutorial pero nada ahora me da problema en // sendData("AT+CWJAP="DOMINGA","FOCAPETER2017"rn",8000); //SSID y contraseña para unirse a red //
  • Da****

    Da**** 24/03/2017 Responder

    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..
    • Na*****

      Na***** 25/03/2017 Responder

      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.
  • ma**** *****ez

    ma**** *****ez 05/03/2017 Responder

    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!
    • Na*****

      Na***** 25/03/2017 Responder


      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.

  • Os*** *****on

    Os*** *****on 19/02/2017 Responder

    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.
    • Na*****

      Na***** 25/03/2017 Responder

      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.
  • Ma**** ******as

    Ma**** ******as 17/02/2017 Responder

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

    ma**** 06/02/2017 Responder

    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
    • Na*****

      Na***** 18/02/2017 Responder

      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.
  • ju***

    ju*** 12/01/2017 Responder

    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
    • Na*****

      Na***** 18/02/2017 Responder

      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).
  • Al******* ******RI

    Al******* ******RI 05/12/2016 Responder

    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...
    • Na*****

      Na***** 14/12/2016 Responder

      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.
  • Ma**** *******or

    Ma**** *******or 16/11/2016 Responder

    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.
    • Na*****

      Na***** 02/12/2016 Responder

      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.
      • Ma**** *******or

        Ma**** *******or 26/01/2017 Responder

        Gracias x tu respuesta.

        Saludos.
Dejar un comentario
Deja su comentario

Menú

Ajustes

Crear una cuenta gratuita para usar listas de deseos.

Registrarse