devicescript-wifi-gestion-configuracion

Cómo configurar WiFi en DeviceScript

  • 3 min

La conexión WiFi permite comunicar una placa DeviceScript con otros equipos y servicios de red. El runtime gestiona la interfaz, mientras el programa utiliza API de más alto nivel como HTTP, MQTT o sockets.

En un programa clásico para ESP32 es habitual encontrar las credenciales junto al código:

const char* ssid = "MI_CASA";
const char* password = "1234_password_super_secreta";
WiFi.begin(ssid, password);
Copied!

Esto tiene un problema enorme: Tus contraseñas están escritas en el código. Si subes el proyecto a GitHub, le regalas tu WiFi a todo el mundo. Además, si cambias la contraseña del router, tienes que recompilar y reflashear el chip.

En DeviceScript, la gestión del WiFi se trata como un servicio del sistema operativo, separado de tu lógica de programa. Hoy vamos a ver cómo hacerlo bien.

Configurar las credenciales

Olvídate de escribir la contraseña en el .ts (aunque se puede, no se debe). La forma recomendada en DeviceScript es inyectar la configuración en la memoria no volátil del dispositivo (Settings).

Usar un archivo .env.local

La extensión de DeviceScript tiene un asistente integrado para añadir settings al dispositivo:

Conecta una placa compatible.

Abre la paleta de comandos con Ctrl+Shift+P o F1.

Ejecuta DeviceScript: Add Device Settings....

Guarda WIFI_SSID y WIFI_PWD en .env.local.

El contenido de los ficheros .env se transfiere a la memoria flash al desplegar el bytecode.

Ventaja: Tu código main.ts queda limpio. Puedes compartir el código con un amigo y él pondrá sus propias credenciales en su placa sin tocar tu script.

El fichero debe tener este aspecto:

WIFI_SSID=MiRedWiFi
WIFI_PWD=MiPassword
Copied!

No incluyas .env.local en el control de versiones. DeviceScript reserva .env.defaults para ajustes compartidos que sí se pueden publicar y .env.local para secretos y valores propios de cada instalación.

Comprobar la conectividad

La API documentada no requiere crear un objeto Wifi para consultar una dirección IP. La forma práctica de saber si la red está disponible es realizar la operación que necesita tu aplicación y tratar su error.

import { fetch } from "@devicescript/net"

async function comprobarConexion() {
    try {
        const respuesta = await fetch("https://example.com/")
        console.log(`Red disponible: HTTP ${respuesta.status}`)
    } catch (error) {
        console.warn("No se ha podido acceder a la red", error)
    }
}

comprobarConexion()
Copied!

Las operaciones de red son asíncronas. Mientras una petición espera respuesta, otras tareas pueden avanzar, pero conviene aplicar reintentos limitados y espera progresiva para no saturar la red cuando el punto de acceso no está disponible.

Limitaciones y consideraciones

  1. Banda y seguridad: Las capacidades dependen de la placa y del firmware. Comprueba qué bandas y métodos de autenticación admite tu modelo.
  2. Memoria: DeviceScript solo permite un socket abierto a la vez y TLS consume una parte importante de la memoria disponible.
  3. Consumo: La radio WiFi puede dominar el consumo. En un equipo con batería, apágala entre medidas si el caso de uso y la plataforma lo permiten.