servidor wep encendiedno y apagando un led



objetivo 

El objetivo de esta práctica es conectar el NodeMCU con un punto de acceso de una red WiFi. Es lo que se conoce como conexión en modo Station (STA). Esta es una de las tres formas de conexión WiFi de que dispone el procesador ESP8266  instalado en el NodeMCU. Las otras dos formas son:

Conexión en modo Access Point (AP), donde el el NodeMCU crea una red WiFi de área local (Wireless Local Area Network – WLAN ).
Una suma de los dos modos de conexión  Access Point + Station (AP+STA).


Esta conexión la utilizaremos para poder controlar el encendido y apagado de un LED a través otros dispositivos clientes que se conecten al mismo punto de acceso, como PC’s, Smart Phones, Tablets, etc. y aprovechando que el punto de acceso estará conectado a Internet (un router WiFi), mejoraremos la estética página Web, que sirve para el control del LED, incluyendo imágenes de la red nos permitirán conocer su estado (encendido/apagado) de una manera visual.


conceptos básicos.

En el modo Station el NodeMCU se conecta con un punto de acceso (Access Point – AP), como con un router, otro NodeMCU, etc., del que tenga su SSID (Service Set Identifier), es decir “nombre de red” y, en su caso, clave de acceso. De esta manera el NodeMCU queda integrado en la red WiFi como servidor/cliente, pudiendo interactuar con el resto de los dispositivos que la forman.






estableciendo conexion.

La conexión del módulo al punto de acceso se realiza con la función begin.

De forma predeterminada el ESP8266 del NodeMCU se intentará volver a conectar a la red WiFi a la que estaba conectado si se produce la desconexión –no es necesario programarlo-.

Esta es la estructura más habitual de la función, para conectarse a un punto de acceso específico:


WiFi.begin(ssid, password);
1
WiFi.begin(ssid, password);
Los parámetros tienen es el siguiente significado:

ssid : es el nombre de red, SSID (Service Set Identifier) del punto de acceso.
password : es el la clave del del punto de acceso.


Para conectar el módulo al último punto de acceso utilizado,  la función sería como sigue (el ssid y el password quedan almacenados en la memoria flash):


WiFi.begin();
1
WiFi.begin();


La función con todos sus parámetros es:


WiFi.begin(ssid, password, channel, bssid, connect);
1
WiFi.begin(ssid, password, channel, bssid, connect);
Los parámetros que faltan por definir tienen es el siguiente significado:

channel :  establece el canal WiFi específico del punto de acceso con el que se comunicarse. Este parámetro es opcional.
bssid : es la dirección MAC  del punto de acceso. Este parámetro es opcional.
connect : es un parámetro booleano, que si se establece en false hace que el ESP8266 almacene en la memoria flash los nuevos parámetros de conexión, pero que no se conecte. Si se establece en true, intenta conectarse.

gestión de la conexión. 

Proporciona métodos para gestionar la conexión, como por ejemplo, reconectar, desconectar o verificar el estado de la conexión.
WiFi.reconnect()

Reconecta el módulo a un punto de acceso.

Si no ha estado conectado antes no realiza ninguna función.

Ejemplo:

Wifi.reconnect()Arduino

Wifi.reconnect();
while (Wifi.status != WL_CONNECTED)
{
  delay(500);
  Serial.print(".");
}

Wifi.reconnect();
while (Wifi.status != WL_CONNECTED)
{
  delay(500);
  Serial.print(".");

}
  
información de la conexión.

Obtiene información sobre la conexión como la MAC o la dirección IP.

WiFi.macAddress()

Es la función que utilizamos para conocer la dirección MAC de la conexión con el punto de acceso.

Ejemplo 1 -MAC generada mediante una cadena (string)-:


if (WiFi.status() == WL_CONNECTED)
{
  Serial.printf("Dirección MAC -Server-: %s\n", WiFi.macAddress().c_str());
}

if (WiFi.status() == WL_CONNECTED)
{
  Serial.printf("Dirección MAC -Server-: %s\n", WiFi.macAddress().c_str());
}
Ejemplo 2 -MAC generada por un puntero de 6 elementos- :

WiFi.macAddress()Arduino

if (WiFi.status() == WL_CONNECTED)
{
  uint8_t macAddr[6];
  WiFi.macAddress(macAddr);
  Serial.printf("Dirección MAC -Server-: %02x:%02x:%02x:%02x:%02x:%02x\n",
macAddr[0], macAddr[1], macAddr[2], macAddr[3], macAddr[4], macAddr[5]);
}


if (WiFi.status() == WL_CONNECTED)
{
  uint8_t macAddr[6];
  WiFi.macAddress(macAddr);
  Serial.printf("Dirección MAC -Server-: %02x:%02x:%02x:%02x:%02x:%02x\n",
macAddr[0], macAddr[1], macAddr[2], macAddr[3], macAddr[4], macAddr[5]);
}

circuito electrónico.


El LED estará conectado en el puerto GPIO02 (D4).

Este LED, como comprobaremos, está relacionado en lógica inversa con el LED que tiene el ESP8266 del NodeMCU junto a la antena. Esto significa que cuando un LED se enciende, el otro se apaga.

SKETCH.

En el sketch se hace un repaso de gran parte de las funciones de la librería ESP8266WiFi.h que permiten crear en modo Station. Se han añadido comentarios para facilitar su seguimiento.

También en el sketch está insertado el código HTML de la página Web que visualizaremos con el navegador (Mozzilla, Google Chrome, Internet Explorer, etc.), al realizar la conexión con el NodeMCU.

Para poder comprenderlo mejor resulta conveniente verlo a parte.


Este es el código HTML que se ejecuta cuando el LED está encendido:

 Y este es el código HTML que se ejecuta cuando el LED está apagado:

Un navegador visualizará la página Web así , en función del estado del LED:del LED:


Como se puede observar, se han insertado fotografías para visualizar el estado del LED y para mejorar el aspecto del botón de encendido/apagado. Estás fotografías están ubicadas en las siguientes direcciones:

http://nodemakers.es/Practicas_html/LED_encendido.png
http://nodemakers.es/Practicas_html/LED_apagado.png
http://nodemakers.es/Practicas_html/encender_300x88.png
http://nodemakers.es/Practicas_html/apagar_300x88.png


Se puede probar a modificaras utilizando otras fotografías de Internet.

El botón de encendido y apagado, para lograr la comunicación con el punto de acceso une la IP local del NodeMCU con la cadena “/LED=ON” o “/LED=OFF” en función de lo que hayamos pulsado. Quedaría algo así, en función de la IP local del NodeMCU:

http://192.168.1.133/LED=ON    o   http://192.1.133.1/LED=ON

De esta manera el NodeMCU, recibe la petición “/LED=ON” o “/LED=OFF” y la analiza utilizando la función peticion.indexOf(), para determinar las acciones a realizar.




El sketch a subir al NodeMCU será el siguiente:



Comentarios