Escolar Documentos
Profissional Documentos
Cultura Documentos
6 OCT 2016
Utilizando CuteCom para hacer pruebas con el mdulo wifi ESP8266 por el puerto serie
Dependiendo de qu placa Arduino se utilice, puede que solamente haya disponible un puerto serie hardware,
lo que aade una pequea incomodidad al envo y la recepcin. Cambiar la velocidad de las comunicaciones es
mucho ms cmodo en una aplicacin de comunicaciones serie desde un ordenador y algunas placas Arduino
(y en algunas circunstancias) no soportan bien las velocidades ms altas de las comunicaciones serie,
especialmente 115200baudios, que es la velocidad por defecto de las ltimas versiones del firmware.
Sobre qu programa utilizar para monitorizar el ESP8266 utilizando el puerto serie, hay muchos para elegir
segn necesidades y preferencias; ltimamente estoy utilizando ms el clsico CuteCom (el de la captura de
pantalla de arriba) porque me resulta muy cmodo para repetir ciertas rdenes AT del mdulo wifi ESP8266
en las pruebas de los proyectos.
Ya se han dado aqu algunas recomendaciones sobre programas que funcionen como consola serie; por
ejemplo, al hablar de PuTTY para el control de dispositivos serie UART desde el ordenador. PuTTY, adems de
ser una aplicacin excelente, est disponible para la mayora de sistemas operativos de escritorio. Adems,
https://polaridad.es/modulo-wi-esp8266-arduino-operacion-basica-conexion/ 1/9
2017-6-6 Operaciones bsicas sobre un mdulo wi ESP8266 desde Arduino
como PuTTY puede utilizarse para hacer de consola tanto con el puerto serie como con los familia de
protocolos de Internet (TCP/IP), incluyendo los que funcionan sobre TLS, se convierte en herramienta
habitual que devuelve con creces el (poco) tiempo empleado en configurarla y en acostumbrarse a su uso.
Utilizando PuTTY para hacer pruebas con el mdulo wifi ESP8266 por el puerto serie
Adems del software de comunicaciones serie, para conectar el mdulo wifi ESP8266 al puerto USB de un
ordenador tambin hace falta un conversor USB a serie TTL. Igual que en el caso del software, existen
varias versiones, desde las que solo se utilizan para convertir el puerto USB en un puerto serie TTL (que se
puede conseguir desde un Euro) hasta los que pueden emular diferentes protocolos (como SPI o I2C).
Igual que un programa que funcione como una consola serie, el hardware para comunicar el ordenador por
USB con un circuito lgico (no solo el ESP8266) ser una herramienta habitual en el trabajo de un
desarrollador de aplicaciones microcontroladas, merece la pena tenerlo en la caja de herramientas cuanto
antes y trabajar con el mdulo wifi ESP8266 es una excelente ocasin para hacerse con uno.
Hardware para comunicaciones serie UART USB para monitorizar el mdulo wifi ESP8266
El conversor USB a UART TTL tambin se puede utilizar para monitorizar el comportamiento de un circuito
que use el ESP8266, para hacerlo, se conectan en serie a la entrada de datos (RX) del conversor las salidas
que se quieran monitorizar con un diodo rpido (el 1N4148, por ejemplo) y una resistencia (2K2, por ejemplo)
en paralelo entre ellos. Un montaje de este tipo funciona como un sniffer serie hardware.
Ejemplo de sniffer para ESP8266 conectado a Arduino usando un conversor USB UART TTL
Aunque el sniffer de la imagen de arriba es ciertamente rudimentario (entre otras cosas no dispone de
buffer) es suficiente para monitorizar el funcionamiento de un montaje con Arduino y el ESP8266.
Quitando del esquema anterior el sniffer queda el esquema que muestra cmo conectar un mdulo wifi
ESP8266 a una placa Arduino. Adems de alimentarlo a 3V3, hay que conectar a nivel alto el pin de reset y el
de activacin del integrado (enable). Por supuesto, el pin RX de uno debe conectar al TX del otro.
Para simplificar el diagrama anterior, se ha representado una placa Arduino alimentada a 3V3 y de la que se
supone una tensin en el puerto serie tambin de 3V3. Si se utiliza un microcontrolador con un nivel de
seal en el puerto serie diferente (normalmente 5V) ser necesario, para no daar el ESP8266, utilizar un
conversor de nivel como los de los esquemas de abajo. Este circuito es el que se encuentra con frecuencia
en muchas implementaciones de mdulos comerciales listos para usar.
https://polaridad.es/modulo-wi-esp8266-arduino-operacion-basica-conexion/ 2/9
2017-6-6 Operaciones bsicas sobre un mdulo wi ESP8266 desde Arduino
ha funcionado tanto conectndolo a nivel algo como desconectado). Si el mdulo tiene libre la conexin
GPIO15 (como ocurre en el ESP-12) debe conectarse a nivel bajo. RESET, que normalmente estara a nivel
alto durante el funcionamiento, puede dejarse sin conectar o conectar a nivel alto por medio de una
resistencia (10K, por ejemplo), ya que antes de empezar la grabacin puede ser necesario reiniciar el
dispositivo conectndolo a nivel bajo.
Al alimentar el mdulo ya estar disponible para actualizarlo pero, si se muestra un error de conexin,
ser necesario resetearlo conectando RESET a nivel bajo un instante y dejndolo luego al aire (sin
conectar) para el proceso de actualizacin.
El mdulo tiene picos de consumo de medio amperio (hasta 600mA, segn algunos usuarios) as que es
importante utilizar una fuente de alimentacin capaz de soportar este consumo, especialmente para
actualizar el firmware.
Conexin mdulo wifi ESP8266 ESP-01 a conversor USB UART TTL actualizar firmware
Configurar CuteCom para monitorizar el mdulo wifi ESP8266 usando un conversor USB UART TTL
Configurar PuTTY para monitorizar el mdulo wifi ESP8266 con un conversor USB UART TTL
Una vez configurada la aplicacin (o, en su caso, almacenada y seleccionada) queda abrir la conexin (open
device y open, respectivamente, en las capturas de pantalla de los ejemplos arriba con CuteCom y
PuTTY) y ya se puede empezar a enviar rdenes al ESP8266.
Como puede verse en la tabla de rdenes AT del ESP8266, el formato para activar, desactivar, establecer
un valor y consultarlo es bastante predecible pero, en general, no es fcil recordarlos todos y es probable
que sea necesario tenerla a mano para consultarla.
La forma de enviar rdenes AT al mdulo wifi ESP8266 desde Arduino es muy sencilla: configurar las
comunicaciones con Serial.begin(115200); (o Serial1, Serial2 en las placas con varios puertos serie
hardware) y enviar las rdenes usando el formato Serial.print(orden+"\r\n");
Ejemplo de envo de rdenes AT a un mdulo wifi ESP8266 desde Arduino (conectar a un punto de acceso) Arduino
https://polaridad.es/modulo-wi-esp8266-arduino-operacion-basica-conexion/ 3/9
2017-6-6 Operaciones bsicas sobre un mdulo wi ESP8266 desde Arduino
1 #define PUERTO_SERIE Serial // Objeto serie que corresponde a puerto serie hardware al que est conectado el mdulo wifi ESP8266
2 #define VELOCIDAD_ESP8266 115200 // Velocidad, en baudios, a la que est configurado el ESP8266
3 #define IDENTIFICADOR_WIFI "polaridad.es" // SSID (Service Set Identifier)
4 #define CLAVE_WIFI "54lLij1RiTn3MEd3v41C" // Clave del punto de acceso wifi al que se conecta el ESP8266
5
6 void setup()
7 {
8 PUERTO_SERIE.begin(VELOCIDAD_ESP8266);
9 PUERTO_SERIE.print
10 (
11 "AT+CWJAP=\""+
12 String(IDENTIFICADOR_WIFI)+
13 "\",\""+
14 String(CLAVE_WIFI)+
15 "\"\r\n"
16 );
17 }
18
19 void loop()
20 {
21 }
El ejemplo anterior muestra cmo enviar las rdenes AT del mdulo wifi ESP8266 desde Arduino. En este
caso se ilustra AT+CWJAP , que sirve para conectar a un punto de acceso. Esta orden utiliza como
argumentos el identificador del punto de acceso (SSID) y la clave, ambos entre comillas, por lo que se
convierten en un objeto Srtring y se encierran entre comillas usando el cdigo de escape ( \" ). Para
terminar la orden se usa \r\n que corresponde con CR y LF .
Para recordar que el puerto serie no siempre se identifica con Serial (en determinadas placas puede ser
Serial1 , Serial2 ) se ha definido el objeto del puerto usado asignndolo a la macro PUERTO_SERIE .
Detectando el tipo de placa usada podra aadirse un poco de inteligencia a la seleccin del puerto serie;
ms adelante se repasar cmo puede averiguar el tipo de Arduino. El resto de definiciones son las
habituales que permiten dar nombre a los valores constantes para evitar repetirlos (y equivocarse) y
hacen ms sencillo cambiarlos.
El ejemplo anterior se supone que conecta el mdulo wifi ESP8266 al punto de acceso indicado pero Estaba
ya conectado anteriormente? Ha funcionado la conexin? Para saberlo, necesitamos escuchar lo que dice
el ESP8266
Como en una placa Arduino Uno (y en otras) abrir el monitor serie resetea el programa, se puede aprovechar
para ver en la consola serie de Arduino la informacin que enva al ESP8266 como muestra la captura de
pantalla de la imagen de abajo.
Recibir datos del mdulo wifi ESP8266 desde Arduino. Ejemplo bsico
https://polaridad.es/modulo-wi-esp8266-arduino-operacion-basica-conexion/ 4/9
2017-6-6 Operaciones bsicas sobre un mdulo wi ESP8266 desde Arduino
Una forma sencilla de gestionar esta circunstancia es iterar sobre los datos recibidos buscando respuestas
concretas con las que, por ejemplo, activar indicadores (banderas o variables booleanas) que determinarn
si se sigue buscando en el texto recibido y qu acciones deben realizarse en funcin de la informacin que
llega desde el ESP8266. Mientras llega la respuesta el microcontrolador puede dedicarse a otras tareas, por
ejemplo, recibir datos de sensores y procesarlos.
En el cdigo del ejemplo anterior tambin puede verse una forma de elegir el puerto serie dependiendo del
tipo de placa Arduino utilizada. En este ejemplo se supone que se dispone de tres tipos de placas para el
proyecto: una Arduino Uno, una Arduino Mega 2560 y una Arduino Leonardo. Si se trabaja con una Arduino
Uno se usar Serial y en caso contrario Serial1 .
Si se trabaja con una placa Arduino Leonardo se puede usar el mismo mtodo para detener el programa y
esperar a que la consola (el puerto serie asociado a Serial ) est disponible.
Detectar si es una placa Arduino Leonardo, Mega 2560 o Arduino Uno para usar un puerto serie u otro Arduino
https://polaridad.es/modulo-wi-esp8266-arduino-operacion-basica-conexion/ 5/9
2017-6-6 Operaciones bsicas sobre un mdulo wi ESP8266 desde Arduino
1 #ifdef ARDUINO_AVR_LEONARDO
2 #define SERIE Serial1
3 #define ESPERA_CONSOLA while(!Serial){} /* Esperar a la consola */
4 #else
5 #define ESPERA_CONSOLA /* Si no es un Arduino Leonardo no hace falta esperar a la consola */
6 #ifdef ARDUINO_AVR_MEGA2560
7 #define SERIE Serial1
8 #else // En este proyecto solamente uso Placas Leonardo, Mega 2560 y Uno, as que tiene que ser un Arduino Uno si llega hasta aqu
9 #define SERIE Serial
10 #endif
11 #endif
Esta nueva implementacin del mismo mtodo, que busca la coincidencia con varios posibles mensajes,
permite elegir entre diferentes acciones en funcin de la respuesta recibida desde el ESP8266, simplemente
encender el LED que corresponda.
https://polaridad.es/modulo-wi-esp8266-arduino-operacion-basica-conexion/ 6/9
2017-6-6 Operaciones bsicas sobre un mdulo wi ESP8266 desde Arduino
Un entero largo en Arduino ( unsigned long ) ocupa 4bytes (32bits), as que el valor mayor que puede
representar es 4294967295 (2 elevado a 32 menos uno, por empezar en cero). En una placa Arduino que
est funcionando continuamente el contador de milisegundos se reiniciar (volver a ser cero) cada 50 das
aproximadamente. Al restar con tipos de datos sin signo se reproduce el mismo comportamiento (dar la
vuelta al contador) por lo que es viable controlar indefinidamente el timeout.
Esperar un intervalo de tiempo mximo (TIMEOUT) antes de desistir en una operacin sobre el mdulo wifi ESP8266
Arduino
https://polaridad.es/modulo-wi-esp8266-arduino-operacion-basica-conexion/ 7/9
2017-6-6 Operaciones bsicas sobre un mdulo wi ESP8266 desde Arduino
El cdigo anterior muestra una implementacin muy bsica de la limitacin del tiempo de espera incorporando
las lneas marcadas con respecto de ejemplo que le precede. Como la verificacin del timeout se realiza
despus de procesar los datos que llegan desde el mdulo wifi ESP8266, puede darse por buena la operacin
aunque la recepcin tarde ms que el tiempo de espera impuesto.
https://polaridad.es/modulo-wi-esp8266-arduino-operacion-basica-conexion/ 8/9
2017-6-6 Operaciones bsicas sobre un mdulo wi ESP8266 desde Arduino
1 #define PIN_TEMPERATURA A0 // Pin analgico al que se conecta la salida del sensor de temperatura LM35
2 #define INTERVALO_LECTURA_TEMPERATURA 30000 // Leer la temperatura cada 30 segundos (30*1000)
3 #define INTERVALO_GRABACION_TEMPERATURA 300000 // Grabar la media de la temperatura cada 5 minutos (5*60*1000)
4
5 unsigned long muestras=0; // Nmero de veces que se ha medido la temperatura (para calcular la media)
6 float temperatura; // de -55.0 C a +150 C|de -550 mV a +1500 mV|de 0 V a 2.050 V| analogRead*5.0/1023.0*100-55.0->analogRead/2.46-55.0
7 float media_temperaturas=0.0;
8 unsigned long cronometro_lectura_temperatura;
9 unsigned long cronometro_grabacion_temperatura;
10
11 void setup()
12 {
13 Serial.begin(9600);
14 cronometro_lectura_temperatura=millis();
15 cronometro_grabacion_temperatura=millis();
16 }
17
18 void loop()
19 {
20 if((unsigned long)(millis()-cronometro_lectura_temperatura)>INTERVALO_LECTURA_TEMPERATURA)
21 {
22 cronometro_lectura_temperatura=millis();
23 temperatura=analogRead(PIN_TEMPERATURA)/2.46-55.0;
24 muestras++;
25 media_temperaturas=(float)temperatura/(float)muestras+media_temperaturas*(float)(muestras-1)/(float)(muestras
26 }
27 if((unsigned long)(millis()-cronometro_grabacion_temperatura)>INTERVALO_GRABACION_TEMPERATURA)
28 {
29 cronometro_grabacion_temperatura=millis();
30 // Aqu ira la parte del cdigo que graba la temperatura. Para verificar el funcionamiento, en este ejemplo simplemente se muestra en la consola
31 Serial.println("\nTemperatura media "+String(temperatura,DEC)+" C ("+String((float)millis()/1000.0,DEC)+" s)\n"
32 }
33 }
En este ejemplo de grabacin de temperaturas, se accede a un servidor web cada cinco minutos. Aunque la
disponibilidad no sea especialmente alta es de esperar que la propuesta funcionara pero si fuera necesaria
una frecuencia de grabacin mayor habra que implementar otros recursos, por ejemplo, se podra utilizar un
buffer de datos que esperan enviarse, para mandar varios cuando el servidor pueda atender y acopiarlos
para cuando no est disponible. Si la frecuencia con la que se necesita grabar los datos fuera an mayor
habra que plantear otro tipo de protocolos como alternativa al HTTP o incluso sustituir TCP por UDP para
poder enviar a la velocidad requerida la mayora de los datos an a costa de perder alguno.
Las operaciones que forman la tarea que se trata de realizar para ir enviando la temperatura seran:
Reiniciar el mdulo wifi
Desconectar del punto de acceso actual (por si existiera una conexin por defecto)
Establecer la configuracin. Para el ejemplo se supone que hay que configurar el modo de conexin
(simple) y el papel en las comunicaciones wifi (estacin)
Conectar al punto de acceso
Verificar que la conexin es correcta (en realidad, este es el punto de entrada) Si no hay conexin,
empezar el proceso desde el principio
Conectar al servidor
Enviar la peticin HTTP con los datos que deben almacenarse
El orden de las operaciones no tiene que ser exactamente as (aunque lo sea la operativa) y cada paso
puede necesitar varias rdenes AT del ESP8266, por ejemplo, la configuracin de la lista anterior
necesitara dos: AT+CIPMUX=0 y AT+CWMODE=1 .
https://polaridad.es/modulo-wi-esp8266-arduino-operacion-basica-conexion/ 9/9