Correo: [email protected] - Teléfono: +56979962128

La Raspberry Pi Pico W incluye el chip Infineon CYW43439, que contiene una radio de 2,4 GHz que proporciona Wi-Fi 802.11n. Este tutorial es una introducción al Wi-Fi en la Raspberry Pi Pico W con MicroPython. Explicaremos cómo configurar la Pico como estación Wi-Fi y como punto de acceso (PA), cómo buscar redes Wi-Fi cercanas, cómo conectar la Pico a la red local y cómo obtener información sobre su dirección IP.

 
Raspberry Pi Pico W: Introducción a Wi-Fi MicroPython
 

Requisitos previos: firmware de MicroPython

Para seguir este tutorial, necesitas tener instalado el firmware MicroPython en tu placa Raspberry Pi Pico. También necesitas un IDE para escribir y cargar el código en la placa. El IDE de MicroPython recomendado para Raspberry Pi Pico es Thonny IDE.

 

Estación Wi-Fi y punto de acceso Wi-Fi

La Raspberry Pi Pico puede actuar como una estación Wi-Fi o como un punto de acceso Wi-Fi.

 

Estación Wi-Fi

Cuando la Raspberry Pi Pico se configura como estación Wi-Fi, puede conectarse a otras redes (como tu router o red local). En este caso, el router asigna una dirección IP única a tu placa. Puedes comunicarte con la Raspberry Pi Pico mediante otros dispositivos (estaciones) que también estén conectados a la misma red, consultando la dirección IP local de la Raspberry Pi Pico.

 
Estación Wi-Fi Raspberry Pi Pico
   

Como el router también está conectado a Internet, podemos 

solicitar información de Internet

 mediante nuestra placa, como datos de APIs (datos meteorológicos, por ejemplo), publicar datos en plataformas online, utilizar iconos e imágenes de Internet en las páginas de nuestro servidor web o incluir librerías JavaScript.

Sin embargo, en algunos casos, es posible que no tengamos un router cerca para conectar la Raspberry Pi Pico. En este caso, puedes configurar tu placa como punto de acceso.

 

Punto de acceso (AP)

Cuando su Pico está configurado como punto de acceso (PA), otros dispositivos (como su smartphone, tableta u ordenador) pueden conectarse sin necesidad de un router; el Pico crea su propia red Wi-Fi. A diferencia de un router, un punto de acceso no se conecta a una red cableada ni a internet, por lo que no puede acceder a bibliotecas externas, publicar lecturas de sensores en la nube ni usar servicios como el correo electrónico.

 
Raspberry Pi Pico como punto de acceso
 

Interfaces de estación y punto de acceso

Hay un módulo de MicroPython llamado network

 utiliza para configurar y gestionar todo lo relacionado con Wi-Fi. Hay dos interfaces Wi-Fi: una para la estación y otra para el punto de acceso. El siguiente ejemplo crea una interfaz de estación y una de punto de acceso, y comprueba si están activas´

 
# Rui Santos & Sara Santos - Random Nerd Tutorials
# Complete project details at https://RandomNerdTutorials.com/raspberry-pi-pico-w-wi-fi-micropython/

import network

sta_if = network.WLAN(network.STA_IF)
print(sta_if.active())

ap_if = network.WLAN(network.AP_IF)
print(ap_if.active()
 

Después de ejecutar este ejemplo, debes obtener algo como lo siguiente. Rpi Pico Comprobación de las interfaces de la estación Wi-Fi y del punto de acceso

En este momento no tienes ninguna interfaz activa.

Escaneo de redes Wi-Fi cercanas

Para buscar redes Wi-Fi cercanas, primero debemos iniciar una red de estaciones de interfaz Wi-Fi. Por ejemplo:

# Init Wi-Fi interface 
wlan = network.WLAN(network.STA_IF) 
wlan.active(True)

Entonces podemos usar

wlan.scan()

Para buscar redes cercanas. Este comando devuelve una lista de tuplas con nombre que incluyen SSDI, BSSID, RSSI, canal Wi-Fi y otros detalles.

# Scan for available Wi-Fi networks
networks = wlan.scan()

Luego, podemos revisar todas las redes devueltas e imprimir su información. El código completo se encuentra a continuación.

# Rui Santos & Sara Santos - Random Nerd Tutorials 
# Complete project details at https://RandomNerdTutorials.com/raspberry-pi-pico-w-wi-fi-micropython/ 

import network 

# Init Wi-Fi interface 
wlan = network.WLAN(network.STA_IF) 
wlan.active(True) 


# Scan for Wi-Fi networks 
networks = wlan.scan() 

# Print Wi-Fi networks 
print("Available WiFi Networks:") 
for network_info in networks: 
    print(network_info)
 

Ejecuta el código anterior en tu Raspberry Pi Pico. Debería mostrar una lista de redes Wi-Fi cercanas y su información correspondiente. La información de la red está separada por comas y en el siguiente orden: SSDI, BSSID, RSSI y canal.

 
RPi Pico escaneando redes Wi-Fi
   

El RSSI es el indicador de intensidad de la señal recibida y muestra la intensidad de la señal Wi-Fi. Cuanto menor sea el valor, peor será la señal.

En cuanto a los dos últimos números, por el momento, la documentación no aclara su significado exacto. Supuestamente representan el modo de autenticación y si la red está oculta o no. Desafortunadamente, los valores obtenidos no coinciden con el rango indicado en la documentación. Por lo tanto, o bien representan algo diferente, o bien hay algún tipo de error.

 

Cómo conectar la Raspberry Pi Pico a una red Wi-Fi

Conectar tu placa Pico a tu red Wi-Fi es muy sencillo gracias al módulo network con

 MicroPython. Para conectarte a tu red, necesitas saber el SSID (el nombre de tu red Wi-Fi) y la contraseña.

Cuando un dispositivo se conecta a una red, el router le asigna una dirección IP. Todos los dispositivos conectados a una red tienen una dirección IP única. Por lo tanto, al conectar la Raspberry Pi Pico al router, este le asignará una dirección IP única en la red.

El siguiente ejemplo conecta Raspberry Pi Pico a su red e imprime la dirección IP asignada a la Pi Pico en su red.

 
# Rui Santos & Sara Santos - Random Nerd Tutorials
# Complete project details at https://RandomNerdTutorials.com/raspberry-pi-pico-w-wi-fi-micropython/

import network
from time import sleep
# Wi-Fi credentials
ssid = 'REPLACE_WITH_YOUR_SSID'
password = 'REPLACE_WITH_YOUR_PASSWORD'

# Init Wi-Fi Interface
wlan = network.WLAN(network.STA_IF)
wlan.active(True)

# Connect to your network
wlan.connect(ssid, password)

# Wait for Wi-Fi connection
connection_timeout = 10
while connection_timeout > 0:
    if wlan.status() >= 3:
        break
    connection_timeout -= 1
    print('Waiting for Wi-Fi connection...')
    sleep(1)

# Check if connection is successful
if wlan.status() != 3:
    raise RuntimeError('Failed to establish a network connection')
else:
    print('Connection successful!')
    network_info = wlan.ifconfig()
    print('IP address:', network_info[0])
 

Cómo funciona el código

Echemos un vistazo rápido a cómo funciona este código anterior.

Importando el módulo network

Primero, necesitas importar módulo

.

import network

Este módulo proporciona varios métodos para crear y gestionar las interfaces y conexiones Wi-Fi.

Inserción de sus credenciales de Wi-Fi

En las siguientes dos variables deberás insertar tu SSID y contraseña de red.

# Wi-Fi credentials
ssid ='REPLACE_WITH_YOUR_SSID'
password ='REPLACE_WITH_YOUR_PASSWORD'
 

Conectarse a Internet

Cree una interfaz de red de estaciones y luego actívala.

# Init Wi-Fi Interface
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
 

Luego, usa esa interfaz para conectarte a tu red doméstica usando el SSID y la contraseña que definiste anteriormente.

# Connect to your network
wlan.connect(ssid, password)

Comprobación del estado de la conexión e impresión de la dirección IP

Luego, verificaremos el estado de la conexión e imprimiremos la dirección IP cuando nos conectemos exitosamente.




# Wait for Wi-Fi connection 
connection_timeout = 10 
while connection_timeout > 0: 
    if wlan.status() >= 3: 
       break 
    connection_timeout -= 1 
    print('Waiting for Wi-Fi connection...') sleep(1) 


# Check if connection is successful 
    if wlan.status() != 3: 
       raise RuntimeError('Failed to establish a network connection') 
    else: 
       print('Connection successful!') 
       network_info = wlan.ifconfig() 
       print('IP address:', network_info[0])
   

El código primero verifica el estado de la conexión, y si wlan.status() >= 3 (esto significa que ya se conectó a la red o que falló al conectarse), el bucle termina.
Espera un máximo de 10 segundos (10 intentos definidos en la variable connection_timeout).

El método wlan.status(), como su nombre lo indica, revisa el estado de la conexión Wi-Fi de la Raspberry Pi.
Este método devuelve un número entero con el siguiente significado:

  • 0: WLAN no está habilitado

  • 1: WLAN está escaneando redes

  • 2: WLAN se está conectando a una red

  • 3: WLAN está conectado a una red

  • 4: WLAN no logró conectarse a una red

Luego, verificamos si está conectado o no (sabemos que status = 3 significa que está conectado).
Si wlan.status() es distinto de 3, sabemos que no se pudo establecer una conexión.

if wlan.status() != 3: 
raise RuntimeError('Failed to establish a network connection')

De lo contrario, significa que se logró la conexión.
En caso de éxito, podemos obtener la información de la red usando el método ifconfig().
Este método devuelve una tupla con la siguiente información:

  • network_info[0]: La dirección IP asignada a la Pico en la red.

  • network_info[1]: La máscara de subred.

  • network_info[2]: La dirección IP de la puerta de enlace (gateway).

  • network_info[3]: La dirección IP del servidor DNS (Domain Name System).

  Solo necesitamos la dirección IP, así que obtenemos el primer elemento del arreglo (network_info[0]).  
else:
    print('Connection successful!')
    network_info = wlan.ifconfig()
    print('IP address:', network_info[0])
 
El método isconnected()

En lugar de verificar el estado de la conexión, el objeto wlan soporta un método llamado isconnected() que devuelve True si la placa está conectada a la red o False en caso contrario.
Puedes usar este enfoque en vez de comprobar wlan.status().
 

Probando el código

Ejecuta el código anterior.
No olvides reemplazar las variables ssid y password con los datos de tu red.

# Credenciales Wi-Fi
ssid = 'REPLACE_WITH_YOUR_SSID'
password = 'REPLACE_WITH_YOUR_PASSWORD'
 

Después de algunos intentos, debería conectarse a tu red y mostrar la dirección IP.

Raspberry Pi Pico: connect to network and get ip address

Solución de problemas

Si tu Raspberry Pi Pico no se conecta a tu red:

  • verifica que estás ingresando el SSID y la contraseña correctos; los espacios y las mayúsculas/minúsculas importan;

  • comprueba que tu red aparece cuando escaneamos las redes Wi-Fi anteriormente;

  • asegúrate de que la Raspberry Pi Pico esté relativamente cerca de tu router para que pueda captar la señal Wi-Fi.

Configuración de una dirección IP estática en la Raspberry Pi Pico

En el caso de mi red, incluso si reinicio la Raspberry Pi Pico varias veces, mi router siempre le asigna la misma dirección IP. Sin embargo, ese no es el caso en algunas otras redes.
En ese escenario, es conveniente tener una forma de asignar una dirección IP estática a tu placa, para que no cambie cada vez que se reinicia.
Además, esto también puede ser útil en proyectos que no están conectados a tu computadora o que no tienen una forma de mostrar la dirección IP.

Puedes usar el método ifconfig del objeto network.WLAN para establecer una dirección IP estática.

Podemos modificar fácilmente el ejemplo anterior con solo unas pocas líneas para asignar una dirección IP estática.

# Rui Santos & Sara Santos - Random Nerd Tutorials
# Complete project details at https://RandomNerdTutorials.com/raspberry-pi-pico-w-wi-fi-micropython/

import network
import time

# Wi-Fi credentials
ssid = 'REPLACE_WITH_YOUR_SSID'
password = 'REPLACE_WITH_YOUR_PASSWORD'

# Static IP configuration
static_ip = '192.168.1.100'  # Replace with your desired static IP
subnet_mask = '255.255.255.0'
gateway_ip = '192.168.1.254'
dns_server = '8.8.8.8'

# Init Wi-Fi Interface
wlan = network.WLAN(network.STA_IF)
wlan.active(True)

# Connect to your network
wlan.connect(ssid, password)

# Wait for Wi-Fi connection
connection_timeout = 10
while connection_timeout > 0:
    if wlan.status() >= 3:
        break
    connection_timeout -= 1
    print('Waiting for Wi-Fi connection...')
    time.sleep(1)

# Set static IP address
wlan.ifconfig((static_ip, subnet_mask, gateway_ip, dns_server))

# Check if connection is successful
if wlan.status() != 3:
    raise RuntimeError('Failed to establish a network connection')
else:
    print('Connection successful!')
    network_info = wlan.ifconfig()
    print('IP address:', network_info[0])
 
   

Configuración de IP estática

Reemplaza los valores en las variables static_ip, subnet_mask, gateway_ip y dns_server con los valores apropiados para tu red.

# Static IP configuration 
static_ip = '192.168.1.100' # Replace with your desired static IP 
subnet_mask = '255.255.255.0' 
gateway_ip = '192.168.1.254' 
dns_server = '8.8.8.8'

¿Cómo encontrar esos valores?

Existen diferentes formas de obtener información sobre la máscara de subred y la dirección IP de la puerta de enlace.
La manera más sencilla es abrir una ventana de Terminal en tu computadora y ejecutar el siguiente comando:

  • En Windows:

ipconfig
  • En MacOS o Linux:

ifconfig
ipconfig commang
 

Te devolverá la información que estás buscando: la IP de la puerta de enlace (la dirección IP de tu router) y la máscara de subred.

ipconfig wlan details

En mi caso, la máscara de subred es 255.255.255.0 y la dirección IP de la puerta de enlace es 192.168.1.254.

Para el servidor DNS, siempre puedes usar 8.8.8.8, que es el servidor DNS público de Google.

Al elegir la dirección IP estática para tu Raspberry Pi Pico, asegúrate de que esa dirección no esté siendo utilizada ya por otro dispositivo.
Para hacerlo, puedes usar un software como Angry IP Scanner (compatible con Windows y Mac OS).
O bien, puedes iniciar sesión en el panel de administración de tu router y verificar qué direcciones IP ya están asignadas.


Configuración de una IP estática

Después de asignar los valores adecuados a las variables de configuración, simplemente podemos usar el método ifconfig() y pasar como argumentos la dirección IP estática, la máscara de subred, la puerta de enlace y el servidor DNS, en ese orden.

wlan.ifconfig((static_ip, subnet_mask, gateway_ip, dns_server))
 

Probando el código

Después de ingresar tus credenciales de red y la configuración de la dirección IP deseada, puedes ejecutar el código en tu Raspberry Pi Pico.

Observa que tendrá asignada la dirección IP que definiste en el código.
En nuestro caso, 192.168.1.100.

Raspberry Pi Pico Set Static IP address

Conclusión

Este tutorial fue una guía rápida para comenzar a usar Wi-Fi en la Raspberry Pi Pico programada con MicroPython.
Esperamos que te haya sido útil.

Preguntas frecuentes

¿Qué chip WiFi usa la Raspberry Pi Pico W?

El Infineon CYW43439, que incluye una radio de 2,4 GHz y proporciona WiFi 802.11n. Es lo que diferencia a la Pico W de la Pico estándar.

¿Cuál es la diferencia entre modo estación y punto de acceso?

En modo estación la Pico se conecta a una red WiFi existente, como lo haría un teléfono. En modo punto de acceso es ella la que crea su propia red, a la que se conectan otros dispositivos.

¿Puedo buscar redes WiFi cercanas con la Pico W?

Sí. El tutorial cubre cómo escanear las redes disponibles desde MicroPython, además de conectarse a la red local y obtener información de la conexión.

¿Cómo conecto la Pico W a mi red WiFi?

Configurando la interfaz de estación desde MicroPython con el nombre de la red y la contraseña, y esperando a que la conexión se establezca antes de continuar con el resto del programa.

Aprende esto en un curso

Si prefieres verlo en vivo y con alguien que resuelva tus dudas, estos cursos presenciales de MCI Educación cubren el tema de este tutorial: