Ejemplos de uso de los comandos AT del ESP8266

En ESP8266 y el "internet de las cosas" explico qué es el ESP8266. Tradicionalmente estos módulos vienen de serie con un intérprete de comandos AT. Su uso fundamental es servir de adaptador de puerto serie a WIFI para otro microcontrolador diferente.

No se trata de una configuración que yo necesite, así que lo primero que hago cuando me llega un ESP8266 es reprogramarlo. Antes de hacerlo, no obstante, quiero daros una impresión de cómo va la cosa y sus posibilidades.

La documentación del fabricante está en chino (literalmente), pero poco a poco se ha ido publicando información con cuentagotas en webs de terceros:

Conectémonos al ESP8266 por USB y veamos qué podemos hacer:

 $ python3 -m serial.tools.miniterm /dev/ttyUSB0 115200
 --- Miniterm on /dev/ttyUSB0  115200,8,N,1 ---
 --- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---

 AT+RST

 OK

  ets Jan  8 2013,rst cause:2, boot mode:(3,6)

 load 0x40100000, len 1396, room 16
 tail 4
 chksum 0x89
 load 0x3ffe8000, len 776, room 4
 tail 4
 chksum 0xe8
 load 0x3ffe8308, len 540, room 4
 tail 8
 chksum 0xc0
 csum 0xc0

 2nd boot version : 1.4(b1)
   SPI Speed      : 40MHz
   SPI Mode       : DIO
   SPI Flash Size & Map: 8Mbit(512KB+512KB)
 jump to run user1 @ 1000

 ␘�␆n't use rtc mem data
 rlǃ;dd�
 Ai-Thinker Technology Co.,Ltd.

 ready

 AT+GMR
 AT version:0.40.0.0(Aug  8 2015 14:45:58)
 SDK version:1.3.0
 Ai-Thinker Technology Co.,Ltd.
 Build:1.3.0.2 Sep 11 2015 11:48:04
 OK

 AT+CWMODE?
 +CWMODE:2

 OK

 AT+CWMODE=1

 OK

 AT+CWLAP
 +CWLAP:(4,"JAZZTEL_D5A0",-87,"f8:XXXX",1,-16)
 +CWLAP:(4,"Orange-5E19",-67,"9c:XXXX",6,-11)
 +CWLAP:(4,"Orange-F701",-86,"a8:XXXX",6,-2)
 +CWLAP:(4,"Orange-B260",-64,"84:XXXX",9,-11)
 +CWLAP:(2,"JAZZTEL_888D",-92,"38:XXXX",9,0)
 +CWLAP:(2,"JAZZTEL_6306",-84,"38:XXXX",11,3)
 +CWLAP:(2,"WLAN_974F",-45,"8c:XXXX",11,-31)
 +CWLAP:(4,"JAZZTEL_pufd",-86,"54:XXXX",11,-31)

 OK

 AT+CWJAP="WLAN_974F","XXXX"
 WIFI CONNECTED
 WIFI GOT IP

 OK

 AT+CIFSR
 +CIFSR:STAIP,"192.168.1.38"
 +CIFSR:STAMAC,"18:fe:34:XX:XX:XX"

 OK

 AT+CIPMUX=0

 OK

 AT+CIPSTART="TCP","94.23.XX.XX",80
 CONNECT

 OK
 AT+CIPSEND=18

 OK
 >GET / HTTP/1.0\r\n\r\n
 Recv 18 bytes
 SEND OK

 +IPD,354:HTTP/1.1 200 OK
 Date: Fri, 01 Jul 2016 00:33:49 GMT
 Server: Apache/2.4.20 (Unix) OpenSSL/1.0.2h mod_wsgi/4.4.15 Python/3.5.1
 Upgrade: h2
 Connection: Upgrade, close
 Last-Modified: Wed, 22 Feb 2006 19:36:39 GMT
 ETag: "2c-40d673f249fc0"
 Accept-Ranges: bytes
 Content-Length: 44
 Content-Type: text/html

 <html><body><h1>It works!</h1></body></html>
 CLOSED

 AT+CIPMUX=1

 OK
 AT+CIPSERVER=1,80

 OK
 0,CONNECT

 +IPD,0,290:GET / HTTP/1.1
 Host: 192.168.1.38
 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0
 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
 Accept-Language: en-US,en;q=0.5
 Accept-Encoding: gzip, deflate
 DNT: 1
 Connection: keep-alive

 0,CLOSED

La línea 5 resetea el ESP8266. El dispositivo nos muestra información de depuración en las líneas 9-32. En la línea 34 le preguntamos por la versión del firmware grabado en la memoria flash y la respuesta está en las líneas 35-39.

En la línea 41 le preguntamos por su configuración WIFI. La respuesta, en la línea 42, nos dice que está en modo estación WIFI. Es decir, este ESP8266 está configurado para actuar como un nodo de acceso WIFI.

Cambiamos eso en la línea 46, indicándole que queremos que sea un cliente WIFI normal y corriente.

En la línea 50 pedimos un listado de las redes WIFI disponibles y, tras un par de segundos, el ESP8266 nos muestra la lista de redes WIFI que puede ver. En cada línea se indica el tipo de cifrado, el nombre de la red, la potencia con la que llega, la dirección MAC (parcialmente oculta en este ejemplo) y el canal WIFI que emplea. Desconozco el significado del último valor.

En la línea 62 pedimos que el ESP8266 se conecte a mi red WIFI doméstica. Oculto la clave por motivos evidentes. Tenemos la respuesta en las líneas 63-64. Pedimos información sobre la conexión en la línea 68. La línea 69 nos indica qué IP nos ha dado el servidor DHCP de mi punto de acceso WIFI. La dirección MAC del ESP8266 se puede ver en la línea 70.

En la línea 74 pedimos que el ESP8266 se configure para una única conexión simultánea y la establecemos en la línea 78, conectándonos a mi servidor web.

En la línea 82 indicamos que queremos enviar 18 bytes al servidor web, cosa que hacemos en la línea 85. Cuando el ESP8266 recibe los 18 bytes, los envía al servidor web y nos indica la respuesta en las líneas 89-100. Tras unos segundos, el servidor web da timeout y nos desconecta, cosa que el ESP8266 nos indica en la línea 101.

Hasta aquí el ESP8266 ha actuado como cliente. En las líneas 103 y 106 lo configuramos como servidor escuchando en el puerto 80, el puerto de un servidor web. Abrimos nuestro navegador web y nos conectamos a http://192.168.1.38/. El ESP8266 nos informa de esa conexión en la línea 109 y nos muestra lo que envía el navegador en las líneas 111-118. Ahí el navegador se queda esperando a que el ESP8266 actúe como un servidor web y envíe una respuesta, cosa que no hacemos en esta demo. Cierro la ventana del navegador web y el ESP8266 nos informa de la desconexión en la línea 120.

Los comandos AT del ESP8266 pueden hacer más cosas. Por ejemplo, crear un punto de acceso WIFI protegido con clave o no, al gusto:

 $ python3 -m serial.tools.miniterm /dev/ttyUSB0 115200
 --- Miniterm on /dev/ttyUSB0  115200,8,N,1 ---
 --- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---

 AT+CWMODE?
 +CWMODE:1

 OK
 AT+CWMODE=2

 OK
 WIFI DISCONNECT

 AT+CWSAP="ESP8266","rrgrrgrrgr",5,3

 OK
 AT+CWLIF

 OK
 AT+CWLIF
 192.168.4.2,d8:bb:2c:XX:XX:XX

 OK

En la línea 5 preguntamos por el modo WIFI del ESP8266 y en la línea 6 nos indica que está configurado como cliente WIFI, tal y como lo habíamos dejado en la sección anterior.

En la línea 9 configuramos el ESP8266 como un nodo de acceso WIFI. Obviamente se desconectará de la red WIFI actual, cosa que se ve claramente en la línea 12.

Configuramos los parámetros WIFI de este nodo de acceso en la línea 14. En este caso la red WIFI se va a llamar ESP8266, la clave de acceso será rrgrrgrrgr, se utilizará el canal 5 y el nivel de seguridad será WPA2. A partir de este momento aparecerá una red WIFI llamada ESP8266.

En la línea 17 vemos quién está conectado. En este caso, nadie. A continuación conecto mi teléfono móvil a esa red WIFI y vuelvo a pedir el listado de conexiones ESP8266. En esta ocasión vemos los datos de mi teléfono en la línea 21.

Detalle de lo que veo en mi móvil:

esp8266_AT.jpg

Nota

El ESP8266 tiene un modo en el que actúa simultáneamente como cliente WIFI y como punto de acceso WIFI (capaz de soportar cinco clientes simultáneos). Un ESP8266 podría, por ejemplo, conectarse a la red WIFI doméstica y hacer de repetidor para otros ESP8266 en las inmediaciones, incapaces de alcanzar la WIFI doméstica directamente.

Como puede verse, usar un ESP8266 para proporcionar WIFI a otro microcontrolador es sencillo, útil y disponible como configuración por defecto.

En mi caso, como he dicho al principio, lo primero que hago al recibir un ESP8266 es reprogramarlo con otro firmware. No utilizo el modo AT. Si haces lo mismo y quieres recuperar el firmware de fábrica en un futuro -el modo AT- puedes instalar el SDK original del fabricante. Hay un hilo al caso en el foro del fabricante.