Transmisión de datos de sensores por WiFi con Raspberry Pi Pico W

Raspberry Pi Pico W conectada a un ADXL343

Uno de los mejores usos de la Raspberry Pi Pico W es su capacidad para servir una página web.

Esto significa que puedes utilizarlo para controlar los datos de los sensores de tu teléfono siempre que estés en el rango de WiFi.

Este proyecto proporcionará una base sencilla sobre cómo se pueden controlar los datos de aceleración y también crear un dado digital, que se activa cuando se toca el sensor ADXL343.

Vídeo

Piezas necesarias

  • Tablero de pruebas
  • Cables de puente

¿Qué es el ADXL343?

El ADXL343 de Analog Devices es la continuación de su predecesor, el ADXL345.

El sensor puede medir tres ejes de medición y tiene cuatro ajustes de sensibilidad,+-2g, +-4g, +-8g o +-16g. El rango más bajo proporciona más resolución para los movimientos lentos, el rango más alto es bueno para el seguimiento de alta velocidad.

El ADXL343 también tiene una librería CircuitPython que podemos utilizar en MicroPython, lo que hace mucho más fácil empezar.

Necesitarás tener los cabezales soldados en el ADXL343 así como en el Pico W para poder realizar este proyecto.

Conexión del ADXL343 al Pico W

Hay cuatro pines que necesitas conectar a la Raspberry Pi.

Conecte el VIN a un Salida de 3,3 V en su Raspberry Pi Pico W;

Conecte el GND a una clavija de tierra en su Pico W;

Conecte el SDA pin a GPIO0;

Conecte el SCL pin a GPIO1.

Flashear el firmware de MicroPython para la Raspberry Pi Pico W

En primer lugar, tendrá que flashear el firmware de MicroPython en el Pico W, si aún no lo ha hecho.

Puede descargarlo aquí.

A continuación, mantenga pulsado el botón BOOTSEL y conecte su Pico al ordenador. Debería ver una nueva unidad de disco. Copie el archivo .UF2 que descargó en esa unidad.

Configurar Thonny para la Raspberry Pi Pico W

Abre Thonny. Si no lo has descargado, consígalo aquí.

Poner el intérprete en MicroPython (Raspberry Pi Pico) en la parte inferior izquierda de la ventana de Thonny IDE.

Copiar bibliotecas en el Pico W

Descargue las bibliotecas y los archivos aquí desde nuestro repositorio de Github.

Puede descargar un archivo ZIP accediendo a ese enlace y haciendo clic en el botón verde "Código" y haciendo clic en Descargar ZIP.

Una vez descargado, descomprímelo en algún lugar que recuerdes.

Luego, en su IDE de Thonny, haga clic en Ver > Archivos para ver su sistema de archivos y el del Pico W.

Navega hasta los archivos descomprimidos y entra en la carpeta MicroPython > II Pico W Sensor Server. Copie todo en su Pico W haciendo clic con el botón derecho en cada elemento y haciendo clic en "Cargar en /"

Modificación del código

Para que la Raspberry Pi Pico se conecte a tu red WiFi, tendrás que abrir secretos.py y modificar el ssid y pw...el valor de la red. Introduce el SSID (nombre) de tu red en el primero y la contraseña en el segundo. Guarde el archivo.

El index.html es la página web que se servirá. La línea "<p>X AccX | Y AccY | Z AccZ</p>" y <p>Resultado DiceVal</p> será sustituido por los datos de los sensores cuando se ejecute el proyecto.

Conecta tu Raspberry Pi Pico al WiFi

El main.py es donde ocurre la acción.

Estas líneas lo conectan a tu WiFi. No olvides cambiar la cadena en rp2.country si su país no es Alemania (DE).


# Establecer el país para evitar posibles errores
rp2.country('DE')

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
# Si necesitas desactivar el modo de ahorro de energía
# wlan.config(pm = 0xa11140)

# Ver la dirección MAC en el chip inalámbrico OTP
mac = ubinascii.hexlify(network.WLAN().config('mac'),':').decode()
print('mac = ' + mac)

# Otras cosas a consultar
# print(wlan.config('channel'))
# print(wlan.config('essid'))
# print(wlan.config('txpower'))

# Cargar los datos de acceso desde un archivo diferente por razones de seguridad
ssid = secrets['ssid']
pw = secrets['pw']

wlan.connect(ssid, pw)

El LED de la placa parpadeará tres veces si la conexión WiFi fue exitosa, gracias a estas líneas de código. También imprimirá un mensaje y su dirección IP que se puede ver en Thonny. Esta dirección IP es útil para acceder al servidor más tarde.

   led = machine.Pin('LED', machine.Pin.OUT)
    for i in range(wlan.status()):
        led.on()
        time.sleep(0.2)
        led.off()
        time.sleep(0.2)
    print('Conectado')
    status = wlan.ifconfig()
    print('ip = ' + status[0])

Si hay un error, el LED parpadeará en función del valor del código de error.

Significado de los errores

  • 0 = Enlace caído
  • 1 = Enlace de unión
  • 2 = Enlace NoIp
  • 3 = Enlazar
  • -1 = Fallo de enlace
  • -2 = Enlace NoNet
  • -3 = Enlace BadAuth

Conectar Pico W a ADXL343

Esta línea inicializa un objeto I2C:

# Inicializar I2C
# busio.I2C(SCL, SDA)
i2c = busio.I2C(board.GP1, board.GP0)

A continuación, estas dos líneas crean el acelerómetro y permiten la detección de golpes (para la lectura de los dados).

# Crea el objeto Acelerómetro
acelerómetro = adafruit_adxl34x.ADXL343(i2c)

accelerometer.enable_tap_detection()

Hora de ejecutar el código

Para ejecutar el código, pulse el botón Ejecutar en Thonny, que es el botón con un icono de reproducción en un botón verde en la barra de herramientas superior.

A continuación, conéctate a la dirección IP de tu Raspberry Pi Pico W. Si tienes abierta la shell de Thonny, puedes verla allí. O bien, puede iniciar sesión en su router y averiguar cuál es la dirección IP del Pico W.

El Pico W ejecuta un servidor HTTP con una conexión de socket y escucha las conexiones, definidas aquí:

addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]

s = socket.socket()
s.bind(addr)
s.listen(1)

Cuando te conectes a la dirección IP de tu Pico W, se activará este código que refrescará index.html con los últimos datos cada segundo.

   cl, addr = s.accept()
        print('Cliente conectado desde', addr)
        cl_file = cl.makefile('rwb', 0)
        mientras sea cierto
            line = cl_file.readline()
            if not line or line == b'\r\n':
                break
            
        response = get_html('index.html')
        data = accelerometer.acceleration
        tocado = accelerometer.events['tap']
        response = response.replace('AccX', str(data[0]))
        response = response.replace('AccY', str(data[1]))
        response = response.replace('AccZ', str(data[2]))
        si se ha tocado:
            dice_val = str(random.randint(1,6))
        response = response.replace('DiceVal', dice_val)
        
        cl.send('HTTP/1.0 200 OK\nContent-type: text/html\r\n\n')
        cl.send(response)
        cl.close()
main.py sustituye los valores por la lectura actual cuando se conecta al servidor de Pico W.

Como puede ver, sustituye AccX, AccY y AccZ por los datos de su sensor.

Si el sensor es tocado, entonces imprimirá un número entero aleatorio de 1 a 6 en la cadena "DiceVal" en la página HTML.

¿Qué es lo siguiente?

Este tutorial representa una forma sencilla de transmitir los datos de los sensores a una página web.

De hecho, este es el código que puede utilizar para otros sensores también.

La metodología sigue siendo la misma. Tienes que encontrar las bibliotecas correctas para tus sensores, luego modificar el main.py y el index.html para que puedan obtener los datos del sensor y empujar los valores correctos en la página web.

Hay muchos otros proyectos en los que puedes embarcarte, como un proyecto de sensor de temperatura y humedad con un DHT22 o BME688, o un sensor de luminosidad con una resistencia de luz.

1 Comentario

  1. Ken Anderson el julio 15, 2022 a las 7:24 am

    Seguro que estaría bien utilizar las características de HTML5 para que pudiéramos ver cómo se hace HTML5

Deja un comentario