Módulo ESP8266-01 Arduino | Estación meteorológica WIFI. ESP8266-01 + ThingsPeak.com
Índice
- Estación meteorológica WIFI |Introducción
- Estación meteorológica WIFI | Hardware
- ⇒ Estación meteorológica WIFI | Módulo ESP8266-01
- Estación meteorológica WIFI | Software
En la siguiente entrada vamos a aprender todos los conceptos necesarios para alimentar el módulo ESP8266-01 de forma correcta y cargar el software que utilizaremos para esta estación meteorológica WIFI con Arduino + ESP8266-01 + ThingsPeak.com.
Pinout ESP8266-01
Comprar ESP8266-01
- GND ⇒ GND
- GPIO2 ⇒ es una entrada/salida de propósito general, similar a un pin digital de la placa Arduino. Es el pin digital número 2. Lo mantendremos siempre en estado HIGH.
- GPIO0 ⇒ es una entrada salida de propósito general, similar a un pin digital de la placa Arduino. Es el pin digital número 0. LOW para programar, HIGH para ejecutar código.
- RXD ⇒ es el pin por donde se van a recibir los datos del puerto serie.
- TXD ⇒ es el pin por donde se van a transmitir los datos del puerto serie.
- CH_PD ⇒ pin para apagar y encender el ESP-01: con 0V (LOW) se apaga, con 3,3V (HIGH) se enciende. Lo mantendremos siempre en estado HIGH.
- RESET ⇒ pin para resetear el ESP8266-01: con 0V (LOW) se resetea. Lo mantendremos siempre en estado HIGH.
- Vcc ⇒ es por donde alimentamos el ESP8266-01. Funciona a 3,3V y admite un máximo de 3,6V. La corriente suministrada debe ser mayor que 200mA.
El módulo acepta dos modos de funcionamiento en función de conexionado del pin GPI0 que hayamos realizado:
- Con pin GPIO0 a HIGH y GPIO2 a HIGH → Modo Flash → ejecuta el programa cargado.
- Con pin GPIO0 a LOW y GPIO2 a HIGH → Modo UART → a la espera de cargar un programa.
GPIO0 | GPIO2 | |
Modo UART (programar) | LOW | HIGH |
Modo FLASH (ejecutar código) | HIGH | HIGH |
La única diferencia entre ambas configuraciones es el pin GPIO0, que en un caso esta conectado a GND (Modo FLASH) y en el otro está al aire y unido internamente a +3.3V a través de una resistencia pull-up (Modo UART).
Cargar Software al módulo ESP8266-01
Conexionado necesario
A la hora de alimentar el módulo, es muy importante usar una fuente capaz de proporcionar mínimo 250mA de forma continua. En este caso, he utilizado una batería de +3.7V y un regulador de tensión LM1117-3.3V para garantizar una tensión constante de +3.3V. Utilizando un interruptor manual S1 que hemos instalado en el esquema de la entrad anterior, puenteamos los dos MOSFET (uno de protección de batería, y el otro de alimentación del ESP8266-01) , permitiendo alimentar el módulo de forma aislada:
Como hemos visto, el módulo ESP8266-01 cuenta con dos modos de funcionamiento en función de la conexión con el pin GPIO0 que hagamos (+3.3V o GND), ‘modo programación’ y ‘modo ejecutar código’. Por lo tanto, el primer paso para cargar software es cablear el módulo con la placa Arduino de forma que activemos el ‘modo programación’ o ‘UART’. Para ello, utilizaremos los pines del conector 4×1 que hemos instalado en la placa de soldadura y conectaremos el módulo de la siguiente forma utilizando cable macho-hembra:
Como veis, para cargar software utilizamos los pines TX/RX de la placa Arduino. Fijaos bien. El pin TX de la placa Arduino tiene que estar conectado al pin RX del módulo ESP8266-01 y viceversa. ¡Ni se os ocurra conectar el pin TX con el TX! El pin TX solo habla o transmite, y el RX solo escucha… de nada servirá conectar dos pines que solo hablan, nunca llegarán a atenderse.
Una vez aclarado el tema de la conexión y antes de cargar nada, vamos a realizar un pequeño diagnóstico del dispositivo para asegurar que está vivo y bien cableado para cargar código. Para ello, cableamos el módulo como en la imagen anterior, abrimos el monitor serie y reiniciamos el módulo (quitar y poner alimentación con el interruptor manual). Recibiremos una traza de este tipo. Si veis caracteres sin sentido, tendréis que ajustar el ‘Baud Rate’ del monitor serie de Arduino hasta que podáis leer las trazas que envía el módulo. Deberías recibir algo como esto:El primer parámetro de boot mode: (1,0) tiene que estar a 1. Si está a uno el módulo ha arrancado en modo ‘cargar software’. No hagáis caso del segundo parámetro entre paréntesis. Si por el contrario recibís algo diferente, revisad el cableado.
¡¡Estamos listo para cargar software!!
Consejo: no alimentéis el módulo directamente desde la salida +3.3V de la placa Arduino. Puede que os funcione para cargar software, pero tendréis problemas cuando intentéis conectaros a vuestra red domestica (lo digo por experiencia).
Nota: hay mucho debate en torno a si se puede conectar en canal TX de la placa Arduino (que es de +5V) directamente al módulo ESP8266-01 (que trabaja a +3.3V). Como veis yo he hecho una conexión directa, de hecho, es la única manera en la que me ha funcionado. En teoría habría que utilizar o un divisor resistivo o un level shifter, pero a mi no me han dado resultado. Hay varias webs donde se indica que estos pines son compatibles con +5V (aquí, aquí y aquí), pero el datasheet del módulo no lo especifica. Yo lo tengo conectado directamente y funciona sin problemas.
Cargar software a ESP8266-01 (ejemplo WiFiScan)
Antes de nada vamos a comprobar que tanto el conexionado como el módulo en si funcionan de forma correcta, instalando la librería del módulo ESP8266-01 y cargando uno de los ejemplos que incluye.
Para descargar la librería del módulo ESP8266-01, abrimos el IDE de Arduino: Archivo → Preferencia. En el recuadro donde pone ‘Gestor de URLs adicionales de tarjetas’ pegamos el siguiente enlace:
https://arduino.esp8266.com/stable/package_esp8266com_index.json
Vamos al gestor de tarjetas (Herramientas → Placas → Gestor de tarjetas…) y buscamos ESP8266. Instalamos la librería (en la imagen ya estaría instalado):
Instalado. Ahora, en gestor de tarjetas, podemos elegir el módulo ESP8266 como una placa más justo con los diferentes modelos de Arduinos. Cuando seleccionamos esta placa, el IDE de Arduino sabrá que el software que va a cargar va destinado a un módulo ESP8266. No hace falta modificar la configuración por defecto, la dejamos tal cual está:
Una vez descargado y seleccionado el módulo, en la lista de ejemplos disponibles (Archivo → Ejemplos) aparecerá una lista de ejemplo para cargar en el módulo ESP. En primer lugar, recomiendo cargar alguno de los ejemplos que vienen con la librería ‘<ESP8266WiFi.h>’, en concreto el sketch WiFiScan (Archivo → Ejemplos → ESP8266WiFi WiFiScan). Este ejemplo muestra todas las redes WIFI detectadas por el módulo y las publica por el canal serie.
Una vez abierto el ejemplo, pulsamos ‘Subir’ como si de un sketch normal se tratará. Automáticamente, el software se subirá al módulo ESP8266-01. Mantened el módulo apagado mientras se está compilando el programa, y en el instante en el vemos ‘Subiendo…’ en el IDE de Arduino, encended el módulo.
Si habéis seguido los pasos de forma satisfactoria hasta ahora, deberíais ver en el monitor serie una lista con todas las redes WIFI detectadas por el módulo.
Si habéis conseguido cargar el ejemplo de forma correcta, y detectáis vuestra red doméstica, felicidades, lo más complicado ya está hecho. Si en cambio habéis tenido problemas para cargar software, revisad el conexionado y esta entrada donde resumo los problemas mas comunes con este módulo y su solución. No sigáis adelante hasta no solventar estos problemas.
Crear cuenta ThingsPeak.com
Una vez que somos capaces de cargar software al módulo ESP8266-01 y de que el módulo detecta nuestra red doméstica, vamos a crear una cuenta en ThingsSpeak.com y subir datos de prueba a la web. Para ello utilizaremos la librería ThingSpeak.h. Podéis descargarla aquí.
Tras instalar la librería, el siguiente paso es crear una cuenta el ThingSpeak.com. Acudimos a la web, nos registramos con nuestro email, y creamos un nuevo canal en la pestaña ‘Channels → My Channels’. En este caso vamos a escribir sobre 5 campos o gráficas, por lo que habrá que generar estos campos también en la web. Añadir tantos campos como variables queráis visualizar. Para este proyecto vamos a registrar las siguientes cinco variables:
Cargar software a ESP8266-01 (software final)
Finalmente, siguiendo el mismo procedimiento que que para cargar el ejemplo que hemos visto, cargamos el software final que utilizaremos en la aplicación. No os preocupéis si hay cosas que no entendéis, analizaremos el código en detalle en a siguiente entrada.
#define SECRET_SSID "Tech_D0002774" // replace MySSID with your WiFi network name #define SECRET_PASS "GSCSVRRP" // replace MyPassword with your WiFi password #define SECRET_CH_ID 782272 // replace 0000000 with your channel number #define SECRET_WRITE_APIKEY "5XFY1WR0IIJ3NL01" // replace XYZ with your channel write API Key
Importante reemplazar los parámetros anteriores por los datos de vuestra red WIFI y cuenta de ThingsPeak.com:
#include "ThingSpeak.h" #include <ESP8266WiFi.h> #define SECRET_SSID "xxx" // replace MySSID with your WiFi network name #define SECRET_PASS "xxx" // replace MyPassword with your WiFi password #define SECRET_CH_ID xxx // replace 0000000 with your channel number #define SECRET_WRITE_APIKEY "xxx" // replace XYZ with your channel write API Key char ssid[] = SECRET_SSID; // your network SSID (name) char pass[] = SECRET_PASS; // your network password int keyIndex = 0; // your network key Index number (needed only for WEP) WiFiClient client; unsigned long myChannelNumber = SECRET_CH_ID; const char * myWriteAPIKey = SECRET_WRITE_APIKEY; const size_t LengthData = 5; float data[LengthData]; int ESP_Status, IC = 0; void setup() { Serial.begin(9600); // Initialize serial WiFi.mode(WIFI_STA); ThingSpeak.begin(client); // Initialize ThingSpeak delay(1000); } void loop() { if (Serial.available() >= LengthData * sizeof(data[0])) { Serial.readBytes((byte*)data, LengthData * sizeof(data[0])); if (WiFi.status() != WL_CONNECTED) { for (int i = 0; i <= 1; i++) { WiFi.begin(ssid, pass); delay(3000); if (WiFi.status() == WL_CONNECTED) break; } } ThingSpeak.setField(1, data[0]); ThingSpeak.setField(2, data[1]); ThingSpeak.setField(3, data[2]); ThingSpeak.setField(4, data[3]); ThingSpeak.setField(5, data[4]); ESP_Status = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey); Serial.print(ESP_Status); } delay(100); }
Una vez cargado el software, ya podemos conectar el módulo ESP8266-01 al conector 4×2, saliendo del ‘modo programación’ o ‘modo UART‘ para pasar al modo ‘ejecutar código’ o ‘modo FLASH‘:
Siguiente entrada:
- Estación meteorológica WIFI |Introducción
- Estación meteorológica WIFI | Hardware
- Estación meteorológica WIFI | Módulo ESP8266-01
- ⇒ Estación meteorológica WIFI | Software
Estación meteorológica con PCB
También os puede interesar esta otra estación meteorológica, algo más compleja al estar diseñada con PCB de fabricación profesional.