Puerto Ethernet Raspberry PI Pico: agregando el HAT Ethernet WIZNET

Raspberry PI Pico funciona en gran medida para mantener las mediciones de los sensores, combinándolas/analizándolas y entregando datos al mundo externo. Agregar un puerto Etherneth a Raspberry PI Pico con WIZnet Ethernet HAT (basado en el chip W5100S) agrega una capa de red para mejorar las comunicaciones

En este tutorial, le mostraré cómo conectar, configurar y usar un puerto Ethernet Pico de Raspberry PI con WIZnet Ethernet HAT. Usaremos CircuitPython para conectar la interfaz ya que, en realidad, las bibliotecas de MicroPython están en desarrollo.

WIZnet Ethernet HAT utiliza el W5100S chi, agregando un HAT compatible con Raspberry PI Pico.

Chip WIZnet W5100S: Especificaciones técnicas

El W5100S es un controlador de Internet integrado que proporciona conectividad ethernet a los dispositivos compatibles con la comunicación SPI (interfaz periférica en serie) o el BUS del sistema paralelo.

El W5100S integra la pila de TCP/IP cableados con 10/100 Ethernet MAC y PHY. Soporta los protocolos de comunicación más utilizados: TCP, UDP, IPv4, ICMP, ARP, IGMP y PPPoE. W5100S también es compatible con WOL (Wake on LAN) y un modo de apagado para reducir el consumo de energía.

Principales características:

  • Admite protocolos de Internet cableados: TCP, UDP, WOL sobre UDP, ICMP, IGMPv1/v2, IPv4, ARP, PPPoE;
  • Admite 4 SOCKET de hardware independientes simultáneamente;
  • Admite comandos sin SOCKET: solicitud ARP, solicitud PING;
  • Admite el modo de apagado de Ethernet y la activación del reloj principal para ahorrar energía;
  • Admite Wake on LAN sobre UDP;
  • Admite interfaz de host serial y paralelo: SPI de alta velocidad (MODO 0/3), bus de sistema paralelo con señal de 2 direcciones y datos de 8 bits;
  • Memoria interna de 16 Kbytes para búferes TX/ RX;
  • No es compatible con la fragmentación de IP;
  • No mantener la tabla de caché ARP;
  • 10BaseT/100BaseTX Ethernet PHY Integrado;
  • Admite negociación automática (dúplex completo/medio, velocidad 10/100);
  • Admite Auto-MDIX cuando está en modo de negociación automática;
  • Funcionamiento de 3,3 V con tolerancia de señal de E/S de 5 V;
  • Salidas LED (Full/Half Duplex, Link, 10/100 Speed, Active);
  • Dos tipos de paquetes: Paquete sin plomo LQFP y QFN de 48 pines (7×7 mm, paso de 0,5 mm).

Puede encontrar más información en la página de especificaciones de WIZnet W5100S.

El SOMBRERO Ethernet de WIZnet

WIZnet Ethernet HAT es una placa compatible con Raspberry Pi Pico, diseñada para coincidir con los pines Pico uno por uno, lo que permite montarlos uno al lado del otro.

Integra el chip WS5100S y tiene un puerto Ethernet que se utiliza para conectarlo a enrutadores, conmutadores y cualquier hardware de enrutamiento/conmutación compatible con Ethernet.

En este tutorial, le mostraré cómo usarlo y cómo configurar 2 ejemplos simples: una prueba de ping, para verificar que todo funcione, y una prueba de servidor HTTP simple, para mostrar información de Raspberry PI Pico desde una página web y dar control a su tablero LED.

Hay más información disponible en la página WIZnet Ethernet HAT.

Lo que necesitamos

Como de costumbre, sugiero agregar desde ahora a su carrito de compras de comercio electrónico favorito todo el hardware necesario, para que al final pueda evaluar los costos generales y decidir si continúa con el proyecto o los elimina del carrito de compras. Entonces, el hardware será solo:

Consulta precios de hardware en los siguientes enlaces:

Consulta precios de hardware en los siguientes enlaces:

Procedimiento paso a paso

Diagramas de cableado

En primer lugar, debemos cablear correctamente el HAT. Tenemos 2 opciones: la conexión “Hardware Attached on Top” (HAT) o cablearlo con cables Dupont.

La primera opción es la más sencilla y permite una conexión directa entre las 2 placas. También es el que usé en mis pruebas:

La segunda opción es conectar solo los pines requeridos con cableado.

En este caso, debe utilizar el siguiente diagrama de cableado:

Instalar CircuitPython

Descargue CircuitPython desde https://circuitpython.org/board/raspberry_pi_pico/. Desde esta página, seleccione su idioma favorito y haga clic en «Descargar .UF2 ahora».

Instálelo en su RPI Pico: con la tecla BOOTSEL en RPI Pico mantenida presionada, conecte el cable USB a su computadora y suelte la tecla una vez que se encuentre un nuevo dispositivo de almacenamiento. Copie el archivo “.UF2” dentro de la nueva carpeta de almacenamiento. No se preocupe si ya hay otros archivos en el almacenamiento, simplemente copie el archivo uf2.

Una vez copiado, el almacenamiento se eliminará automáticamente y aparecerá un nuevo dispositivo de almacenamiento. El nuevo almacenamiento se llamará “CIRCUITPY”. CircuitPython ya está instalado.

Desde aquí puedes trabajar con el cómodo IDE de Thonny. Descárgalo del sitio oficial de Thonny e instálalo en tu computadora. Una vez instalado, asegúrese de que Thonny shell esté visible (o actívelo desde el menú de Thonny -> Ver -> Shell). De la misma manera, puede mostrar archivos desde su dispositivo conectado habilitando el menú de Thonny -> Ver -> Archivos

Con Raspberry PI Pico conectado, seleccione el nuevo intérprete desde el botón inferior derecho en la ventana de Thonny y cámbielo de «Python3.7.9» (o cualquier versión de Python que resulte de su IDE de Thonny) a «CircuitPython (genérico)»:

Su shell puede indicar que el dispositivo (Raspberry PI Pico) está ocupado o no responde. Para activarlo, haga clic en el área de shell y presione CTRL+C. Esto evita que cualquier programa se ejecute en Raspberry PI Pico. Para ejecutar cualquier archivo «code.py», deberá hacer clic nuevamente aquí y presionar CTRL+D.

Comprobar que CircuitPython funciona

Edite el archivo code.py con Thonny y hágalo de la siguiente manera:

import board import digitalio import time  led = digitalio.DigitalInOut(board.LED) led.direction = digitalio.Direction.OUTPUT  while True:     led.value = not led.value     time.sleep(0.5)

Guárdalo. Coloque el cursor en el área de la carcasa (haciendo clic allí) y presione CTRL+D. El Raspberry PI Pico comienza a parpadear. Esto significa que el firmware funciona correctamente. Bien.

Por lo tanto, para cada cambio en code.py, detendrá el código en ejecución con CTRL+C en el área de shell, cambiará y guardará code.py y luego volverá a cargar el nuevo código con CTRL+D.

Copiar bibliotecas WIZnet

Ahora necesitamos copiar dentro de la carpeta lib en nuestro almacenamiento Raspberry PI Pico los archivos de https://github.com/Wiznet/RP2040-HAT-CircuitPython/tree/master/libraries.

Para las pruebas básicas, podemos ir solo con lo siguiente:

  • adafruit_wiznet5k (toda la carpeta)
  • adafruit_bus_device (toda la carpeta)
  • adafruit_requests.mpy (este es un archivo)

Pero pronto necesitará también otras bibliotecas ya que sus proyectos comenzarán a crecer, por lo que mi sugerencia es copiar los paquetes de bibliotecas completos y colocarlos en su carpeta lib. Una manera fácil de obtener estos archivos y carpetas es usar el servicio downgit.github.io y aquí usando la ruta https://github.com/Wiznet/RP2040-HAT-CircuitPython/tree/master/libraries.

La nueva estructura en nuestro almacenamiento Raspberry PI Pico será la siguiente (desde una PC con Windows, por lo que mi almacenamiento CIRCUITPY aparece como unidad «F:»):

F: │   .metadata_never_index │   .Trashes │   code.py │   boot_out.txt ├───.fseventsd │       no_log └───lib     │   neopixel.py     │   adafruit_requests.py     ├───adafruit_wiznet5k     │       adafruit_wiznet5k_wsgiserver.py     │       __init__.py     │       adafruit_wiznet5k_socket.py     │       adafruit_wiznet5k_ntp.py     │       adafruit_wiznet5k_dhcp.py     │       adafruit_wiznet5k.py     │       adafruit_wiznet5k_dns.py     ├───adafruit_minimqtt     │       adafruit_minimqtt.py     │       matcher.py     │       __init__.py     ├───adafruit_bus_device     │       i2c_device.py     │       spi_device.py     │       __init__.py     ├───adafruit_io     │       adafruit_io_errors.py     │       __init__.py     │       adafruit_io.py     └───adafruit_wsgi             request.py             wsgi_app.py

Ejemplo 1: prueba de ping

La primera prueba es una simple prueba de ping. Le daremos a nuestro Raspberry PI Pico con WIZnet W5100s HAT una dirección IP estática. Luego intentaremos hacer ping desde una PC remota.

Consigue desde mi área de descargas el siguiente archivo:

ping-test-code.py

Cámbiele el nombre a code.py y cópielo en su almacenamiento CIRCUITPY sobrescribiendo el anterior.

Recuerde adaptar las siguientes partes:

  • “SPI0_SCK = placa.GP18”, “SPI0_TX = placa.GP19”, “SPI0_RX = placa.GP16”, “SPI0_CSn = placa.GP17” y “W5x00_RSTn = placa.GP20”: si utiliza un cableado diferente, recuerde actualice estos valores de acuerdo con sus conexiones de cable
  • “IP_ADDRESS = (192, 168, 1, 5)”: esta es una dirección IP (que significa 192.168.1.5, pero con separadores de coma) compatible con la de mi casa y que no está siendo utilizada por ningún dispositivo en mi red local. Recuerde cambiarlo de acuerdo con la configuración de su red doméstica
  • “SUBNET_MASK = (255, 255, 255, 0)”: este suele ser el valor predeterminado para todos los enrutadores domésticos. Si tiene una configuración específica, actualice aquí los valores necesarios
  • “GATEWAY_ADDRESS = (192, 168, 1, 1)”: esta es la dirección IP del enrutador. Cámbielo si tiene una IP diferente para su enrutador doméstico

Vuelva a cargar el nuevo código y obtendrá el siguiente resultado de Thonny shell (con su dirección IP establecida en lugar de la mía 192.168.1.5):

soft reboot  Auto-reload is on. Simply save files over USB to run them or enter REPL to disable. code.py output: Wiznet5k Ping Test (no DHCP) Chip Version: w5100s MAC Address: ['0x0', '0x1', '0x2', '0x3', '0x4', '0x5'] My IP address is: 192.168.1.5 Done!

Esto significa que todo está funcionando. Ahora conecte el cable ethernet entre el WIZnet Ethernet HAT y su enrutador. Puede mantener el cable USB conectado a su computadora o también puede usarlo con una fuente de alimentación común para teléfonos inteligentes o un banco de energía: el código se ejecuta y almacena en RPI Pico y no necesita estar conectado a su computadora hasta no necesitas editarlo.

Desde una computadora en la misma red, pruebe que se puede acceder a su Pico emitiendo el mismo comando desde una terminal (para computadoras con Linux) o cmd (para computadoras con Windows):

ping 192.168.1.5

Recuerde cambiar la dirección IP con la configurada para su Raspberry PI Pico, de modo que probablemente vea algo como lo siguiente:

Pinging 192.168.1.5 with 32 bytes of data: Reply from 192.168.1.5: bytes=32 time=1ms TTL=127 Reply from 192.168.1.5: bytes=32 time=1ms TTL=127 Reply from 192.168.1.5: bytes=32 time<1ms TTL=127 Reply from 192.168.1.5: bytes=32 time=1ms TTL=127  Ping statistics for 192.168.1.5:     Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds:     Minimum = 0ms, Maximum = 1ms, Average = 0ms

Si no recibe la respuesta, intente reiniciar Pico (desenchufando y volviendo a enchufar el cable de alimentación) y verifique si alguna limitación del enrutador está activa (filtrado de direcciones MAC, denegación de IP estática, etc.).

Ejemplo 2: Servidor HTTP

Un ejemplo más es usar el Raspberry PI Pico con WIZnet Ethernet HAT como servidor web, mostrando el estado de los sensores o también controlándolos. En el siguiente ejemplo, controlaremos el led incorporado. Nuevamente, obtenga este nuevo código de mi área de descarga:

http-código-servidor.py

De nuevo, recuerda actualizar los siguientes parámetros según tus necesidades:

  • “SPI0_SCK = placa.GP18”, “SPI0_TX = placa.GP19”, “SPI0_RX = placa.GP16”, “SPI0_CSn = placa.GP17” y “W5x00_RSTn = placa.GP20”
  • “DIRECCIÓN_IP = (192, 168, 1, 5)”“MÁSCARA_SUBRED = (255, 255, 255, 0)”“DIRECCIÓN_PUERTA DE ENLACE = (192, 168, 1, 1)”

También puede personalizar el código HTML editando lo que se incluye en la variable «html_string». Copie el código final en su code.py en Raspberry PI Pico.

Con este nuevo código, debe conectar el cable ethernet antes de ejecutar o se producirá un error. Para una primera prueba, también puede usar el puerto Ethernet de la PC: incluso si apenas funciona, el WIZnet Ethernet HAT recibirá retroalimentación eléctrica del puerto y ejecutará el código. Una vez conectado el cable ethernet, ejecute el código para obtener lo siguiente de Thonny shell:

Wiznet5k HTTP Test (no DHCP) Chip Version: w5100s MAC Address: ['0x0', '0x1', '0x2', '0x3', '0x4', '0x5'] My IP address is: 192.168.1.5 w5100s MAX_SOCK_NUM is 2 Open this IP in your browser:  192.168.1.5

Si aún no lo ha hecho, ahora puede conectar el cable ethernet al enrutador de su hogar (reiniciando el Pico si es necesario). Desde su PC remota, con su navegador favorito usando la dirección IP de Raspberry PI Pico como URL y obtendrá lo siguiente:

Esta vez, haciendo clic en el [ON] o [OFF] Enlaces que puedes controlar el LED de la placa. Cuando haces clic en el [ON] será redirigido a la siguiente página:

Y el LED de la placa se encenderá. Desde aquí, utilice el botón «atrás» del navegador para volver a la página anterior.

Del mismo modo, con el [OFF] enlace obtendrá:

Y el LED de la placa se apagará.