XIAO ESP32S3 con Arduino IDE: primo avvio, Blink e mappa dei pin
Per far lampeggiare il primo LED su una Seeed Studio XIAO ESP32-S3 vi servono tre cose: un cavo USB-C dati, Arduino IDE e il pacchetto schede ESP32 di Espressif. Dentro una scheda da 21 x 17,8 mm c’è un ESP32-S3 con due core Xtensa LX7 fino a 240 MHz. La guida parte dal collegamento al computer, passa per la piattaforma esp32 e la modalità BootLoader e arriva allo sketch Blink. Seguono una mappa dei pin e qualche strumento di diagnosi per quando il caricamento non va. I passaggi valgono per Windows, macOS e Linux; i comandi sono quelli della documentazione ufficiale di Seeed Studio ed Espressif, elencata in fondo.
Cosa serve
- La scheda: XIAO ESP32-S3 oppure XIAO ESP32-S3 Sense, entrambe con 8 MB di PSRAM e 8 MB di Flash. La XIAO ESP32-S3 Plus ha 16 MB di Flash, ma nella wiki Seeed la sua voce nel menu delle schede è ancora indicata come «in arrivo».
- Un cavo USB-C dati. La wiki parla di «data cable», quindi un cavo da sola ricarica non va bene.
- Arduino IDE in versione stabile per il vostro sistema. Espressif chiede la serie 1.8 o successiva. Su Windows avverte che il core ESP32 v2.x.x non funziona su Windows 8.x a 32 bit, su Windows 7 e sulle versioni precedenti.
- Il pacchetto schede esp32 in versione 2.0.8 o successiva: è il minimo indicato da Seeed perché la XIAO ESP32-S3 sia disponibile.
- Solo per la diagnosi, facoltativo: Python 3.10 o più recente, richiesto dall’ultima versione di esptool.
La scheda arriva senza header saldati. Per collegarla a una expansion board o a dei sensori dovete saldarli voi, stando attenti a non unire pin vicini e a non sporcare di stagno lo schermo metallico. Prezzo e disponibilità in Europa non sono indicati nelle pagine consultate. La wiki però pubblica lo schematico, il progetto KiCad, le librerie di footprint e simboli e lo schema dei pin.
Collegare la scheda via USB-C e trovare la porta
Sulla versione base il programma di fabbrica accende il LED utente arancione quando toccate alcuni pin. La Sense invece esce di fabbrica con l’esempio WebCam. Senza batteria collegata, il LED rosso di carica si accende quando inserite il cavo USB-C e si spegne dopo 30 secondi.
La porta seriale ha un nome diverso su ogni sistema:
- Windows: con ogni probabilità COM3 o superiore. COM1 e COM2 di solito sono riservate alle seriali hardware.
- macOS: una porta con «usbmodem» o «usbserial» nel nome.
- Linux: la wiki Seeed non indica il nome della porta.
Per macOS Seeed suggerisce un controllo pratico, che potete ripetere anche sugli altri sistemi: scollegate la scheda, guardate quale porta sparisce dall’elenco e ricollegatela.
Linux: aggiungere l’utente al gruppo dialout
La wiki Seeed non parla di permessi sulla porta seriale. Il comando compare nella guida di installazione di Arduino-ESP32, come primo passo delle istruzioni per Debian/Ubuntu, Fedora e openSUSE. Attenzione al contesto: lì fa parte dell’installazione manuale via git, una procedura diversa da quella con il Boards Manager che seguiamo qui. Espressif non spiega a cosa serve il comando e, alla fine della procedura, dice solo di riavviare Arduino IDE.
Prima di lanciarlo, sappiate cosa fa: modifica gli account di sistema, aggiungendo il vostro utente al gruppo dialout. Per questo passa da sudo e vi chiede la password di amministratore. Non dovete sostituire niente: la variabile $USER diventa da sola il nome dell’utente con cui siete collegati.
sudo usermod -a -G dialout $USER
Poi riavviate il computer, così la modifica ai gruppi diventa effettiva, e solo dopo riaprite Arduino IDE.
Aggiungere l’URL del pacchetto ESP32 in Arduino IDE
Arduino IDE non conosce le schede ESP32 finché non gli dite dove trovare il loro indice. Aprite le preferenze: su Windows da File > Preferences, su macOS da Arduino IDE > Preferences. La wiki Seeed non indica il percorso del menu su Linux, ed Espressif parla in generale della finestra Preferences. Nel campo «Additional Boards Manager URLs» incollate l’indirizzo della wiki Seeed:

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
Il campo accetta più URL separati da virgole, quindi gli indirizzi che avete già per altre schede possono restare. Espressif indica come link della versione stabile anche https://espressif.github.io/arduino-esp32/package_esp32_index.json. Questa guida usa quello della wiki Seeed.
Installare la piattaforma esp32 e scegliere XIAO_ESP32S3
Aprite Tools > Board > Boards Manager… e scrivete esp32 nella casella di ricerca. Selezionate l’ultima versione della piattaforma esp32 e installatela: serve la 2.0.8 o successiva. Alla fine, come prevede la procedura Espressif, riavviate Arduino IDE.

Dopo il riavvio andate nella selezione della scheda in alto, cercate xiao e scegliete XIAO_ESP32S3. È la voce che la wiki indica sia per la versione base sia per la Sense. Nello stesso punto selezionate la porta trovata prima.
Entrare in modalità BootLoader
La wiki indica il BootLoader per due casi precisi: la scheda è collegata ma la porta non compare, oppure la porta c’è ma il caricamento fallisce. Succede, per esempio, dopo un programma sbagliato. Il pulsante BOOT è collegato al GPIO0, uno degli strapping pin che il chip legge al reset per scegliere la modalità di avvio.
- Tenete premuto il pulsante BOOT sulla scheda, senza rilasciarlo.
- Sempre con BOOT premuto, collegate la scheda al computer con il cavo dati.
- A collegamento avvenuto, rilasciate BOOT.
Il metodo alternativo usa anche il pulsante Reset: tenete premuto BOOT mentre la scheda è alimentata e premete una volta Reset.
Caricare Blink e verificare il LED
Aprite File > Examples > 01.Basics > Blink, controllate che scheda e porta siano giuste e premete Upload. Se il caricamento va a buon fine, il LED arancione sul lato destro della scheda comincia a lampeggiare.

Se scriverete codice vostro, ricordate che il LED utente, sul GPIO21, lavora in logica inversa: si spegne con il pin a livello alto e si accende con il pin a livello basso. Se avete caricato lo sketch in modalità BootLoader, premete Reset una volta. La wiki indica che così la XIAO esegue di nuovo il programma caricato.
Mappa dei pin di riferimento
La tabella riassume i pin della XIAO ESP32-S3 e della Sense con i nomi della pagina Pin Multiplexing. Nel codice si usa il prefisso «D» per la funzione digitale (D4, D5) e il prefisso «A» per quella analogica (A4, A5).
| Pin XIAO | Pin del chip | Funzioni | Touch |
|---|---|---|---|
| D0 / A0 | GPIO1 | GPIO, ADC | TOUCH1 |
| D1 / A1 | GPIO2 | GPIO, ADC | TOUCH2 |
| D2 / A2 | GPIO3 | GPIO, ADC | TOUCH3 |
| D3 / A3 | GPIO4 | GPIO, ADC | TOUCH4 |
| D4 / A4 | GPIO5 | GPIO, ADC, I2C SDA | TOUCH5 |
| D5 / A5 | GPIO6 | GPIO, ADC, I2C SCL | TOUCH6 |
| D6 | GPIO43 | GPIO, UART TX | no |
| D7 | GPIO44 | GPIO, UART RX | no |
| D8 / A8 | GPIO7 | GPIO, ADC, SPI SCK | TOUCH7 |
| D9 / A9 | GPIO8 | GPIO, ADC, SPI MISO | TOUCH8 |
| D10 / A10 | GPIO9 | GPIO, ADC, SPI MOSI | TOUCH9 |
Prima di cablare, tenete presente questi punti:
- Alimentazione: dal pin 3V3, l’uscita del regolatore di bordo, potete prelevare fino a 700 mA. Il pin 5V porta i 5 V della USB. Se lo usate come ingresso, mettete un diodo tra la sorgente esterna e il pin, con l’anodo verso la sorgente e il catodo verso il pin 5V. Quando la scheda va a batteria, sul pin 5V non c’è tensione.
- Analogici: sono 9, cioè tutti gli 11 GPIO tranne D6 e D7, che servono alla seriale.
- Touch: i pin con funzione touch sono A0–A5 e A8–A10.
- Strapping pin: il GPIO3, cioè D2, è tra i pin che il chip legge al reset, perché sceglie la sorgente del segnale JTAG. Lo stesso vale per GPIO0, GPIO45 e GPIO46. Dopo il reset tornano a funzionare come normali IO.
- Sense: la scheda di espansione aggiunge D11 (GPIO42) e D12 (GPIO41), riservati di default al microfono. Per usarli va tagliato il collegamento fra le piazzole J1 e J2, solo lungo la linea bianca che le separa: tagliare fuori da quella linea può danneggiare le piste e compromettere la scheda. Il taglio disabilita il microfono, che non si può usare insieme a questi due pin. Nel codice si richiamano con i numeri GPIO, perché la wiki indica che le macro D11 e D12 non sono ancora definite. Questi due pin non supportano l’ADC.
- Sense e SPI: lo slot microSD della scheda di espansione occupa i pin SPI. La piazzola J3 decide se usare la SD o i pin SPI.
- Plus: ha una mappa diversa, da D0 a D19, e nella wiki i suoi pin non hanno la funzione touch.
Installare esptool per la diagnosi (facoltativo)
esptool è lo strumento di Espressif che comunica con il chip direttamente via seriale. Vi permette di controllare se la scheda risponde anche quando Arduino IDE non ci riesce. La documentazione di esptool chiede Python 3.10 o più recente per l’ultima versione. La versione stabile si installa da PyPI con pip:
pip install esptool
Con alcune installazioni di Python questo comando dà errore. In quel caso Espressif suggerisce questa forma oppure pip3 install esptool:
python -m pip install esptool
Espressif consiglia di installare esptool in un ambiente virtuale, per non toccare altre installazioni di Python o di SDK. Prima si crea l’ambiente, qui chiamato esptoolenv:
python -m venv esptoolenv
Poi lo si attiva. Su Windows:
esptoolenv\Scripts\activate
Su Linux e macOS:
source esptoolenv/bin/activate
Con l’ambiente attivo, controllate che sia disponibile anche Setuptools, che la documentazione indica come requisito non presente di default su tutti i sistemi: se manca, installatelo con python -m pip install "setuptools>=77". Quindi installate esptool con python -m pip install esptool. Poi lo avviate con esptool. Se Python viene dal Windows Store, la documentazione indica che probabilmente funziona solo python -m esptool. Quando avete finito, uscite dall’ambiente:
deactivate
L’ambiente resta nella cartella esptoolenv e potete riattivarlo in seguito. Se non vi serve più, cancellate la cartella.
Se qualcosa va storto
La porta non compare, il caricamento fallisce o il programma si comporta in modo anomalo. È il caso Q1 della wiki. Come primo tentativo premete Reset sulla scheda. Se il problema resta, ricontrollate il programma, poi passate alla modalità BootLoader descritta sopra e ricaricate Blink.
Il monitor seriale dà errore o resta vuoto. La FAQ della pagina Pin Multiplexing indica di attivare l’opzione USB CDC On Boot. Secondo la wiki, in Arduino IDE 2.x la stessa causa può lasciare vuoto il monitor seriale.
Nel monitor seriale compaiono messaggi di debug del chip. Potete provare a disattivarli da Tools > Core Debug Level: > None. Seeed avverte però che non sempre funziona, perché l’ESP32-S3 stampa comunque le informazioni di debug sulla seriale.
Controllare che il chip risponda. Con esptool installato potete leggere l’ID della memoria flash, uno dei comandi di base di esptool. Se avete più porte seriali, la documentazione descrive l’opzione --port (o -p) per scegliere quella giusta. Un consiglio: se esptool non trova la scheda, mettetela prima in modalità BootLoader.
esptool flash-id
Il comando stampa il codice del produttore, quello del dispositivo e la dimensione della flash rilevata. Confrontate quest’ultima con il dato di Seeed: 8 MB per la XIAO ESP32-S3 e la Sense, 16 MB per la Plus. Se corrisponde, collegamento e chip rispondono.
Ultima risorsa: cancellare tutta la flash. Attenzione: questo comando cancella l’intera memoria flash, riempiendola di byte 0xFF. Perdete lo sketch caricato, il firmware di fabbrica (sulla Sense anche l’esempio WebCam) e qualsiasi dato salvato in flash. Sketch e dati non si recuperano. Il firmware di fabbrica invece si può riscrivere: la wiki (FAQ Q3) lo mette a disposizione per la XIAO ESP32-S3 e per la Sense, con script per Windows. Prima di lanciare la cancellazione, scollegate dal computer ogni altra scheda ESP, in modo che la XIAO sia l’unica collegata. Poi eseguite esptool flash-id e controllate che la dimensione della flash corrisponda alla vostra XIAO. Espressif precisa che la cancellazione è bloccata di default se sul chip sono attivi Secure Boot o Flash Encryption.
esptool erase-flash
Dopo la cancellazione, ricaricate Blink da Arduino IDE, se serve passando dalla modalità BootLoader. Per tornare al programma di fabbrica, scaricate dalla sezione Resources della wiki il pacchetto del vostro modello e avviate il file .bat corrispondente. Se la scrittura fallisce, Seeed indica di copiare la riga di comando dal prompt e di eseguirla a mano nel terminale, dalla cartella dei file.
Documentazione di riferimento
Pagine consultate il 21 ottobre 2026:
- Seeed Studio Wiki — Getting Started with Seeed Studio XIAO ESP32S3 (Sense)
- Seeed Studio Wiki — XIAO ESP32S3 (Sense) Pin Multiplexing
- Espressif — Arduino-ESP32: Installing (le istruzioni per Linux riguardano Debian/Ubuntu, Fedora e openSUSE e fanno parte dell’installazione manuale via git)
- Espressif — esptool (ESP32-S3): Installation and Dependencies
- Espressif — esptool (ESP32-S3): Basic Commands
- Seeed Studio Wiki


