You are on page 1of 13

Tutorial ESP8266 Parte I

Posted by Tutoriales 58 Comments

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:


Tipo Ejemplo Descripció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:
Comando Respuesta Funció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) Lista los modos
OK validos
AT+CWMODE? +CWMODE:modo Pregunta en que
OK 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 Lista los Acess
OK 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 Busca Acess
OK Points disponibles
para conectarse
con las
condiciones
especificadas
AT+CWJAP - Unirse a un Access Point
AT+CWJAP? + CWJAP:ssid Imprime el SSID
OK 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 Pregunta la
OK 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_PS
K
AT+CIPSTATUS - Información acerca de la coneción
AT+CIPSTATUS STATUS:status status:
+CIPSTATUS:id,type,addr,port,tety 2 = Se obtuvo IP
pe 3 = Conectado
OK 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 Imprime el mode,
OK 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,p OK Empieza una
ort conexión como
cliente (En modo
conexión
múltiple)
id: ID de la
conexión (1-4)
AT+CIPSTART=? [+CIPSTART:(id)(“type”),(“ip Lista los posibles
address”),(port)] comandos
OK
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 Retorna la
OK 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) Nos informa que
OK las velocidades de
transmisión
permitidas están
en este rango
AT+CiOBAUD? +CIOBAUD:baudrate Nos indica que el
OK 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.

You might also like