Diseñamos aquí un servidor HTTP básico con una placa NodeMCU con ESP8266 y el IDE de Arduino
Para más referencia de cómo agregar la familia de plaquetas y las bibliotecas necesarias para la familia ESP, les ofrezco leer el reciente artículo ESP8266 (WiFi): Hacer que parpadee un LED desde el IDE de Arduino (más básico que este) donde se desarrollada con mucho detalle tanto que es un ESP8266 como esta instalación.
Es posible que la comunidad ESP no tenga mucho entusiasmo en programar con Arduino, y sí hacerlo con las herramientas propias de la línea del ESP8266. Y es totalmente lógico y razonable. Pero a veces es un alivio disponer de la facilidad del uso del IDE de Arduino y su lenguaje simplificado, más cuando uno está acostumbrado a estas herramientas.
Por eso se ha escrito una biblioteca (o librería) y definición de placas, para programar esta versátil y potente línea con el IDE de Arduino.
Usaremos una placa NodeMCU, que contiene un módulo ESP12E, versión 1.0, un cable USB adecuado para esta placa y una computadora conectada a Internet. El ESP8266, el chip básico del sistema, requiere una red WiFi, así que suponemos que ese tipo de conexión estará disponible.
Definición de dispositivos y librería
Necesitamos disponer del IDE de Arduino, una versión actualizada. La última que ofrece oficialmente http://arduino.cc es la 1.8.8. Si usted está trabajando con una de versión anterior a 1.8.x le recomiendo actualizar.
Copio aquí la explicación del artículo anterior. Si ya instaló en esa ocasión, no tiene que hacer todo esto y puede saltar a la sección Diseño del servido http básico, más abajo.
El ESP8266 se puede programar desde el IDE de Arduino. Para eso hay que instalar lo que se llama un plugin, en el que está incluido todo lo necesario para compilar y subir programas que fueron escritos tal como si fuesen .INO de Arduino.
Debemos incorporar librerías y los programas de manejo de las placas con el chip ESP8266 a nuestro IDE. Para hacerlo, debemos indicarle la URL desde donde se obtienen.
Para hacerlo, debemos abrir el menú Archivo, y luego Preferencias.
Veremos este panel, en la parte inferior el recuadro de texto rotulado Gestor de URLs Adicionales de Tarjetas. Dentro de él, usando copiar y pegar, se debe introducir el texto indicado aquí:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
(copie y pegue en el recuadro):
Luego pulse en el botón Ok.
Ahora debemos ir al menú Herramientas, luego Placa.
Y finalmente Gestor de Tarjetas, se abrirá una ventana como la que sigue, en la cual escribimos, en el recuadro superior de filtro/busqueda, “ESP8266” (antes de terminar de escribir ya aparecerá el Gestor de Tarjetas que buscamos, que indica que fue creado por “ESP8266 Community”. Allí pulsamos sobre Instalar:
Al abrir nuevamente Herramientas, y luego Placa, deslizamos la lista para ver lo que aparece al final de ella (abajo), y vemos que ya existen las opciones referidas a los ESP8266:
Así queda todo preparado para programar NodeMCU ESP12E desde el IDE Arduino.
Servidor HTTP básico
Este pequeño servidor que proponemos muestra el título que elijamos en nuestro navegador. Hemos elegido escribir «Saludos de Robots Argentina», pero el texto es a elección del programador.
Declaramos la librería ESP8266WiFi.h al inicio, definimos el nombre y el password de la red (la de su proveedor y la de su conexión; y un puerto.
1 2 3 4 5 6 7 8 9 10 11 |
#include <ESP8266WiFi.h> //Nombre de red const char* nombre = "el_nombre_que_le_asigno_el_proveedor"; //Password const char* password = "su_clave_para_conectarse"; // Puerto (se suele usar 80 por defecto, pero en algunos casos hay que // consultar al proveedor de internet de cual dispone en su conexion) WiFiServer server(80); |
En la función setup() inicializamos el puerto Serial. A través de él podremos monitorear desde la PC para saber a qué IP se ha conectado la placa.
1 2 3 |
void setup() { Serial.begin(115200); delay(50); // breve espera para que se concrete la conexion |
Ahora se realiza la conexión a la red WiFi. Si se logra, lo indica por serie y lo veremos en el Monitor Serie del IDE.
1 2 3 4 5 |
// Conexion al WiFi WiFi.begin(nombre, password); while (WiFi.status() != WL_CONNECTED) delay(100); //aqui debemos esperar unos instantes Serial.println("Conexión exitosa a WiFi"); |
Puesta en operación del servidor.
1 2 3 |
// Iniciar el servidor server.begin(); Serial.println("Iniciado el servidor"); |
Mostrar por Monitor Serie la dirección IP que le ha otorgado a la placa el router de la red.
1 2 3 4 5 |
// Escribir la direccion IP Serial.print("el IP es: "); Serial.print(WiFi.localIP()); Serial.println(""); } |
En la función loop() se comprueba si está establecida la nueva conexión. Si así es, se envía el contenido de la página web, que consta de cabeceras HTML y el contenido que deseamos para la página.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
void loop() { // Comprobar si se ha conectado algun cliente WiFiClient client = server.available(); if (client) { Serial.println("Nueva conexion"); // Escribir las cabeceras HTML client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(""); client.println("<!DOCTYPE HTML>"); //Escribir el contenido que vamos a visualizar client.println("<html>"); client.println("<body>"); client.print("Saludos de Robots Argentina"); client.println("</body>"); client.println("</html>"); } delay(1000); // reescribe cada 1 segundo } |
Programa completo:
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 |
#include <ESP8266WiFi.h> //Nombre de red const char* nombre = "el_nombre_que_le_asigno_el_proveedor"; //Password const char* password = "su_clave_para_conectarse"; // Puerto (se suele usar 80 por defecto, pero en algunos casos hay que // consultar al proveedor de internet de cual dispone en su conexion) WiFiServer server(80); void setup() { Serial.begin(115200); delay(50); // breve espera para que se concrete la conexion // Conexion al WiFi WiFi.begin(nombre, password); while (WiFi.status() != WL_CONNECTED) delay(100); //aqui debemos esperar unos instantes Serial.println("Conexión exitosa a WiFi"); // Iniciar el servidor server.begin(); Serial.println("Iniciado el servidor"); // Escribir la direccion IP Serial.print("el IP es: "); Serial.print(WiFi.localIP()); Serial.println(""); } void loop() { // Comprobar si se ha conectado algun cliente WiFiClient client = server.available(); if (client) { Serial.println("Nueva conexion"); // Escribir las cabeceras HTML client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(""); client.println("<!DOCTYPE HTML>"); //Escribir el contenido que vamos a visualizar client.println("<html>"); client.println("<body>"); client.print("Saludos de Robots Argentina"); client.println("</body>"); client.println("</html>"); } delay(1000); // reescribe cada 1 segundo } |
Copiamos el programa en el IDE del Arduino, y ahora, antes de probar si se compila correctamente, debemos conectar la placa NodeMCU a USB y decirle al IDE de Arduino qué tipo de placa vamos a programar. Debemos elegir en Herramientas el «NodeMCU 1.0 (ESP-12E Module)». Si usted tiene otro tipo de placa con ESP8266 y sabe cómo conectarla a USB, elija en la lista su módulo correcto y todo funcionará del mismo modo. Espere a que el IDE detecte la placa y defina en que número de COM serie está.
Cargar el programa
Dentro del menú «Herramientas» cambiamos el tipo de placa por una NodeMCU 1.0 (ESP-12E Module), o el modelo que tengamos.
Al elegir y si se conecta bien indicará estos valores: frecuencia de la CPU: 80 MHz, tamaño de flash: 4M (1M SPIFFS), velocidad de carga: 115200. El puerto dependerá de la máquina (en Linux puede ser /dev/ttyUSB0 o /dev/ttyUSB1).
Determinada esta elección dispositivo y conexión COM, ya se puede cargar el programa de la manera habitual.
Al correr el programa nos indicará en qué dirección IP encontramos la página web que hemos creado en la placa. Introduciéndola en la barra de dirección del navegador, podremos verla con el mensaje que hemos elegido. Si este mensaje tuviese una parte variable, por ejemplo algún valor que varía, como el registro de un sensor de temperatura u otro indicador, y/o la hora/minuto/segundo.
Artículos relacionados: ESP8266 (WiFi): Hacer que parpadee un LED desde el IDE de Arduino