Il Seeed Studio XIAO-ESP32-S3 Senseè una scheda di sviluppo compatta con microcontrollore progettata per applicazioni edge AI e IoT. Basata sul chip ESP32-S3, combina prestazioni dual-core, connettività Wi-Fi e Bluetooth 5, e accelerazione AI integrata con un ricco set di periferiche in un formato minuscolo di 21×17,5 mm.
Ciò che distingue la XIAO-ESP32-S3 Sense è la sua fotocamera integrata da 2MP (OV2640) e il microfono digitale (MP34DT06JTR), che permettono di eseguire visione artificiale e elaborazione audio fin da subito. Dispone inoltre di 8 MB di PSRAM, 8 MB di flash e uno slot per schede SD fino a 32GB, rendendola adatta a carichi di lavoro AI leggeri con framework come TensorFlow Lite Micro o Edge Impulse.
Questo rapido tutorial ti guiderà attraverso le basi per configurare la scheda, caricare il tuo primo programma e accedere alla fotocamera e al microfono per iniziare i tuoi progetti AI. Per maggiori informazioni consulta anche l’ampia Getting Started Wiki by Seeed Studio.
Componenti necessari
Ovviamente, ti servirà una scheda XIAO ESP32 S3 Sense di Seeed Studio per provare gli esempi di codice. Nota che la scheda può scaldarsi molto, ad esempio durante lo streaming video ad alta frequenza di fotogrammi. Ti consiglio di applicare un piccolo dissipatore sul retro della scheda (vedi il componente elencato sotto).
Se vuoi eseguire l’esempio di codice che registra audio, ti servirà anche una scheda SD. Ho indicato una da 32 GB, ma anche una più piccola (8GB) va benissimo per fare prove.

Seeed Studio XIAO ESP32 S3 Sense

Cavo USB C

Piccolo dissipatore 9×9 mm

Scheda SD 32GB
Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.
Caratteristiche della scheda XIAO-ESP32-S3-Sense
La XIAO-ESP32-S3 Sense fa parte della serie ultra-compatta XIAO di Seeed Studio. È costruita attorno al ESP32-S3R8, un SoC di Espressif Systems progettato per compiti di AI e edge computing. Unisce la potenza del SoC ESP32-S3 con periferiche integrate in un formato compatto, aggiungendo sensori di visione e audio onboard.
La XIAO-ESP32-S3 Sense è composta da quattro parti: la scheda principale, il Sense Hat, la fotocamera e l’antenna Wi-Fi:

Il Sense Hat si collega alla scheda principale e include uno slot per scheda SD, un connettore per la fotocamera e un microfono. Una volta assemblata, diventa un’unità molto compatta con dimensioni di un cubo da 20 mm. L’immagine sotto mostra la scheda XIAO-ESP32-S3-Sense assemblata senza antenna Wi-Fi:

L’alimentazione della scheda può essere fornita tramite la porta USB Type-C a 5V o tramite l’interfaccia di ricarica batteria collegabile a una batteria LiPo da 3,7V. Il consumo di corrente varia da 64μA in modalità deep-sleep senza periferiche fino a 340mA durante lo scatto di una foto.
La portata Wi-Fi senza antenna esterna è piuttosto limitata, ma con l’antenna può arrivare fino a 100m. Lo svantaggio dell’antenna è ovviamente lo spazio che occupa.
Scheda principale
La scheda principale ha un piccolo pulsante Reset e un piccolo pulsante Button. Accanto ai pulsanti ci sono piccoli LED per la carica/alimentazione e un LED arancione controllato dall’utente su GPIO21. Oltre ai pin GPIO, la scheda principale ha anche i connettori per l’antenna Wi-Fi esterna e il Sense Hat.

La tabella seguente riassume le caratteristiche tecniche della scheda principale:
| Categoria | Dettagli |
|---|---|
| Microcontrollore | Espressif ESP32-S3R8 SoC |
| CPU | Dual-core Xtensa® LX7, fino a 240 MHz |
| Set di istruzioni | 32-bit, con supporto a estensioni vettoriali per carichi ML e DSP |
| Accelerazione AI | Istruzioni vettoriali per elaborazione leggera di reti neurali |
| ROM | 384 KB |
| SRAM | 512 KB |
| RAM esterna | 8 MB PSRAM |
| Flash | 8 MB QSPI NOR Flash |
| Wi-Fi | IEEE 802.11 b/g/n (2.4 GHz) |
| Bluetooth LE 5.0 | Supporta BLE Mesh e modalità a lunga distanza |
| Opzioni antenna | Antenna PCB integrata / connettore U.FL per antenna esterna |
| GPIO | 11 GPIO multifunzione (PWM, I/O digitale, alcuni analogici) |
| ADC | ADC a 6 canali, 12-bit |
| I2C | 1 interfaccia I2C |
| SPI | 1 interfaccia SPI |
| UART | 1 interfaccia UART |
| I2S | Supportato (per applicazioni audio) |
| USB | USB nativo 1.1 FS (12 Mbps), supporto USB-OTG |
| Connettore USB | USB Type-C per alimentazione, programmazione e seriale |
Sense Hat
Come detto, il Sense Hat sopra la scheda principale ospita la fotocamera, il microfono e uno slot per Micro SD. La tabella seguente riassume i dettagli tecnici:
| Categoria | Dettagli |
|---|---|
| Modello fotocamera | OV2640 |
| Risoluzione fotocamera | Fino a 1600 × 1200 (UXGA) |
| Interfaccia fotocamera | Connettore a 24 pin (DVP parallelo 8-bit + I2C) |
| Campo visivo fotocamera | ~60–65° |
| Frequenza fotogrammi fotocamera | Fino a 30 FPS a risoluzioni inferiori |
| Modello microfono | MP34DT06JTR (microfono digitale MEMS) |
| Interfaccia microfono | PDM (Pulse Density Modulation) |
| Sensibilità microfono | −26 dBFS |
| Rapporto segnale/rumore microfono | 61 dB(A) |
| Supporto scheda SD | Fino a 32 GB (FAT) |
Pinout della scheda XIAO-ESP32-S3-Sense
L’immagine seguente mostra il pinout della scheda XIAO-ESP32-S3-Sense:

Il pin 5V è il 5V proveniente dalla porta USB. Il pin 3V3 fornisce l’uscita dal regolatore onboard e può erogare fino a 700mA. GND è la massa.
Per quanto riguarda i GPIO: la scheda offre 11 GPIO digitali/analogici ma GPIO0, GPIO3, GPIO43 e GPIO44 sono pin di strapping che devono essere in uno stato specifico all’avvio. Una volta avviato il microcontrollore, i pin di strapping funzionano come normali pin IO, ma è comunque consigliabile evitarli se possibile. Per maggiori dettagli consulta la Getting Started Wiki by Seeed Studio.
Il Sense Hat fornisce altri due pin GPIO (GPIO41, GPIO42) disponibili come GPIO quando il microfono non è in uso.

Schema elettrico
Per informazioni più dettagliate, dai un’occhiata anche allo schema elettrico della scheda XIAO-ESP32-S3-Sense, disponibile al seguente link.
Installare ESP32 Core
Se vuoi usare l’IDE Arduino per programmare la scheda (come faremo), devi prima installare l’ESP32 Core per abilitare il supporto alle schede ESP32 nell’IDE Arduino. Apri il Arduino IDE e segui i passaggi indicati di seguito. Se hai problemi, puoi trovare istruzioni più dettagliate nel nostro tutorial How to Program ESP32 with Arduino IDE.
URL aggiuntivi per il Boards Manager
Per prima cosa apri la finestra Preferenze selezionando “Preferences…” dal menu “File”:

Si aprirà la finestra Preferenze mostrata sotto. Nella scheda Settings troverai in basso una casella di testo etichettata “Additional boards manager URLs“:

In questo campo incolla il seguente URL: “https://espressif.github.io/arduino-esp32/package_esp32_dev_index.json“
Questo permetterà all’IDE Arduino di sapere dove trovare le librerie core ESP32. Ora installeremo effettivamente le librerie core ESP32 usando il Boards Manager.
Boards Manager
Apri il BOARDS MANAGER cliccando sull’icona della scheda nella barra laterale dell’IDE Arduino:

Vedrai apparire il BOARDS MANAGER a destra della barra laterale. Digita “ESP32” nel campo di ricerca in alto e dovresti vedere due tipi di schede ESP32; le “Arduino ESP32 Boards” e le schede “esp32 di Espressif”. Noi vogliamo le librerie esp32 di Espressif. Clicca sul pulsante INSTALL e attendi che il download e l’installazione siano completati.

Una volta installate, il tuo Boards Manager dovrebbe apparire così, anche se la versione effettiva (qui 3.0.0-a) potrebbe essere diversa.

Nel passaggio successivo ti mostro come selezionare la scheda ESP32 per la XIAO-ESP32-S3-Sense.
Seleziona scheda XIAO_ESP32S3
Puoi selezionare una scheda dal menu a tendina sotto la barra dei menu: nell’esempio sotto è selezionata una Arduino Uno, per esempio:

Cliccando sul nome della scheda attualmente selezionata (Arduino Uno), si aprirà la finestra di selezione scheda. Nel campo di ricerca digita “xiao s3” e seleziona “XIAO_ESP32S3” come mostrato sotto:

Se la scheda è collegata al PC via USB, dovresti poter selezionare anche la porta COM. Nello screenshot sopra è COM9, ma nel tuo caso potrebbe essere un’altra porta COM.
Esempi di codice
In questa sezione ti fornirò alcuni esempi di codice su come usare il microfono e la fotocamera della scheda. Inizieremo però con il classico esempio Blink per testare l’installazione della scheda e la comunicazione USB.
Blink LED onboard
Questo è il classico esempio Blink. Accende e spegne il LED onboard per un secondo. Il LED onboard della XIAO-ESP32-S3 Sense è collegato a GPIO21 ma è invertito. LOW significa LED acceso e HIGH LED spento. Puoi vedere questo nell’esempio di codice sotto:
void setup() {
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
Serial.println("Off");
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
Serial.println("On");
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
Lettura & scrittura GPIO
Nei seguenti esempi molto brevi, leggiamo e scriviamo su GPIO. Per specificare i pin nel codice puoi usare il numero GPIO x o il numero Dx. Per esempio, secondo il pinout, D3 o GPIO4 identificano lo stesso pin e nel codice puoi usare uno o l’altro. I due esempi di codice seguenti sono identici nella funzione e impostano GPIO4 a HIGH:
digitalWrite(D3, HIGH); // D3 == GPIO4
digitalWrite(4, HIGH); // D3 == GPIO4
Se vuoi leggere segnali analogici puoi usare le costanti predefinite Ax. Per esempio, il codice seguente legge un ingresso analogico da A3, che è lo stesso pin GPIO4:
int val = analogRead(A3); // A3 == GPIO4
int val = analogRead(4); // A3 == GPIO4
I valori analogici variano da 0 a 4095, equivalenti a una tensione in ingresso tra 0 e 3.3V.
Lettura segnale microfono
L’esempio successivo usa il microfono integrato per campionare dati audio via I2S e mostra i dati audio sul Serial Monitor e Serial Plotter:
#include "ESP_I2S.h"
const int8_t I2S_CLK = 42;
const int8_t I2S_DIN = 41;
const uint32_t SAMPLERATE = 16000;
I2SClass I2S;
void setup() {
Serial.begin(115200);
I2S.setPinsPdmRx(I2S_CLK, I2S_DIN);
if (!I2S.begin(I2S_MODE_PDM_RX, SAMPLERATE, I2S_DATA_BIT_WIDTH_16BIT, I2S_SLOT_MODE_MONO)) {
Serial.println("Can't find microphone!");
while (1)
;
}
}
void loop() {
int sample = I2S.read();
if (sample > 1) {
Serial.println(sample);
}
}
Se esegui il codice, apri il Serial Plotter e fischi a frequenza fissa, vedrai una bella onda sinusoidale sul Serial Plotter:

Se vari la frequenza fischiando più basso o più alto, vedrai che la frequenza dell’onda sinusoidale mostrata cambia di conseguenza. Molto carino ; )
Registrazione audio
Il codice esempio seguente mostra come registrare 20 secondi di audio e scrivere i dati come file audio in formato WAV sulla scheda SD. Ti servirà una scheda SD formattata.
Appena apri il Serial Monitor, il codice stampa “20 SEC RECORDING STARTED …” e inizia la registrazione. Dopo 20 secondi scrive il file audio e stampa “COMPLETE.”. Puoi quindi estrarre la scheda SD e ascoltare l’audio registrato sul tuo computer.
#include "ESP_I2S.h"
#include "FS.h"
#include "SD.h"
void setup() {
I2SClass i2s;
uint8_t *wav_buffer;
size_t wav_size;
Serial.begin(115200);
while (!Serial) {
delay(10);
}
i2s.setPinsPdmRx(42, 41);
if (!i2s.begin(I2S_MODE_PDM_RX, 16000, I2S_DATA_BIT_WIDTH_16BIT, I2S_SLOT_MODE_MONO)) {
Serial.println("Can't find microphone!");
while (1); // do nothing
}
if(!SD.begin(21)){
Serial.println("Failed to mount SD Card!");
while (1) ;
}
Serial.println("20 SEC RECORDING STARTED ...");
wav_buffer = i2s.recordWAV(20, &wav_size);
File file = SD.open("/audio.wav", FILE_WRITE);
if (!file) {
Serial.println("Failed to open file for writing!");
return;
}
if (file.write(wav_buffer, wav_size) != wav_size) {
Serial.println("Failed to write audio data to file!");
return;
}
file.close();
Serial.println("COMPLETE.");
}
void loop() {
delay(1000);
}
Se vuoi maggiori informazioni su come registrare audio, dai un’occhiata al tutorial Record Audio with XIAO-ESP32-S3-Sense.
Streaming video
Come ultimo esempio, trasmetteremo in streaming i dati video al browser web del tuo computer. Tuttavia, il codice richiede la libreria esp32cam, che puoi installare tramite il Library Manager nell’IDE Arduino. Cerca “esp32cam” e premi INSTALL. L’immagine sotto mostra l’installazione completata:

Inoltre, nel codice sotto dovrai sostituire SSID e PASSWORD con le credenziali effettive della tua rete Wi-Fi.
Successivamente dovresti impostare i seguenti parametri per la scheda nel menu Tools:
- abilita: OPI PSRAM
- imposta Partition Scheme: Maximum APP
Questo dovrebbe permetterti di compilare ed eseguire il codice. Stamperà l’URL per lo streaming video sul Serial Monitor, es. “Stream at: http://192.168.2.40/stream”. Se copi e incolli questo URL nella barra degli indirizzi del browser web, dovresti vedere il video.
#include "WebServer.h"
#include "WiFi.h"
#include "esp32cam.h"
const char* WIFI_SSID = "SSID";
const char* WIFI_PASS = "PASSWORD";
const char* URL = "/stream";
const auto RESOLUTION = esp32cam::Resolution::find(800, 600);
const int FRAMERATE = 10;
WebServer server(80);
void handleStream() {
static char head[128];
WiFiClient client = server.client();
server.sendContent("HTTP/1.1 200 OK\r\n"
"Content-Type: multipart/x-mixed-replace; "
"boundary=frame\r\n\r\n");
while (client.connected()) {
auto frame = esp32cam::capture();
if (frame) {
sprintf(head,
"--frame\r\n"
"Content-Type: image/jpeg\r\n"
"Content-Length: %ul\r\n\r\n",
frame->size());
client.write(head, strlen(head));
frame->writeTo(client);
client.write("\r\n");
delay(1000/FRAMERATE);
}
}
}
void initCamera() {
using namespace esp32cam;
Config cfg;
cfg.setPins(pins::XiaoSense);
cfg.setResolution(RESOLUTION);
cfg.setBufferCount(2);
cfg.setJpeg(80);
Camera.begin(cfg);
}
void initWifi() {
WiFi.persistent(false);
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
}
Serial.printf("Stream at: http://%s%s\n",
WiFi.localIP().toString().c_str(), URL);
}
void initServer() {
server.on(URL, handleStream);
server.begin();
}
void setup() {
Serial.begin(115200);
initWifi();
initCamera();
initServer();
}
void loop() {
server.handleClient();
}
Se vuoi informazioni più dettagliate, dai un’occhiata al tutorial Stream Video with with XIAO-ESP32-S3-Sense.
E questo è tutto! Ora dovresti avere abbastanza informazioni per usare la fotocamera, il microfono e i GPIO della scheda XIAO-ESP32-S3 Sense.
Conclusioni
Questo post ti ha mostrato come iniziare rapidamente con la Seeed Studio XIAO-ESP32-S3 Sense. Seeed Studio offre molte altre informazioni nel suo Getting Started Wiki.
Rispetto ad altre schede simili come la ESP32-CAM o la ESP32-WROVER CAM, che hanno anch’esse fotocamere, i vantaggi della XIAO-ESP32-S3 Sense sono le dimensioni molto più ridotte, il microfono aggiuntivo e un microcontrollore con supporto specifico per applicazioni AI, come classificazione oggetti, riconoscimento facciale e altro.
Puoi trovare vari pretrained modeled sul sito Seeed Studio, dove la piattaforma SenseCraft AI facilita il deployment di questi modelli. E se ti interessano applicazioni controllate a voce e vuoi addestrare il tuo modello, dai un’occhiata ai nostri tutorial Voice control with XIAO-ESP32-S3-Sense and Edge Impulse e Train an Object Detection Model with Edge Impulse for ESP32-CAM.
Se hai domande, sentiti libero di lasciarle nella sezione commenti.
Buon divertimento con il tinkering 😉

