2.1. WiFi – Esquema de instrucciones por Bloques

Proceso de conexión a un Router WiFi

Se desarrolla el primer paso del proceso, que tiene como objetivo conectar el dispositivo a la red de datos WiFi.


Las placas de desarrollo ESP8266/ESP32 tienen un LED incorporado que puede ser usado para el propósito de disponer de un medio de observación de estado de «conectado» o «NO conectado»en el ejercicio.

1.1 Estado – Conectado / NO conectado

El estado de Conectado a Wifi  se puede mostrar con un parpadeo LENTO del LED, encendido por un segundo  y apagado en el siguiente segundo, es decir un periodo total de 2 segundos.

Para el proceso de Inicio de conexión  a Wifi, el parpadeo del LED puede ser más RAPIDO y actua como indicador de estado del dispositivo.

En un microcontrolador el tiempo se marca en milisegundos, por lo que los valores a usar en cada estado del proceso se indican en ms en la siguiente tabla.

Estado Conectado No conectado
LED encendido 1000 ms 300 ms
LEd Apagado 1000 ms 200 ms
LENTO RAPIDO

El LED incorporado en la placa de desarrollo se direcciona o activa por medio de un PIN de la placa. El Pin predeterminado de la placa de desarrollo ESP8266 y ESP32 es el PIN 2, que como no requiere conexión adicional solamente se indica al inicio de las instrucciones.

int LED_pin = 2;

1.2 Parámetros de la red WiFi

Como en toda conexión a WiFi realizada con el computador o el móvil, se require dos parámetros:

parámetro variable valor ejemplo
identificador de router ssid "miRouter"
contraseña password "miRouterClave"

Los valores mostrados son de ejemplo, en su caso particular debe sustituir con los valores de la red que requiera conectarse.

2. Esquema de Instrucciones para el dispositivo

Las intrucciones para un microcontrolador usan tres bloques principales: inicio, configuración setup(), bucle o lazo de operación loop().

El bloque de inicio contiene las librerias de los procesos y funciones que se usaran en la operación del dispositivo, establecen  los parámetros de uso de los PINes de entrada y salida, parámetros de la red que se describieron en el numeral anterior. Adicionalmente contiene comentarios referentes al uso de las instrucciones, autor, etc.

El bloque de configuración, tambien conocido como setup(), usa los parámetros del bloque de inicio para configurar el dispositivo al arrancar, cuando se energiza o reinicia. Establece el tipo de uso de cada PIN, como entrada o salida, inicia los procesos de operación que requieren ser llamados una sola vez.

El bucle o lazo de operación, también conocido como loop(), es un lazo infinito que se encarga del comportamiento del dispositivo de acuerdo a las instrucciones dadas. Lo de lazo infinito se usa en el contexto que mientras el dispositivo tenga energía, esté conectado o no se reinicie.

/* Bloque de inicio 
 *  donde van las librerias, parámetros
 *  variables globales
 */
void setup() {
  // instrucciones de configuración inicial
  // funcionan una sola vez al encender el dispositivo

}

void loop() {
  // instrucciones de operación del dispositivo

}

void inicia_wifi(){
  // procedimientos o funciones que se repiten
  // en los bloques anteriores ej: conectar/reconectar
  // a WiFi, lectura de sensores, manejo de mensajes MQTT
  
}

Dado que durante el proceso de operación pueden ocurrir desconexiones a la red WiFI, podría ser necesario reiniciar el proceso de conexión. Los procesos que se repiten o se dedican a un propósito particular se realizan aparte.

Ante una situación de desconexión, al inicio del bucle de operación se realiza la revisión del estado de conexión para de no tener estado de «conectado» se realice el proceso nuevamente con varios intentos antes de proceder a atender las actividades normales de operación como la lectura de sensores.

La instrucción yield() cede tiempo de procesamiento del microcontrolador para procesar detalles de la parte inalambrica. Esta operación se usa con ESP8266 pues se tiene un solo núcleo y las operaciones trabajan en tiempo compartido.

En el caso de ESP32 que tiene dos núcleos, un núcleo se dedica a la parte del manejo inalámbrico, por lo que no es necesaria la instrucción yield().

3. Instrucciones con uso de pestañas en Arduino IDE

Cuando las instrucciones son numerosas, muchas líneas, existen varios bloques de procedimientos y funciones, se usan bloques que los agrupan en  pestañas. Esto simplifica la lectura de las instrucciones y permite enfocarse en sus partes en lugar de tener todas en una misma hoja.

La parte principal del algoritmo se escribe en la primera pestaña, que tiene el mismo nombre que el archivo. Para añadir pestañas se dispone de un botón a la derecha de la barra, marcado en la figura con rojo.