Skip to Content

Iniziare con XIAO-ESP32-S3-Sense

Iniziare con XIAO-ESP32-S3-Sense

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:

Parts of the XIAO-ESP32-S3 Sense
Componenti della XIAO-ESP32-S3 Sense

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:

This image has an empty alt attribute; its file name is image-1.png
Assembled XIAO-ESP32-S3-Sense board without Wi-Fi Antenna
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.

Main components of XIAO-ESP32-S3-Sense board
Componenti principali della scheda XIAO-ESP32-S3-Sense (source)

La tabella seguente riassume le caratteristiche tecniche della scheda principale:

CategoriaDettagli
MicrocontrolloreEspressif ESP32-S3R8 SoC
CPUDual-core Xtensa® LX7, fino a 240 MHz
Set di istruzioni32-bit, con supporto a estensioni vettoriali per carichi ML e DSP
Accelerazione AIIstruzioni vettoriali per elaborazione leggera di reti neurali
ROM384 KB
SRAM512 KB
RAM esterna8 MB PSRAM
Flash8 MB QSPI NOR Flash
Wi-FiIEEE 802.11 b/g/n (2.4 GHz)
Bluetooth LE 5.0Supporta BLE Mesh e modalità a lunga distanza
Opzioni antennaAntenna PCB integrata / connettore U.FL per antenna esterna
GPIO11 GPIO multifunzione (PWM, I/O digitale, alcuni analogici)
ADCADC a 6 canali, 12-bit
I2C1 interfaccia I2C
SPI1 interfaccia SPI
UART1 interfaccia UART
I2SSupportato (per applicazioni audio)
USBUSB nativo 1.1 FS (12 Mbps), supporto USB-OTG
Connettore USBUSB 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:

CategoriaDettagli
Modello fotocameraOV2640
Risoluzione fotocameraFino a 1600 × 1200 (UXGA)
Interfaccia fotocameraConnettore a 24 pin (DVP parallelo 8-bit + I2C)
Campo visivo fotocamera~60–65°
Frequenza fotogrammi fotocameraFino a 30 FPS a risoluzioni inferiori
Modello microfonoMP34DT06JTR (microfono digitale MEMS)
Interfaccia microfonoPDM (Pulse Density Modulation)
Sensibilità microfono−26 dBFS
Rapporto segnale/rumore microfono61 dB(A)
Supporto scheda SDFino a 32 GB (FAT)

Pinout della scheda XIAO-ESP32-S3-Sense

L’immagine seguente mostra il pinout della scheda XIAO-ESP32-S3-Sense:

Pinout of XIAO-ESP32-S3-Sense board
Pinout della scheda XIAO-ESP32-S3-Sense (source)

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.

Pinout del Sense Hat XIAO-ESP32-S3 (source)

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”:

Open Preferences Dialog
Apri finestra Preferenze

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:

Board icon in Sidebar
Icona scheda nella barra laterale

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.

Install ESP32 Core libraries
Installa librerie core ESP32

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

ESP32 core installed
Core ESP32 installato

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:

Bord selector
Selettore scheda

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:

Select XIAO_ESP32S3 in Board Manager
Seleziona XIAO_ESP32S3 nel Board Manager

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:

Audio Signal in Serial Monitor measured with Microphone
Segnale audio nel Serial Monitor misurato con microfono

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:

esp32cam library installed via Library Manager
Libreria esp32cam installata tramite Library Manager

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 😉