Construir un servidor HTTP básico con NodeMCU y Arduino IDE Deja un comentario

¡Buenas, humanos! Hoy os enseñaré a construir un servidor HTTP básico con la placa NodeMCU y el IDE de Arduino.

Hace un tiempo escribí este tutorial que explica cómo hacer lo mismo pero utilizando ESPlorer y Lua. A ver, Lua está muy bien y el IDE de ESPlorer también… pero a veces se agradece tener la facilidad de uso de Arduino y su lenguaje propio. Por suerte, alguien escribió una librería para poder programar esta fantástica placa con el IDE de Arduino, que de bien seguro todos tenemos por mano…

Materiales

Bueno, realmente no vamos a necesitar casi nada:

  • Una placa NodeMCU. La que tengo yo es la versión 1.0.
  • Un cable USB
  • Un ordenador con conexión a Internet

Y por supuesto, una red WiFi. Aunque si estás leyendo este tutorial, creo que el Internet te funciona bastante bien ?


1. Instalación de la librería

Necesitaremos el IDE de Arduino versión 1.8.0 o superior.

Lo abrimos y nos vamos a File->Preferences. Dónde pone “Additional Boards Manager URLs” añadimos

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Si más adelante queremos añadir nuevas URLs podremos hacerlo separándolas por comas.

Ahora nos vamos a Tools -> Boards -> Board Manager. Se abrirá una ventana con todo un listado de placas que podemos programar con el IDE de Arduino, pero cuyos compiladores todavía no están instalados.

En el buscador escribimos “Node”, y seleccionamos la primera opción que nos aparece. Pulsamos el botón Install.

Escribimos ‘Node’ en el buscador

Seleccionamos la opción que nos aparece, y después pulsamos ‘Install’

¡Es así de sencillo! Ahora ya estamos preparados para programar NodeMCU…


2. Servidor HTTP básico

Vamos a crear un pequeño servidor que mostrará el texto “ROBOLOGS” en nuestro navegador. ¡Más fácil imposible!

Empezaremos por importar la librería ESP8266WiFi.h, definir el nombre y el password de la red, así como el puerto.

#include 

//Nombre de la red
const char* nombre = "nombre_red";

//Password
const char* password = "password";

//Puerto (dejar en 80 por defecto)
WiFiServer server(80);

En el void setup inicializaremos el puerto Serial para hacer un poco de debug y saber a qué IP se ha conectado la placa.

void setup() {
  Serial.begin(115200);
  delay(50); //Hay que dejar un margen de tiempo

Intentamos conectarnos a la red WiFi y si lo conseguimos escrbiremos un mensaje de éxito.

  // Conectar a la red WiFi
  WiFi.begin(nombre, password);
  while (WiFi.status() != WL_CONNECTED)
    delay(100); //aqui tambien hay que dejar un margen de tiempo
  Serial.println("Conectado a la red WiFi");

Después encendemos el servidor.

  // Iniciar el servidor
  server.begin();
  Serial.println("Se ha iniciado el servidor");

También mostraremos la dirección IP que el router le ha dado a la placa.

  // Escribir la direccion IP
  Serial.print("IP: ");
  Serial.print(WiFi.localIP());
  Serial.println("");
 
}

Dentro del void loop comprobaremos si se ha establecido una nueva conexión, y si es así escribiremos las cabeceras HTML junto con el contenido de la página.

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("");
  
    //Escribir el contenido que vamos a visualizar
    client.println("");
    client.print("ROBOLOGS");
    client.println("");
    
  }
 
}

Este será el programa final:

#include 

//Nombre de la red
const char* nombre = "nombre_red";

//Password
const char* password = "password";

//Puerto (dejar en 80 por defecto)
WiFiServer server(80);



void setup() {
  Serial.begin(115200);
  delay(50); //Hay que dejar un margen de tiempo

 
  // Conectar a la red WiFi
  WiFi.begin(nombre, password);
  while (WiFi.status() != WL_CONNECTED)
    delay(100); //aqui tambien hay que dejar un margen de tiempo
  Serial.println("Conectado a la red WiFi");
 
  // Iniciar el servidor
  server.begin();
  Serial.println("Se ha iniciado el servidor");
 
  // Escribir la direccion IP
  Serial.print("IP: ");
  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("");
  
    //Escribir el contenido que vamos a visualizar
    client.println("");
    client.print("ROBOLOGS");
    client.println("");
    
  }
 
}
 

¡Hey, no tan rápido! Antes de darle al botoncito de Upload hay que decirle al IDE qué tipo de placa estamos intentando programar. Esto no es una Arduino normal y corriente, al fin y al cabo…


3. Cargar el programa

Dentro del menú Tools cambiamos el tipo de placa por una NodeMCU 1.0 (ESP-12E Module), o el modelo que tengamos.

La frecuencia de la CPU será 80 MHz, el tamaño flash 4M (1M SPIFFS), la velocidad de carga será 115200 y el puerto dependerá de la máquina (en Linux probablemente sea ‘/dev/ttyUSB0‘ o ‘/dev/ttyUSB1‘).

Una vez cambiados estos parámetros podemos cargar el programa pulsando el botón de Upload de la forma normal. Cuándo se haya cargado podemos abrir la consola Serial para ver cuál es la dirección IP de la placa y escribirla en el navegador.

¡Y esto es todo! Ya hemos visto cómo crear un servidor muy sencillo con NodeMCU y el IDE de Arduino. Como de costumbre, podéis dejarme un comentario si tenéis alguna duda sobre el tutorial. ¡Hasta otra, humanos! ?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

0
    0
    Tu Carrito
    Tu carrito esta vacíoVolver a la tienda
    Enviar Whatsapp
    Hola 👋
    ¿En qué podemos ayudarte?