Per usare un ESP32 come radio Wi-Fi di Raspberry Pi, puoi ricorrere a ESP-Hosted-Linux: colleghi un chip ESP compatibile alla scheda Linux tramite un bus supportato, installi il firmware e carichi il driver corrispondente. Linux ottiene così un’interfaccia wlanX e gestisce connessione wireless e indirizzo IP. È una soluzione per chi vuole integrare una radio nel proprio progetto hardware, con il controllo della rete affidato al sistema operativo.

Il lavoro attraversa tre livelli: collegamenti elettrici, firmware dell’ESP e configurazione dell’host Linux. Devono combaciare tutti. Inserire la password del Wi-Fi in uno sketch per ESP32 segue invece un’altra architettura.

Che cosa fa ESP-Hosted-Linux

ESP-Hosted-Linux di Espressif usa l’ESP come coprocessore radio: un componente separato che mette la propria connettività a disposizione del computer principale. Il collegamento tra i due passa attraverso SDIO, SPI oppure USB, secondo il chip scelto.

Sul lato Linux, il progetto si integra con cfg80211 e nl80211, i meccanismi del sistema operativo per gestire le interfacce wireless. Il risultato è una normale interfaccia WLAN, utilizzabile con gli strumenti di rete Linux anche per le modalità stazione e punto di accesso. Qui ci concentriamo sulla modalità stazione, cioè sulla connessione a un router o a un altro punto di accesso.

Se vuoi soltanto scambiare dati tra un ESP32 e Raspberry Pi, entrambi possono utilizzare le proprie interfacce per collegarsi alla stessa rete. Con ESP-Hosted-Linux, invece, la radio dell’ESP diventa un’interfaccia del computer Linux: serve quindi un collegamento hardware tra le schede.

Anche ESP-Hosted-MCU adotta una divisione del lavoro diversa: lascia una parte maggiore della gestione della connessione sull’ESP. Scegli l’architettura in base a chi deve controllare la rete, prima ancora di scegliere i fili.

Scegliere un target ESP32 e un trasporto

Il target è il modello di chip per cui prepari il firmware; il trasporto è il collegamento che porta comandi e dati tra ESP e host. La matrice hardware di Espressif distingue le combinazioni supportate:

ChipTrasporti supportatiBande Wi-FiStandard Wi-Fi
ESP32SDIO, SPI2,4 GHz802.11b/g/n
ESP32-S2SPI2,4 GHz802.11b/g/n
ESP32-S3SPI2,4 GHz802.11b/g/n
ESP32-S31SPI, USB2,4 GHz802.11b/g/n
ESP32-C2SPI2,4 GHz802.11b/g/n
ESP32-C3SPI2,4 GHz802.11b/g/n
ESP32-C5SDIO, SPI2,4 e 5 GHz802.11a/b/g/n/ac/ax
ESP32-C6SDIO, SPI2,4 GHz802.11b/g/n/ax
ESP32-C61SDIO, SPI2,4 GHz802.11b/g/n/ax

Per un progetto SDIO puoi quindi scegliere ESP32, ESP32-C5, ESP32-C6 oppure ESP32-C61. Se ti serve la banda a 5 GHz, ESP32-C5 offre questa possibilità; ESP32-C6 opera a 2,4 GHz. È una differenza concreta per la scelta della rete a cui collegarti.

ESP32-S31 offre anche il percorso USB. Nel riferimento Raspberry Pi, Espressif indica che questa configurazione non richiede collegamenti GPIO né un overlay Device Tree, cioè una descrizione aggiuntiva dell’hardware per il kernel.

La compatibilità del chip è soltanto il primo requisito. La scheda Linux deve avere un controller utilizzabile per quel bus, una configurazione corretta delle funzioni dei pin e l’integrazione necessaria nel kernel. Anche con un chip supportato, va quindi controllata la configurazione dell’host specifico.

Che cosa ti serve prima di iniziare

  • Un ESP compatibile con il trasporto scelto e una scheda che renda accessibili i segnali necessari.
  • Raspberry Pi o un’altra scheda Linux con il relativo controller bus utilizzabile.
  • Collegamenti e alimentazione adeguati al montaggio; per SDIO, anche i pull-up richiesti.
  • ESP-IDF, l’ambiente di sviluppo Espressif, per compilare e caricare il firmware.
  • Gli strumenti per compilare il modulo del driver sul lato Linux.
  • Un punto di accesso compatibile con la banda Wi-Fi del chip e gli strumenti Linux per gestire associazione e IP.

Collegare ESP32-C6 a Raspberry Pi tramite SDIO

SDIO è un’interfaccia con un segnale di clock, una linea di comando e linee dati. Per ESP32-C6, la combinazione del riferimento Raspberry Pi e della guida hardware Espressif dà questa corrispondenza:

SegnalePin fisico del connettore Raspberry PiCollegamento ESP32-C6 predefinito
DAT313GPIO 23
CLK15GPIO 19
CMD16GPIO 18
DAT018GPIO 20
DAT122GPIO 21
DAT237GPIO 22
Reset ESP31RST
Massa39Massa

La colonna Raspberry Pi usa la numerazione fisica del connettore a 40 pin. Sul lato ESP32-C6, invece, i numeri identificano i GPIO del chip. Controlla entrambe le numerazioni prima di cablare: il pin fisico 18 della Raspberry Pi va a GPIO 20 dell’ESP32-C6.

Pull-up, alimentazione e integrità dei segnali

CMD e DAT0–DAT3 richiedono resistenze di pull-up, che mantengono le linee al livello alto quando non vengono pilotate. Lo schema Espressif mostra pull-up esterni da 10 kΩ e raccomanda di non duplicare quelli già presenti sulla scheda scelta.

I segnali SDIO e SPI utilizzano logica a 3,3 V. Mantieni i collegamenti corti, cura il ritorno di massa e usa un’alimentazione stabile. Se i trasferimenti SDIO sono instabili, Espressif suggerisce di ridurre la frequenza del clock del bus.

Il cablaggio prepara il percorso elettrico; sul computer devi ancora abilitare e configurare il bus. Per SPI servono inoltre i segnali Handshake e Data Ready, usati per coordinare lo scambio dei dati, oltre al reset: la sola connessione delle linee SPI principali non completa il montaggio.

Preparare firmware e driver Linux

Come usare un ESP32 come coprocessore Wi-Fi su Raspberry Pi

La guida rapida Espressif segue una sequenza in cui il firmware dell’ESP e il modulo Linux vengono preparati per la stessa combinazione hardware. Prima di compilare, fissa quindi chip e trasporto: per il cablaggio descritto qui, ESP32-C6 e SDIO.

  1. Seleziona il target del firmware in ESP-IDF. Imposta il chip effettivamente montato, così la compilazione usa la configurazione corretta per quel componente.
  2. Seleziona il trasporto del firmware. Scegli SDIO, SPI oppure USB secondo la combinazione supportata e il collegamento realizzato.
  3. Compila il firmware ESP. Ottieni il programma configurato per il chip e il bus scelti.
  4. Carica il firmware sull’ESP. Il componente deve eseguire il firmware ESP-Hosted-Linux prima di poter collaborare con il driver dell’host.
  5. Prepara il bus sul sistema Linux. Segui la configurazione della tua piattaforma per controller, funzioni dei pin e integrazione hardware nel kernel. Per Raspberry Pi, usa il riferimento dedicato al trasporto scelto.
  6. Compila il modulo host corrispondente. La procedura distingue i percorsi sdio, spi e usb: il driver deve utilizzare lo stesso trasporto del firmware.
  7. Carica il modulo nel kernel. Questo passaggio mette in comunicazione Linux con l’ESP attraverso il bus configurato.

La parte specifica della piattaforma merita attenzione: una configurazione del bus per un’altra scheda Linux non sostituisce quella di Raspberry Pi. Il firmware corretto, da solo, non abilita il controller dell’host.

Configurare il Wi-Fi in Linux

Una volta caricato il driver, la procedura in modalità stazione di Espressif affida a Linux sia l’associazione wireless sia la configurazione IP. Le credenziali della rete vanno quindi gestite sul computer Linux.

  1. Individua l’interfaccia con iw dev. Usa il nome effettivamente assegnato dal sistema: la notazione wlanX indica una famiglia di nomi, e l’interfaccia non è necessariamente wlan0.
  2. Controlla l’interfaccia con ip link. Verifica che sia presente anche tra le interfacce di rete del sistema prima di procedere alla connessione.
  3. Associa l’interfaccia al punto di accesso. Usa il gestore di rete Linux oppure wpa_supplicant, il programma che gestisce l’autenticazione Wi-Fi, con il nome dell’interfaccia individuato.
  4. Configura l’indirizzo IP. Usa il normale gestore di rete o un client DHCP, che richiede la configurazione IP alla rete.

Associazione e configurazione IP sono passaggi distinti. La comparsa dell’interfaccia è il primo controllo riuscito; seguono la connessione al punto di accesso e l’ottenimento dell’indirizzo IP.

Errori comuni e controlli rapidi

Se il percorso si interrompe, riparti dal livello interessato:

  • L’interfaccia non compare: controlla dmesg, il registro dei messaggi del kernel, e i log seriali dell’ESP. Verifica anche che firmware e modulo host usino lo stesso trasporto.
  • Il collegamento SDIO è instabile: ricontrolla pull-up, lunghezza dei collegamenti, massa e alimentazione; riduci il clock del bus secondo le indicazioni Espressif.
  • La configurazione usa wlan0, ma il dispositivo ha un altro nome: recupera il nome con iw dev e usalo negli strumenti di rete.
  • L’interfaccia è presente ma la rete non è configurata: completa nell’ordine associazione Wi-Fi e configurazione IP sul lato Linux.

Interpretare le misure SDIO di ESP32-C6

Espressif riporta queste misure di riferimento per ESP32-C6 tramite SDIO, con Wi-Fi a 2,4 GHz. Tx e Rx indicano le direzioni di trasmissione e ricezione usate nella tabella del progetto; TCP e UDP sono protocolli di trasporto differenti.

Larghezza del canale radioTCP Tx (Mbps)TCP Rx (Mbps)UDP Tx (Mbps)UDP Rx (Mbps)
40 MHz41,751,090,458,4
20 MHz40,955,667,868,3

I 20 e 40 MHz indicano la larghezza del canale Wi-Fi. Il clock SDIO è un parametro separato del collegamento tra ESP e host.

Il valore TCP più alto è 55,6 Mbps, nella riga Rx con canale radio da 20 MHz. Il massimo UDP è 90,4 Mbps, nella riga Tx a 40 MHz. Nelle stesse misure, passare a un canale radio più largo non aumenta tutti i risultati: TCP Rx, per esempio, raggiunge 51,0 Mbps a 40 MHz.

Espressif precisa che i dettagli degli host registrati sono incompleti e che la metodologia Tx/Rx non è descritta uniformemente per tutti i risultati. Sono misure di riferimento del progetto, con prestazioni dipendenti dalle condizioni del montaggio; non garantiscono la stessa velocità su ogni Raspberry Pi.

Comportamento dopo un’interruzione di alimentazione

In un singolo montaggio con ESP32-C6 è stato riportato che il collegamento si interrompeva e si ristabiliva quando un interruttore tagliava e ripristinava l’alimentazione dell’ESP, senza crash o guasti del modulo kernel. L’osservazione riguarda quel montaggio e quel ciclo di spegnimento e riaccensione.