====== Conectar ESP32 al WiFi con MicroPython ======
#;;
Anterior: [[Dispositivos I2C con ESP32 y MicroPython (código)]]
#;;
;;#
Siguiente: [[En construcción]]
;;#
En el último tutorial examinamos el código de un programa que permite mostrar información del microcontrolador ESP32 en un display, y ahora nos vamos a aprovechar de ese montaje que ya tenemos para dar un paso más y aprovecharnos de una de las características más interesantes de los microcontroladores de la gama ESP de Espressif: la capacidad de conectarse a través de una red WiFi a redes locales e incluso a Internet.
{{ :captura_de_pantalla_de_2023-02-25_20-02-01.png?600 |}}
from machine import Pin, SoftI2C
from lcd_api import LcdApi
from pico_i2c_lcd import I2cLcd
from time import sleep
from random import randint
from network import WLAN, STA_IF
I2C_ADDR = 0x27
filas = 2
columnas = 16
i2c = SoftI2C(scl=Pin(22), sda=Pin(21), freq=10000)
lcd = I2cLcd(i2c, I2C_ADDR, filas, columnas)
wlan = WLAN(STA_IF)
wlan.active(True)
ssid = 'Tu SSID'
password = 'Tu password WiFi'
def conectar():
contador = 0
while not(wlan.isconnected()) and contador < 10:
wlan.connect(ssid, password)
contador += 1
lcd.clear()
sleep(2)
while True:
lcd.move_to(0, 0)
if wlan.isconnected():
lcd.putstr('IP: '+wlan.ifconfig()[0])
else:
lcd.clear()
lcd.putstr('DESCONECTADO')
conectar()
sleep(2)
Como se puede ver, hay pocas diferencias entre este código y el anterior, y lo que hacemos, además de lo ya explicado en el anterior post, paso a paso, es lo siguiente:
Primero importamos de la librería «network» aquello que nos interesa, que en este caso son la clase «WLAN» y el interfaz «STA_IF»:
from network import WLAN, STA_IF
En la sección de declaraciones, además de lo ya declarado anteriormente para el lcd, declaramos las variables y objetos que necesitaremos para conectar el ESP32 a la red:
wlan = WLAN(STA_IF)
wlan.active(True)
ssid = 'Tu SSID'
password = 'Tu password WiFi'
«wlan» es el objeto que gestionará la conexión WiFi, que se declara como de tipo «STA_IF» (Station, o cliente WiFi. Existe otro modo, «AP_IF» que hará que el ESP32 funcione como punto de acceso y que otros dispositivos se conecten a él)
Tras la declaración de «wlan», activamos el interfaz con el método «active(True)».
Luego, declaramos las variables «ssid» y «password», a las que asignaremos respectivamente el nombre de la red WiFi (ojo, sólo redes WiFi de 2.4GHz) y la contraseña de la misma.
La función que viene a continuación conectará nuestro dispositivo a la red. Aunque muchos tutoriales crean un bucle continuo mientras el dispositivo no se conecte, yo soy de la opinión de que nuestro dispositivo debería poder seguir trabajando incluso en el caso de que la conexión se perdiera durante un tiempo. De esta forma, nuestros automatismos (como riegos, captadores de datos, etc) no dejarían de funcionar.
def conectar():
contador = 0
while not(wlan.isconnected()) and contador < 10:
wlan.connect(ssid, password)
contador += 1
Como se puede ver, incluyo una variable «contador» que se va incrementando con cada intento de conexión, y la función terminará si el dispositivo se conecta o si el citado contador llega al valor 10.
Llamaremos a esta función regularmente durante el bucle principal de ejecución, o bien cuando vayamos a necesitar conectarnos a la red para (intentar 8-)) enviar o recibir datos.
Y ahora, vamos al bucle principal de ejecución:
lcd.clear()
sleep(2)
while True:
if wlan.isconnected():
lcd.move_to(0, 0)
lcd.putstr('IP: '+wlan.ifconfig()[0])
else:
lcd.clear()
lcd.move_to(0, 0)
lcd.putstr('DESCONECTADO')
sleep(2)
conectar()
sleep(2)
Primero borramos el contenido del display, y luego esperamos un par de segundos, para poder ver mejor la evolución de la conexión.
«while True:» inicia un bucle sin fin, muy habitual cuando trabajamos con microcontroladores, ya que se supone que deben estar siempre en funcionamiento. Dentro de este bucle situamos el cursor del display en 0,0 con «lcd.move_to»
Y entonces consultamos el resultado del método wlan.isconnected(), que devolverá «True» o «False» según estemos o no conectados. Si estamos conectados, «lcd.putstr» mostrará la dirección IP que el DHCP de nuestro Router haya asignado, y si no lo estamos mostrará el mensaje «DESCONECTADO» y llamará a la función «conectar» para reintentar la conexión.
Como se puede ver, este ejemplo es muy simple, y sólo mostrará la dirección IP, pero esto significa que nuestro dispositivo será capaz de comunicarse por WiFi con otros dispositivos, gestionar una pequeña página web o funcionar como un bot para que nos envíe y reciba información a través de Telegram, XMPP o un montón de otros servicios.
#;;
Anterior: [[Dispositivos I2C con ESP32 y MicroPython (código)]]
#;;
;;#
Siguiente: [[En construcción]]
;;#
{{tag> cacharreo MicroPython ESP32 Thonny display I2C}}