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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
$ 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:
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:
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.