Académique Documents
Professionnel Documents
Culture Documents
Desarrollar un código para el NODE MCU que permita controlar un LED conectado al pin
GPIO5 mediante una página web instalada en una computadora conectada a una red WiFi.
Cada vez que se elija encender un LED, el LED se encenderá por 0.5 segundos y se apagara
por otros 0.5 segundos, repitiendo el ciclo10 veces.
Node MCU Cliente
Crea una conexión en modo cliente con un servidor y permite mostrar el código de una
página WEB
El servidor utilizado (host) es www.vermiip.es
Este código de ejemplo es de público dominio.
#include <ESP8266WiFi.h> //Incluye la librería ESP8266WiFi
const char* ssid = "renly"; //Indicamos el nombre de la red WiFi (SSID) a la que
queremos conectarnos.
const char* password = "77773748a"; //Indicamos la contraseña de red WiFi
const char* host = "www.vermiip.es"; //Declaramos el servidor de conexión
void setup()
{
Serial.begin(115200); //Inicializamos el Puerto Serie
Serial.println();
Serial.printf("Connecting to %s ", ssid); //Inicializamos la conexión Wi-Fi en modo Station
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println(" connected");
}
void loop()
{
WiFiClient client; //Inicializamos el cliente (client)
Serial.printf("\n[Conectando a %s ... ", host); //Establecemos la conexión con el servidor
if (client.connect(host, 80))
{
Serial.println("conectado]");
Serial.println("[Enviando peticion]"); //Enviamos la petición de datos
client.print(String("GET /") + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n" +
"\r\n"
);
Serial.println("[Respuesta:]"); //Leemos la respuesta del servidor
while (client.connected())
{
if (client.available())
{
String line = client.readStringUntil('\n');
Serial.println(line);
}
}
client.stop(); //Finalizamos la conexión con el servidor
Serial.println("\n[Desconectado]");
}
else
{
Serial.println("conexion con el servidor no lograda!]");
client.stop();
}
delay(10000);
}
Código HTML de la página Web insertada en el sketch, que hace de interfaz gráfico, para
interactuar con el LED (encenderlo y apagarlo):
<!DOCTYPE HTML>
<meta charset='UTF-8'>
<html>
<!--Se envía el estado del LED en función del estado del puerto GPIO-->
<h1>El LED está ahora: APAGADO/ENCENDIDO</h1>
Para poder conectar con la red WiFi realizaremos los siguientes pasos:
Desde el dispositivo cliente -con el que se requiere conectar (PC, Smart Phone, Tablet…) se
buscara las redes WiFi visibles.
Conectar con la red "renly" con la clave "77773748a".
Abrir el navegador Web e iremos a la dirección http://192.168.4.1
Desarrollar una aplicación que permita al NODE MCU conectarse como cliente de un
servidor WEB dentro de una red WiFi.
Se sugiere visitar la página web: http://www.esploradores.com
Los pasos para establecer una conexión como cliente son los siguientes:
Conexión WiFi
En primer lugar se debe establecer la conexión con el punto de acceso la red Wi-Fi (router),
para acceder a Internet. El modo de conexión es Station y está explicado detenidamente en
la siguiente práctica.
Selección del servidor
Una vez establecida la conexión a la red, el cliente se debe conectar con el servidor
específico. La dirección WEB del servidor se declara en la variable host: const char * host =
" www.vermiip.es”;
El servidor elegido es www.vermiip.es, que es una página de Internet que permite visualizar
nuestra IP pública. Esta elección se ha hecho para extraer en el segundo ejemplo el dato
concreto de nuestra IP pública del contenido de la página WEB.
Node MCU Usuario
#include <ESP8266WiFi.h> //Incluye la librería ESP8266WiFi
const char ssid[] = "nasus"; //Definimos la SSDI de nuestro servidor WiFi -nombre de red-
const char password[] = "nasus123"; //Definimos la contraseña de nuestro servidor
WiFiServer server(80); //Definimos el puerto de comunicaciones
int PinLED = 2; //Definimos el pin de salida - GPIO2 / D4
int estado = LOW; //Definimos la variable que va a recoger el estado del LED
void setup() {
Serial.begin(115200);
pinMode(PinLED, OUTPUT); //Inicializamos el GPIO2 como salida
digitalWrite(PinLED, LOW); //Dejamos inicialmente el GPIO2 apagado
server.begin(); //inicializamos el servidor
WiFi.mode(WIFI_AP);
WiFi.softAP(ssid, password); //Red con clave, en el canal 1 y visible
//WiFi.softAP(ssid, password,3,1); //Red con clave, en el canal 3 y visible
//WiFi.softAP(ssid); //Red abierta
Serial.println();
Serial.print("Direccion IP Access Point - por defecto: "); //Imprime la dirección IP
Serial.println(WiFi.softAPIP());
Serial.print("Direccion MAC Access Point: "); //Imprime la dirección MAC
Serial.println(WiFi.softAPmacAddress());
//IPAddress local_ip(192, 168, 1, 1); //Modifica la dirección IP
//IPAddress gateway(192, 168, 1, 1);
//IPAddress subnet(255, 255, 255, 0);
//WiFi.softAPConfig(local_ip, gateway, subnet);
//Serial.println();
//Serial.print("Access Point - Nueva direccion IP: ");
//Serial.println(WiFi.softAPIP());
}
void loop()
{
// Comprueba si el cliente ha conectado
WiFiClient client = server.available();
if (!client) {
return;
}
// Espera hasta que el cliente envía alguna petición
Serial.println("nuevo cliente");
while(!client.available()){
delay(1);
}
// Imprime el número de clientes conectados
Serial.printf("Clientes conectados al Access Point: %dn", WiFi.softAPgetStationNum());
// Lee la petición
String peticion = client.readStringUntil('r');
Serial.println(peticion);
client.flush();
// Comprueba la petición
if (peticion.indexOf('/LED=ON') != -1) {
estado = HIGH;
for(int i=0;i<=11;i++){
digitalWrite(PinLED,HIGH);
delay(500);
digitalWrite(PinLED,LOW);
delay(500);
}
}
if (peticion.indexOf('/LED=OFF') != -1){
estado = LOW;
}
//Enciende o apaga el LED en función de la petición
//digitalWrite(PinLED, estado);
// Envía la página HTML de respuesta al cliente
client.println("HTTP/1.1 200 OK");
client.println(""); //No olvidar esta línea de separación
client.println("<!DOCTYPE HTML>");
client.println("<meta charset='UTF-8'>");
client.println("<html>");
//Imprime el estado del led
client.print("<h1>El LED está ahora: ");
if(estado == HIGH) {
client.print("ENCENDIDO</h1>");
} else {
client.print("APAGADO</h1>");
}
//Se crean enlaces para modificar el estado del LED
client.println("Presiona <a href='/LED=ON'>AQUÍ</a> para encender el LED<br>");
client.println("Presiona <a href='/LED=OFF'>AQUÍ</a> para apagar el LED<br><br>");
//Se crean cajas de comprobación (checkbox) para modificar el estado del LED
client.println("<input type='checkbox' onClick=location.href='/LED=ON'> ENCENDER
</input><br>");
client.println("<input type='checkbox' onClick=location.href='/LED=OFF'> APAGAR
</input><br><br>");
//Se crean botones para modificar el estado del LED
client.println("<button type='button' onClick=location.href='/LED=ON'> ENCENDER
</button>");
client.println("<button type='button' onClick=location.href='/LED=OFF'> APAGAR
</button><br><br>");
//Se crean botones con estilos para modificar el estado del LED
client.println("<button type='button' onClick=location.href='/LED=ON'
style='margin:auto; background-color:green; color:#A9F5A9; padding:5px; border:2px solid
black; width:200;'><h2> ENCENDER</h2> </button>");
client.println("<button type='button' onClick=location.href='/LED=OFF'
style='margin:auto; background-color:red; color:#F6D8CE; padding:5px; border:2px solid
black; width:200;'><h2> APAGAR</h2> </button><br><br>");
//Se crea un único botón para modificar el estado del LED
if(estado == HIGH) {
client.print("<button type='button' onClick=location.href='/LED=OFF'> APAGAR
</button><br><br>");
} else {
client.print("<button type='button' onClick=location.href='/LED=ON'> ENCENDER
</button><br><br>");
}
client.println("</html>");
delay(1);
Serial.println("Petición finalizada"); // Se finaliza la petición al cliente. Se inicaliza la
espera de una nueva petición.
Conclusiones.
En el laboratorio se probó que el NODE MCU ESP 8266 puede ser configurado como servidor
de WiFi para el control de un LED, pero además del control de un LED desde una pagina
web, las aplicaciones de esta configuración son muchas pues se podría controlar diversas
herramientas mediante WiFi.
En la parte de la aplicación del uso del NODE MCU ESP 8266 como cliente de un servidor
web nos permite enlazar la placa de desarrollo con una pagina web, pudiendo ver en el
monitor serie del IDE Arduino la pagina a la que se direcciono la placa.
Bibliografía.
ESPloradores,Varios,http://redestelematicas.com/modos-de-funcionamiento-de-las-
redes-wi-fi/ , recuperado el 22 de noviembre de 2018.
ESPloradores,Varios,http://www.esploradores.com/conexion-del-procesador-esp8266-
como-cliente-de-un-servidor-web/ , recuperado el 22 de noviembre de 2018.
Introducción: cómo se establece una red Wi-Fi
Técnicamente Wi-Fi es una tecnología que permite constituir una red local inalámbrica, es
decir, conectar varios dispositivos cercanos entre sí de forma inalámbrica, es decir, sin
cables.
Para constituir una red Wi-Fi se utiliza un dispositivo de interconexión conocido como Punto
de acceso inalámbrico (Wireless Access Point), también nombrado por sus siglas en inglés
WAP, o simplemente AP. Este dispositivo es el que establece los parámetros de
funcionamiento de la red Wi-Fi, centraliza y gestiona todas las comunicaciones
inalámbricas.
Una red
Wi-Fi constituida por un AP se dice que es una red Wi-Fi funcionando en modo
Infraestructura. Muchos fabricantes lo han denominado modo AP. En dicho modo, el AP
establece la red Wi-Fi, básicamente permitiendo configurar el nombre de la red (parámetro
conocido como SSID), el tipo de seguridad (WPA, WPA2) y la clave de acceso a la red en caso
de ser necesaria.
Como se observa en la figura anterior un AP constituye una red Wi-Fi pero por si solo no
proporciona acceso a Internet. El AP, además de establecer una red Wi-Fi, permite conectar
los dispositivos inalámbricos a una red cableada. Para ello, todos los APs disponen de un
puerto Ethernet. Si el AP está conectado a una red cableada con conexión a Internet (o
directamente a un router), los dispositivos Wi-Fi tendrán acceso a Internet.
En esta figura se observa la conexión de un AP al switch de una red cableada que tiene
acceso a Internet.
Habitualmente, el nombre de la red Wi-Fi (el SSID) es “público”, es decir, que cualquier
dispositivo Wi-Fi que esté dentro del área de cobertura del AP, puede detectar la presencia
de la red Wi-Fi y solicitar la conexión a la misma. Habitualmente, el software de
configuración detecta automáticamente el tipo de seguridad y solicita la clave de conexión
a la red.
Una de las posibilidades que ofrecen los AP es el uso de diferentes modos de configuración.
A continuación hacemos un repaso a los modos de funcionamiento más habituales que un
AP puede soportar:
En los próximos apartados veremos ejemplos de los principales usos de los modos
anteriores.