La conexión Wi-Fi en MicroPython es la conexión de la placa con una red inalámbrica mediante el módulo network.
Hasta ahora, nuestros programas vivían aislados dentro del chip. Lo interesante del ESP32 y del ESP8266 es su radio Wi-Fi. Gracias a ella, podemos enviar datos a la nube, controlar relés desde el móvil o sincronizar la hora con internet.
En MicroPython, todo lo relacionado con la red se maneja a través del módulo estándar network.
Antes de escribir código, es importante entender que nuestra placa puede funcionar en dos modos (e incluso en los dos a la vez):
- Station (
IF_STA): La placa se comporta como tu móvil o tu portátil. Se conecta a un router Wi-Fi existente para tener acceso a internet o a la red local. Es el modo más habitual. - Access Point (
IF_AP): La placa se comporta como un router. Genera su propia red Wi-Fi y otros dispositivos (tu móvil u otra placa) se conectan a ella. Es útil para la configuración inicial o en zonas sin cobertura.
Modo estación: conectarse al router
Este es el modo que usarás el 99% de las veces para proyectos IoT. Queremos que nuestra placa se conecte al Wi-Fi de casa para enviar datos.
El proceso siempre sigue estos pasos:
- Activar la interfaz de estación (
network.WLAN.IF_STA). - Conectar usando SSID (nombre de red) y contraseña.
- Esperar a que el router nos asigne una IP (DHCP).
Función de conexión con tiempo de espera
No basta con lanzar la orden de conexión; hay que verificar que ha tenido éxito. Puedes incluir esta función reutilizable en tu boot.py.
import network
import time
def conectar_wifi(ssid, password):
# Creamos el objeto de interfaz de estación
wlan = network.WLAN(network.WLAN.IF_STA)
# Si ya estamos conectados, no hacemos nada
if not wlan.isconnected():
print('Conectando a la red...')
# Activamos la interfaz
wlan.active(True)
# Iniciamos la conexión
wlan.connect(ssid, password)
# Esperamos hasta que conecte o pasen 10 segundos
max_wait = 10
while not wlan.isconnected() and max_wait > 0:
print(f"Esperando conexión... {max_wait}")
time.sleep(1)
max_wait -= 1
# Comprobación final
if wlan.isconnected():
print('¡Conexión establecida!')
print('Datos de red (IP, máscara, gateway, DNS):', wlan.ifconfig())
else:
print('Fallo al conectar. Revisa contraseña o alcance.')
# Uso de la función
conectar_wifi("MiCasa_WiFi", "ContraseñaSuperSecreta")
El método .ifconfig() es muy útil. Nos devuelve una tupla con 4 valores: (IP, Máscara de Subred, Gateway, DNS).
Desactivar el modo AP por defecto
Un detalle curioso (y a veces molesto) es que muchas placas ESP32/ESP8266 vienen con el modo Access Point activado de fábrica. Esto significa que, aunque te conectes a tu router, tu placa sigue emitiendo una red abierta llamada “MicroPython-xxxx”.
Para ahorrar energía y mejorar la seguridad, es buena práctica apagarlo si no lo usas:
ap = network.WLAN(network.WLAN.IF_AP)
ap.active(False) # Apagamos el AP
Modo punto de acceso: crear tu propia red
Imagina que quieres controlar un robot en medio del campo, donde no hay routers. O que has creado un producto comercial y necesitas que el usuario introduzca su contraseña de Wi-Fi la primera vez.
Para eso usamos el modo AP. La placa genera su propia red Wi-Fi.
Creación del punto de acceso
import network
def crear_punto_acceso(nombre_ap, password_ap):
ap = network.WLAN(network.WLAN.IF_AP)
# Activamos la interfaz
ap.active(True)
# Configuramos el AP
# security=3 corresponde a WPA2-PSK
ap.config(ssid=nombre_ap, key=password_ap, security=3)
print(f"Red Wi-Fi creada: {nombre_ap}")
print("Dirección IP del AP:", ap.ifconfig()[0])
# Uso
crear_punto_acceso("Mi_Proyecto_ESP32", "12345678")
Por defecto, la IP del ESP32 en modo AP suele ser 192.168.4.1. Si te conectas con tu móvil a esa red y abres esa IP en el navegador, estarás “hablando” con tu placa.
Longitud de la contraseña Si usas seguridad WPA/WPA2 (que deberías), la contraseña debe tener al menos 8 caracteres. Si pones menos, el AP no se iniciará o dará error.
Modo híbrido (STA + AP)
Lo genial del hardware del ESP32/ESP8266 es que puede mantener ambas interfaces activas simultáneamente.
Puedes estar conectado al Wi-Fi de tu casa para subir datos a la nube (STA) y, a la vez, generar una red propia (AP) para que un técnico se conecte a configurar parámetros sin necesidad de acceder a la red doméstica.
import network
# Instanciamos ambas
sta = network.WLAN(network.WLAN.IF_STA)
ap = network.WLAN(network.WLAN.IF_AP)
# Activamos ambas
sta.active(True)
ap.active(True)
# Configuramos independientemente...
sta.connect("RouterCasa", "clave")
ap.config(ssid="Mantenimiento_Bot", key="admin123", security=3)
Buenas prácticas de seguridad
No escribas contraseñas en main.py
Subir tu código a GitHub con las claves de tu casa hardcodeadas es un error clásico.
Lo recomendable es crear un archivo separado llamado secrets.py (y añadirlo al .gitignore si usas git).
Archivo secrets.py:
WIFI_SSID = "MiCasa"
WIFI_PASS = "123456"
Archivo main.py:
import secrets
from wifi_manager import conectar_wifi # Suponiendo que guardaste la función
conectar_wifi(secrets.WIFI_SSID, secrets.WIFI_PASS)
Con esto, ya tenemos la puerta abierta al mundo. En las próximas secciones, usaremos esta conexión para crear servidores web y enviar mensajes MQTT.