Como usar MicroPython com ESP8266 e ESP32 para conectar-se a uma rede WiFi

Cómo usar MicroPython con ESP8266 y ESP32 para conectarse a una red WiFi

ESP8266 y ESP32 son placas de desarrollo WiFi populares. Estos microcontroladores de placa única son compatibles con el marco MicroPython y se utilizan a menudo para Internet de las cosas (IoT). Usando MicroPython, ESP8266 y ESP32 pueden conectarse a Internet a través de WiFi y Ethernet. Los puertos MicroPython utilizan Ethernet o una red de área local inalámbrica (WLAN).

En este artículo, analizaremos las redes MicroPython, que son útiles para administrar conexiones a Internet a través de puertos compatibles con MicroPython. También discutiremos cómo se puede usar el módulo de red MicroPython para configurar una conexión a Internet en ESP8266 y ESP32 a través de WiFi.

módulo de red
El módulo de red MicroPython está escrito para configurar conexiones WiFi. El módulo proporciona dos interfaces WiFi: estación y punto de acceso. La interfaz del punto de acceso está activa de forma predeterminada.

  • En la interfaz del punto de acceso, el ESP8266/ESP32 o cualquier otro puerto MicroPython actúa como un punto de acceso WiFi para que otros dispositivos se conecten a Internet.
  • En la interfaz de la estación, el ESP8266/ESP32 o cualquier otro puerto MicroPython se conecta al enrutador para acceder a Internet.

El módulo de red se puede importar a un script MicroPython con esta instrucción:
importar red, tiempo

El módulo de red solo proporciona controladores de red y configuraciones de enrutador y se utiliza para configurar interfaces de red de hardware. Se requiere un módulo de socket para obtener servicios de red desde las respectivas interfaces de red. Esto significa que solo podemos usar el módulo de red para conectarnos a Internet, administrar la conexión a Internet configurando los ajustes del enrutador y crear un punto de acceso.

El módulo de red no proporciona ninguna clase abstracta de tarjeta de interfaz de red (NIC). En cambio, ofrece diferentes clases de interfaz de red implementadas a través de puertos MicroPython para diferentes hardware.

Estas clases de interfaz de red incluyen:

  • WLAN – para interfaces WiFi
  • WLANWiPy: para controles WiFi específicos de WiPy
  • LAN – para Ethernet
  • CC3K – para módulos WiFi CC3000
  • WIZNET5K – para módulos WiFi WIZnet5x00.

Todas las clases de interfaz de red están diseñadas para hardware de red específico. Una clase de interfaz de red específica tiene este método constructor: clase red.AbstractNIC(id=None,…)

El constructor representa un objeto de interfaz de red. Los parámetros pasados ​​dependen de la clase específica de la interfaz de red. Si se crea una instancia de más de una interfaz de la misma clase, el primer parámetro debe ser un "id".

Por ejemplo, el siguiente constructor crea un objeto para la interfaz de red WiFi:
nic = red.WLAN(red.STA_IF)

Independientemente de la clase de interfaz de red, el módulo de red proporciona los siguientes métodos...

ResumenNIC.active : Se utiliza para activar o desactivar una interfaz de red. Se requiere un argumento booleano. Si se pasa como True como argumento, se activará la interfaz de red respectiva. Si se pasa falso como argumento, la interfaz de red respectiva se desactivará. Si el método se llama sin argumentos, devuelve el estado actual de la interfaz de red determinada.

Nota: Todos los demás métodos solo funcionan en la interfaz de red si este método está habilitado.

ResumenNIC.connect : Conecta la interfaz a una red. Este método solo debe invocarse para interfaces que no siempre están conectadas. Los parámetros pasados ​​dependen de la clase de interfaz de red y/o del puerto MicroPython específico.

Por ejemplo, el objeto de interfaz WiFi requiere que se pase el SSID como parámetro para conectarse a una red. Si se pasa un solo parámetro a este método, siempre será el identificador de servicios de red. Otros parámetros son específicos de palabras clave. Se pasan para especificar tipos de identificadores de servicios alternativos o para proporcionar parámetros de conexión adicionales. Por ejemplo, el objeto de interfaz WiFi puede requerir una contraseña de red como parámetro adicional.

ResumenNIC.disconnect : desconecta la interfaz de la red.

ResumenNIC.isconnected : comprueba si la interfaz está conectada a una red. Si devuelve True, la interfaz está conectada a la red. De lo contrario, devuelve Falso.

ResumenNIC.scan : busca conexiones o servicios de red disponibles. Devuelve una lista de tuplas que coinciden con cualquiera de los parámetros de servicio encontrados. El formato de tupla depende de la clase específica de la interfaz de red. Una tupla para un objeto de red WiFi es la siguiente: (ssid, bssid, canal, RSSI, seguridad, oculto). Este método permite que un filtro verifique los resultados. Se puede llamar para buscar un servicio, canal o servicios específicos de un conjunto específico. Los parámetros establecidos para la duración del escaneo y otros parámetros de red también se pueden pasar como argumentos.

ResumenNIC.status : Se utiliza para consultar la información de estado dinámico de una red. Si el método se llama sin argumentos, devuelve el estado del enlace de red. De lo contrario, se puede pasar la clase de interfaz de red específica del parámetro para recuperar información específica. Por ejemplo, pasar "estaciones" como argumento a un objeto de interfaz de punto de acceso WiFi devuelve una lista de todas las estaciones conectadas a ese punto de acceso. De manera similar, pasar "RSSI" como argumento a la interfaz de una estación WiFi devuelve RSSI (que es el indicador de intensidad de la señal recibida) del punto de acceso o enrutador conectado.

ResumenNIC.ifconfig : Se utiliza para configurar u obtener parámetros de interfaz de red a nivel de IP. Estos parámetros incluyen dirección IP, máscara de subred, puerta de enlace y servidor DNS. Si se llama sin argumentos, devuelve los parámetros anteriores como una tupla de 4. Para configurar los parámetros de la interfaz de red en el nivel de IP, se debe pasar una tupla de 4 con los parámetros mencionados anteriormente.

ResumenNIC.config : Se utiliza para configurar o consultar parámetros específicos de red o hardware. Cuando se llama para establecer parámetros, los parámetros deben especificarse con argumentos de palabras clave. Es posible configurar múltiples parámetros específicos de red o hardware en una sola llamada a un método, donde todos los parámetros se pasan como argumentos específicos de palabras clave. Solo se puede consultar un único parámetro en una llamada a un método.

Algunos ejemplos válidos de este método son:

ap_if.config(ssid='Mi AP')
ap_if.config(ssid='Mi AP', canal=11)
imprimir(ap_if.config('canal'))
imprimir(ap_if.config('ssid'))

Estos métodos están disponibles para todas las clases de interfaz de red que incluyen WLAN, WLANWiPy, LAN, CC3K y WIZNET5K.

El módulo de red también proporciona un método para configurar u obtener el modo WiFi. Este método es network.phy_mode . Sin embargo, sólo está disponible para ESP8266. Se puede pasar como argumentos MODE_11B, MODE_11G o MODE_11N para configurar el modo WiFi en IEEE 802.11b, IEEE 802.11g o IEEE 802.11n respectivamente. Si se llama sin argumentos, devuelve el modo WiFi actual.

Clase WLAN
El módulo de red de clase WLAN proporciona un controlador para procesadores de red WiFi. La clase es parte del módulo de red. El método constructor es el siguiente:
clase red.WLAN (interface_id)

El método crea un objeto de interfaz de red WiFi. Como se mencionó, hay dos tipos de interfaces WiFi compatibles con MicroPython: estación y punto de acceso. Este es un ejemplo válido para crear un objeto de estación WiFi:
red de importación
sta_if = red.WLAN(rede.STA_IF)

A continuación se muestra un ejemplo válido para crear un objeto de punto de acceso WiFi:
red de importación
ap_if = rede.WLAN(rede.AP_IF)

La clase WiFi del módulo de red proporciona estos métodos...

WLAN.active : se utiliza para activar o desactivar el objeto de interfaz de red WiFi. Si se pasa como argumento Verdadero, se activa la interfaz WiFi identificada por el objeto WLAN. Si se pasa falso como argumento, la interfaz WiFi se desactivará. Si se llama sin argumentos, el método devuelve el estado actual del objeto de red WiFi.

WLAN.connect(ssid=Ninguno, key=Ninguno, *, bssid=Ninguno) : se utiliza para conectarse a un enrutador o punto de acceso WiFi. Toma como argumento SSID o BSSID del servicio de red disponible. Es posible que sea necesario pasar la clave de red como argumento adicional. Si se pasa el BSSID, la conexión de red se restringirá al punto de acceso con la dirección MAC proporcionada. En este caso también se debe pasar el SSID.

WLAN.disconnect : Desconecta la interfaz con la conexión WIFI actual.

WLAN.scan : Disponible solo para objetos de estación WiFi. El método busca WiFi disponible y redes ocultas, siempre que la interfaz WLAN lo permita. Devuelve una lista de tuplas con información sobre los puntos de acceso WiFi disponibles. Los valores utilizados para seguridad son “0” para red WiFi abierta, “1” para WEP, “2” para WPA=PSK, “3” para WPA2-PSK y “4” para WPA/WPA2-PSK. Los valores “0” y “1” indican puntos de acceso WiFi visibles y ocultos, respectivamente.

WLAN.status : Devuelve el estado del enlace de red.

El estado puede ser:

  • STAT_IDLE: no hay conexión ni actividad.
  • STAT_CONNECTING: la conexión está en curso.
  • STAT_WRONG_PASSWORD: la conexión de red falló debido a una clave de red incorrecta.
  • STAT_NO_AP_FOUND: la conexión de red falló porque ningún punto de acceso respondió a la solicitud de conexión.
  • STAT_CONNECT_FAIL: la conexión de red falló debido a otro motivo.
  • STAT_GOT_IP: la red se conectó exitosamente y se obtuvo la IP.

Para el objeto estación, el método se puede llamar con el argumento "RSSI", que devuelve el indicador de intensidad de la señal recibida para un punto de acceso determinado.

WLAN.isconnected : para un objeto de estación WiFi, este método devuelve True si el puerto está conectado a un punto de acceso WiFi, lo que indica que se obtuvo una dirección IP válida. Para el objeto WiFi de punto de acceso, el método devuelve Verdadero si al menos una estación está conectada al puerto que funciona como punto de acceso WiFi.

WLAN.ifconfig : Se utiliza para configurar u obtener parámetros de interfaz de red a nivel de IP. Estos parámetros incluyen dirección IP, máscara de subred, puerta de enlace y servidor DNS. Si se llama sin argumentos, devuelve los parámetros anteriores como una tupla de 4. Para configurar los parámetros de la interfaz de red en el nivel de IP, se debe pasar una tupla de 4 con los parámetros mencionados anteriormente.

WLAN.config : se utiliza para configurar u obtener parámetros de red WiFi específicos. Esto se hace pasando argumentos de palabras clave. Estos parámetros se enumeran a continuación...

Conexión manual a una red WiFi
Puede conectar manualmente el ESP8266/ESP32 a una red WiFi utilizando el símbolo del sistema de Python. Se puede realizar una conexión manual utilizando el indicador de Python de uPyCraft IDE o Thonny IDE. También puede funcionar con una conexión en serie a un símbolo del sistema de Python a través de un programa de terminal (como Putty).

Configuramos una conexión manual a una red WiFi para este proyecto usando la consola de comandos IDE de uPyCraft. Para importar el módulo de red, use este comando:
red de importación

A continuación, cree un objeto de estación WiFi para conectar la placa ESP8266/ESP32 con una conexión WiFi. Ejecute el siguiente comando en la consola de uPyCraft para crear una interfaz WiFi de estación.
estación = red.WLAN(red.STA_IF)

Active la interfaz WiFi de la estación llamando al método WLAN.active. Ejecute el siguiente comando en la consola de UPyCraft para activar la interfaz WiFi de la estación:
estación.activa (Verdadero)

Una vez que la interfaz WiFi está activa, se puede conectar a WiFi con el SSID y la clave de red conocidos. La clave de red no es necesaria si la conexión WiFi está abierta. Ejecute este comando en la consola de UPyCraft para conectarse al WiFi disponible:
estación.conectar( , )

Para comprobar si la interfaz de red está conectada correctamente a una red WiFi, llame al método isconnected. Utilice este comando en la consola de UPyCraft para verificar la conexión:
estación.está conectada

Si el método devuelve True, la interfaz de red se ha conectado correctamente a WiFi. Verifique los parámetros del nivel de IP llamando al método ifconfig. Ejecute el siguiente comando en la consola de UPyCraft para ver los parámetros de red a nivel de IP, que incluyen la dirección IP, la máscara de subred, la puerta de enlace y el servidor DNS:
estación.ifconfig

La interfaz de red se puede desactivar si es necesario llamando al método activo. Utilice este comando en la consola de UPyCraft para desactivar la interfaz de red WiFi:
estación.activa (Falso)

Captura de pantalla de una conexión manual a una red WiFi usando ESP8266.

Conexión con una llamada de función
Una conexión WiFi se puede configurar mediante una llamada de función utilizando un script MicroPython. Los mismos comandos utilizados para la conexión WiFi manual también se utilizan para una llamada de función, excepto que los comandos están encapsulados en un cuerpo de función con validación en diferentes puntos.

A continuación se muestra una función de ejemplo típica para configurar una conexión WiFi utilizando puertos compatibles con MicroPython, incluidos ESP8266 y ESP32.

red de importación
estación = red.WLAN(red.STA_IF)
def conectar(id, pswd):
ssid=identificación
contraseña=pswd
si station.isconnected == Verdadero:

imprimir(“Ya conectado”)
volver

estación.activa (Verdadero)

estación.connect(ssid, contraseña)
mientras que station.isconnected == Falso:
gastar

imprimir(“Conexión exitosa”)

imprimir(estación.ifconfig)

Notarás que declaramos el objeto estación como una variable global. Esto nos ayudará a crear una función para desconectar la red WiFi cuando sea necesario.

A continuación se muestra una función de ejemplo para desactivar una conexión WiFi:

definición de desconexión:
si estación.activa == Verdadero:

estación.activa (Falso)
si station.isconnected == Falso:

imprimir(“Desconectado”)

Este script MicroPython es un ejemplo válido para conectar y desconectar ESP8266/ESP32 a una conexión WiFi:

red de importación
estación = red.WLAN(red.STA_IF)
def conectar(id, pswd):
ssid=identificación
contraseña=pswd
si station.isconnected == Verdadero:

imprimir(“Ya conectado”)
volver

estación.activa (Verdadero)

estación.connect(ssid, contraseña)
mientras que station.isconnected == Falso:
gastar

imprimir(“Conexión exitosa”)

imprimir(estación.ifconfig)
definición de desconexión:
si estación.activa == Verdadero:

estación.activa (Falso)
si station.isconnected == Falso:

imprimir(“Desconectado”)
conectar(“DESNUDO”, “***********”)
desconectar

"NUA" es el nombre/SSID de la red WiFi en el script anterior. Al lado del SSID está su contraseña de red o clave de red. Debe pasar el SSID y la clave de red de la conexión WiFi en el script para conectar el ESP8266/ESP32 a Internet.

Una captura de pantalla del resultado después de cargar y ejecutar el script anterior en UPyCraft para ESP8266.

Conexión automática a una red WiFi
ESP8266/ESP32 se puede configurar para conectarse automáticamente a WiFi. Esto se puede hacer agregando los comandos para conectarse a una red WiFi en el archivo boot.py. El archivo boot.py siempre se ejecuta primero cuando se inicializa ESP8266/ESP32 o cualquier puerto MicroPython.

Agregue el siguiente código al final del archivo boot.py y vuelva a cargar el archivo boot.py para ESP8266/ESP32:

red de importación
estación = red.WLAN(red.STA_IF)
si station.isconnected == Verdadero:

imprimir(“Ya conectado”)
estación.activa (Verdadero)
estación.conectar(“NUA”, “**********”)
mientras que station.isconnected == Falso:
gastar
imprimir(“Conexión exitosa”)
imprimir(estación.ifconfig)

Nuevamente, "NUA" es el nombre/SSID de la red WiFi. Junto al SSID está su contraseña o clave de red. Debe pasar el SSID y la clave de red de la conexión WiFi en el script para conectar el ESP8266/ESP32 a Internet.

El archivo boot.py modificado.

La conexión WiFi se puede verificar en el script de ejecución principal usando este fragmento de código...

red de importación
estación = red.WLAN(red.STA_IF)
si station.isconnected == Verdadero:

imprimir ("¡Conectado a WiFi!")
imprimir(estación.ifconfig)

En el script principal, la conexión WiFi se puede desactivar usando este fragmento de código...

si estación.activa == Verdadero:
estación.activa (Falso)
si station.isconnected == Falso:
imprimir(“Desconectado”)

El script de ejecución principal, que verifica la configuración de conexión WiFi predeterminada al inicio y la desactiva si está activa.

Aquí hay una captura de pantalla del resultado al cargar y ejecutar el archivo boot.py modificado.

Conclusión
MicroPython proporciona un módulo de red para conectarse a diferentes medios. Una interfaz de red comúnmente utilizada es WiFi. Los puertos MicroPython, incluidos ESP32 y ESP8266, se pueden configurar como una estación WiFi y puntos de acceso WiFi cuando se usa el firmware MicroPython.

Normalmente, ESP32/ESP8266 debe configurarse como una estación WiFi para que Internet de las cosas se conecte correctamente a WiFi y se comunique con una plataforma o servicio de IoT/nube. Posteriormente, el módulo de socket se puede utilizar para ejecutar varios protocolos de Internet y acceder a servicios de red.

Puede conectar manualmente el ESP32/ESP8266 o cualquier puerto MicroPython a una red WiFi utilizando el script de ejecución principal. La conexión a una red WiFi también se puede automatizar modificando el archivo boot.py.

Regresar al blog

Deja un comentario

Ten en cuenta que los comentarios deben aprobarse antes de que se publiquen.