Para usar un ESP32 como radio Wi-Fi de una Raspberry Pi, necesitas ESP-Hosted-Linux, un chip compatible, una conexión de hardware y el firmware y controlador correspondientes. El resultado es una interfaz wlanX que Linux gestiona con sus herramientas de red habituales. Es un montaje para quien quiere integrar una radio ESP en un equipo Linux, distinto de conectar ambos dispositivos al mismo router para intercambiar datos entre aplicaciones.

La idea es atractiva para un proyecto de integración: el ESP aporta la radio y Raspberry Pi conserva el control de la red. Pero hay que poner de acuerdo tres piezas: el hardware, el firmware del ESP y el controlador de Linux. Vamos por partes.

Qué hace ESP-Hosted-Linux

ESP-Hosted-Linux, mantenido por Espressif Systems, conecta una radio ESP al equipo Linux mediante un bus compatible. Un bus es el enlace de hardware por el que ambos intercambian datos; en este proyecto puede ser SDIO, SPI o USB, según el chip.

El controlador integra la radio en cfg80211 y nl80211, los mecanismos habituales de Linux para gestionar dispositivos inalámbricos. Así aparece una interfaz wlanX, utilizable con herramientas como wpa_supplicant, que se encarga de la asociación con el punto de acceso. La dirección IP también se configura en Linux.

Por tanto, aquí introduces las credenciales de la red en las herramientas de Linux. El ESP ejecuta un firmware preparado para actuar como coprocesador inalámbrico, en lugar de un programa de aplicación que se conecta por su cuenta al router.

ESP-Hosted-MCU sigue otro reparto de tareas: deja más gestión de la conexión en el ESP. Si buscas una interfaz inalámbrica integrada en la pila de red de Linux, la arquitectura de esta guía es ESP-Hosted-Linux.

Qué necesitas antes de empezar

  • Una Raspberry Pi u otra placa con Linux y un controlador de bus utilizable para el transporte elegido.
  • Una placa ESP cuyo chip admita ese transporte en ESP-Hosted-Linux.
  • Cableado y alimentación adecuados para la placa y el bus.
  • ESP-IDF, el entorno de desarrollo de Espressif, para compilar y grabar el firmware del ESP.
  • Un entorno de compilación en Linux para construir el módulo del controlador correspondiente.
  • Un gestor de red o herramientas como wpa_supplicant y un cliente DHCP para completar la conexión.

La compatibilidad del chip es el primer filtro. Después hay que comprobar la integración del bus en el equipo Linux: asignación de funciones a los pines, GPIO, kernel y, cuando corresponda, Device Tree, la descripción del hardware que utiliza el sistema.

Elegir un ESP32 y un transporte compatibles

No todos los ESP32 admiten SDIO en este proyecto. La matriz de hardware de Espressif recoge estas combinaciones:

Chip ESPTransportes compatiblesBandas Wi-Fi
ESP32SDIO, SPI2,4 GHz
ESP32-S2SPI2,4 GHz
ESP32-S3SPI2,4 GHz
ESP32-S31SPI, USB2,4 GHz
ESP32-C2SPI2,4 GHz
ESP32-C3SPI2,4 GHz
ESP32-C5SDIO, SPI2,4 y 5 GHz
ESP32-C6SDIO, SPI2,4 GHz
ESP32-C61SDIO, SPI2,4 GHz

La elección tiene consecuencias concretas. Si quieres trabajar con una red de 5 GHz, ESP32-C5 ofrece esa banda. ESP32-C6 admite 802.11b/g/n/ax, pero en 2,4 GHz. Tener Wi-Fi 6 no implica disponer de ambas bandas.

Si ya tienes un ESP32-S3, su ruta en este proyecto es SPI. Ese enlace requiere, además de las señales del bus, las señales de coordinación Handshake y Data Ready, junto con el reinicio del ESP. Cambiar SDIO por SPI implica adaptar tanto el cableado como la configuración del firmware y del controlador.

ESP32-S31 ofrece otra opción: USB. Para esta ruta, la referencia de Raspberry Pi de Espressif indica que no hacen falta conexiones GPIO ni una superposición de Device Tree. Sigue siendo necesario preparar el firmware y el controlador USB correspondientes.

Antes de soldar, comprueba también el lado de Raspberry Pi. Que el ESP admita SDIO o SPI no garantiza que cualquier placa Linux tenga ese bus listo para usar.

Conectar ESP32-C6 por SDIO a Raspberry Pi

Para ESP32-C6, puedes seguir la asignación de la referencia de Raspberry Pi junto con los GPIO predeterminados del chip. Los números de Raspberry Pi son posiciones físicas del conector de 40 pines, mientras que los números del ESP son GPIO.

SeñalPin físico de Raspberry PiConexión predeterminada en ESP32-C6
DAT313GPIO 23
CLK15GPIO 19
CMD16GPIO 18
DAT018GPIO 20
DAT122GPIO 21
DAT237GPIO 22
Reinicio del ESP31RST
Masa39Masa

CLK transporta el reloj del bus, CMD lleva los comandos y DAT0–DAT3 son las líneas de datos. El reinicio permite controlar el estado del ESP desde el equipo anfitrión.

Requisitos eléctricos que importan

Las señales SDIO y SPI utilizan lógica de 3,3 V. No conectes señales GPIO de 5 V a esas líneas. La alimentación de la placa debe seguir sus requisitos propios y mantenerse estable durante el funcionamiento.

CMD y DAT0–DAT3 necesitan resistencias pull-up, que mantienen las líneas a nivel alto cuando no se están activando. El esquema de la guía de hardware de Espressif utiliza resistencias externas de 10 kΩ y advierte que debes comprobar si tu placa ya las incorpora antes de añadir otras.

Mantén el cableado corto y una conexión de masa sólida entre ambos equipos. Si las transferencias resultan inestables, Espressif recomienda reducir la frecuencia del reloj SDIO. El mapa de pines resuelve las conexiones, pero el bus también necesita su configuración en Linux.

Preparar firmware y controlador de Linux

Cómo usar un ESP32 como coprocesador Wi-Fi en Raspberry Pi

El orden de trabajo parte de una decisión: qué chip vas a utilizar y por qué bus lo conectarás. Conserva esa pareja durante toda la configuración. Un firmware preparado para SPI y un controlador preparado para SDIO no forman un conjunto compatible.

La guía de inicio rápido de Espressif organiza la puesta en marcha alrededor del firmware del ESP y del módulo del equipo Linux. Sigue esta secuencia una vez resuelto el cableado:

  1. Selecciona el chip en ESP-IDF. La compilación debe dirigirse al modelo concreto que tienes conectado, por ejemplo, ESP32-C6.
  2. Selecciona el transporte del firmware. Configura SDIO, SPI o USB según la combinación elegida; esto determina cómo se comunicará el ESP con Linux.
  3. Compila el firmware del ESP. Obtendrás la imagen correspondiente al chip y al transporte seleccionados.
  4. Graba el firmware en la placa ESP. El coprocesador necesita ejecutar esa imagen para comunicarse con el controlador del equipo Linux.
  5. Prepara el bus en Linux. Aplica la configuración de pines y la integración del bus que corresponden a tu placa y transporte.
  6. Compila el módulo del controlador. Elige el módulo sdio, spi o usb que coincida con el firmware del ESP.
  7. Carga el módulo en Linux. Este paso conecta el dispositivo con la pila inalámbrica del sistema y permite que aparezca la interfaz de red.

La configuración del equipo anfitrión cambia entre plataformas. Para Raspberry Pi, utiliza su referencia específica junto con la guía de inicio rápido: la asignación física de pines y la preparación del bus son dos partes del mismo montaje.

Configurar Wi-Fi en Linux

Una vez cargado el controlador, el siguiente trabajo se realiza en Linux. La guía de modo estación de Espressif sitúa tanto la asociación Wi-Fi como la configuración IP en el equipo anfitrión.

  1. Localiza la interfaz inalámbrica con iw dev. Identifica el nombre que Linux ha asignado a la radio ESP; puede ser una interfaz wlanX distinta de wlan0.
  2. Comprueba la interfaz con ip link. Confirma que aparece entre los dispositivos de red antes de configurar la conexión.
  3. Asocia esa interfaz al punto de acceso. Utiliza el gestor de red de Linux o wpa_supplicant con las credenciales de la red elegida.
  4. Configura la dirección IP. Deja que el gestor de red o el cliente DHCP de Linux obtenga la configuración de red.

Hay dos hitos distintos: que Linux detecte la radio y que esa radio se conecte a tu red. Ver una interfaz con iw dev resuelve el primero; la asociación al punto de acceso y la obtención de una dirección IP completan el segundo.

Fallos habituales y dónde mirar

Si la interfaz no aparece, revisa dmesg en Linux y los registros serie del ESP. Son las comprobaciones que propone Espressif para diagnosticar la puesta en marcha.

Antes de cambiar las credenciales Wi-Fi, repasa los puntos que pueden impedir que el dispositivo llegue a esa fase:

  • Chip y transporte: ambos deben coincidir con la matriz de compatibilidad y con las configuraciones del firmware y del módulo.
  • Numeración de pines: utiliza las posiciones físicas de Raspberry Pi al seguir la tabla de cableado.
  • Señales auxiliares: en SPI, Handshake, Data Ready y reinicio también forman parte de la integración.
  • Bus SDIO: comprueba las resistencias de polarización, la longitud del cableado y la conexión de masa.
  • Nombre de interfaz: configura la que aparece en tu sistema, sin dar por hecho que es wlan0.

Si Linux detecta la interfaz pero no consigue asociarse, continúa con la configuración Wi-Fi. Si ya existe asociación pero falta la dirección IP, revisa la configuración del gestor de red o del cliente DHCP.

Rendimiento de ESP32-C6 por SDIO

Espressif registra estas mediciones de referencia para ESP32-C6 conectado por SDIO y con Wi-Fi en 2,4 GHz. El ancho de canal es una propiedad de la conexión inalámbrica; es distinto de la frecuencia del reloj del bus SDIO.

Tx y Rx identifican las direcciones de transmisión y recepción utilizadas en las mediciones de Espressif. TCP y UDP son protocolos de transporte diferentes y sus resultados se mantienen separados.

Ancho de canal Wi-FiTCP Tx (Mbps)TCP Rx (Mbps)UDP Tx (Mbps)UDP Rx (Mbps)
40 MHz41,751,090,458,4
20 MHz40,955,667,868,3

El máximo TCP de estas filas es 55,6 Mbps en Rx con un canal de 20 MHz. El máximo UDP es 90,4 Mbps en Tx con un canal de 40 MHz. Cada cifra pertenece a su protocolo, dirección y configuración.

La tabla también ayuda a elegir expectativas sin simplificar demasiado: en estas mediciones, el canal de 40 MHz obtuvo el mayor resultado UDP Tx, mientras que el de 20 MHz obtuvo el mayor TCP Rx. No hay una única configuración que encabece todas las columnas.

Espressif advierte que estas cifras son resultados de referencia, no velocidades garantizadas para cada montaje de Raspberry Pi. El rendimiento depende de las condiciones de la medición y de la configuración utilizada.

Cortes de alimentación y límites del firmware

En un montaje concreto con ESP32-C6 se observó que la conexión se interrumpía al cortar la alimentación del ESP mediante un interruptor y se recuperaba al restablecerla, sin que el módulo del kernel fallara. El comportamiento corresponde a ese montaje particular.

La integración con la pila inalámbrica de Linux tampoco elimina los componentes binarios cerrados de la parte de radio del ESP. ESP-Hosted-Linux permite gestionar la interfaz desde Linux, pero el firmware de radio incluye componentes que no tienen su código fuente abierto.