Medir la señal WiFi con una Raspberry Pi Pico

medidor intensidad wifi con Raspberry Pico, montaje

Intensidad señal WiFi con leds y Raspberry Pi Pico

Un proyecto para medir, de forma visual con tres leds, la intensidad de la señal WiFi que recibe el dispositivo desde el router, RSSI por sus siglas en inglés Received Signal Strength Indicator, que es una escala de referencia para medir el nivel de potencia de las señales recibidas en las redes inalámbricas.

Para fabricar el medidor de nivel de potencia de la señal WiFi necesitamos los siguientes componentes:

  • Raspberry Pi Pico W
  • 3 leds de colores (verde, amarillo y rojo)
  • 1 resistencia de 330 ohmios
  • 1 placa de prototipos
  • 6 cables DuPont Macho-Macho

Código para medir la intensidad de la señal WiFi con una Raspberry Pi Pico en MicroPython

import network
import time
import machine

red = 'SSID_a_medir'

wlan = network.WLAN(network.STA_IF)
wlan.active(True)

led_green = machine.Pin(18, machine.Pin.OUT)
led_yellow = machine.Pin(19, machine.Pin.OUT)
led_red = machine.Pin(20, machine.Pin.OUT)

def leds(g=0, y=0, r=0):
    led_green(g)
    led_yellow(y)
    led_red(r)
while True:
    puntosAcceso = wlan.scan()
    for ap in puntosAcceso:
        ssid = ap[0].decode()
        rssi = ap[3]
        if ssid == red:
            print(ssid, rssi)
            time.sleep(0.5)
            if rssi >= -60:
                leds(1, 0, 0)
                print('Señal alta')
            elif rssi > -75 and rssi <= -61:
                print('Señal media')
                leds(0, 1, 0)
            else:
                print('Señal baja')
                leds(0, 0, 1)

Explicación del código en MicroPython para medir la intensidad de la señal WiFi con una Raspberry Pi Pico

El primer paso es importar las librerías que vamos a necesitar (network, time y machine)

Definimos la variable red con el SSID de la red a medir.
Inicializamos el objeto wlan y activamos la red con wlan.active(True).

Creamos la función leds con los parámetros de los colores de los leds.
La idea es que cada vez que llamemos a la función, ésta encienda y apague, a la vez, los leds necesarios cambiando de forma instantánea el color del led que nos muestra la intensidad de la señal.

El siguiente paso es crear un bucle que constantemente esté ejecutando la búsqueda y realizando la medida. Para ello lo primero es crear la variable puntoAcceso y en ella introducimos todas las redes que wlan.scan() encuentre en su alcance.
En el bucle for decodificamos los nombres de las SSID almacenándolos en la variable ssid y discriminamos todas la redes excepto la que coincida con la que hemos introducido al principio almacenándola en la variable red.
Cuando la red escaneada coincida con la que estamos buscando mide el rssi y, en función del valor que nos devuelve enciende un led u otro.
Conforme nos vayamos moviendo podremos ver como el led que muestra la intensidad de la señal WiFi va cambiando progresivamente según los datos más abajo mostrados.
Si ejecutamos el código con el dispositivo conectado al ordenador, por el terminal nos irá mostrando el mensaje de «señal baja, media o alta» a la vez que se enciende su correspondiente led.

Los valores que tenemos en cuenta para la medición son valores negativos y cuanto más cercano al 0 se encuentre más intensidad tendrá la señal recibida por lo que cuanto más lejano esté del cero mayor pérdida de señal habrá.
Hay que tener en cuenta que el RSSI nos indica la intensidad recibida, no así la calidad de la señal, pues esta última se determina contrastando la intensidad de la señal respecto de la relación señal/ruido.

Para tener movilidad se puede conectar la Raspberry Pi Pico a una fuente de alimentación, en mi caso la conecté a un PowerBank. Para que se ejecute automáticamente al conectar la Pico a la fuente, el archivo debe llamarse main.py.

Por último, si queremos crear este proyecto para otro tipo de placa habrá que modificar el código y podremos conectarnos a una SSID en concreto y medir su señal con wifi.status('rssi') que no está disponible para Raspberry Pi Pico, o al menos hasta el momento en que he estado haciendo las pruebas daba error.

Sobre mi

Trabajo en el desarrollo de webs profesionales desde hace más de 25 años.
También me dedico a mis proyectos personales.

Últimas notas publicadas

Categorías

Scroll al inicio