O Seeed Studio XIAO-ESP32-S3 Sense é uma placa de desenvolvimento compacta com microcontrolador, projetada para aplicações de edge AI e IoT. Construída em torno do chip ESP32-S3, combina desempenho dual-core, conectividade Wi-Fi e Bluetooth 5, e aceleração AI integrada com um conjunto rico de periféricos num formato minúsculo de 21×17,5 mm.
O que distingue a XIAO-ESP32-S3 Sense é a sua câmara 2MP integrada (OV2640) e o microfone digital (MP34DT06JTR), permitindo visão computacional e processamento de áudio logo à partida. Também inclui 8 MB de PSRAM, 8 MB de flash e um slot para cartão SD externo de 32GB, tornando-a ideal para cargas de trabalho AI leves usando frameworks como TensorFlow Lite Micro ou Edge Impulse.
Este tutorial rápido irá guiá-lo pelos conceitos básicos de configuração da placa, gravação do seu primeiro programa e acesso à câmara e microfone para começar os seus próprios projetos com AI. Para mais informações, veja também o extenso Getting Started Wiki by Seeed Studio.
Peças Necessárias
Obviamente, vai precisar de uma placa XIAO ESP32 S3 Sense da Seeed Studio para experimentar os exemplos de código. Note que a placa pode aquecer bastante, por exemplo, ao transmitir vídeo com alta taxa de frames. Recomendo que coloque um pequeno dissipador de calor na parte de trás da placa (veja a peça listada abaixo).
Se quiser executar o exemplo de código que grava áudio, também precisará de um cartão SD. Listei um cartão de 32 GB, mas um menor (8GB) também serve perfeitamente para experimentar.

Seeed Studio XIAO ESP32 S3 Sense

Cabo USB C

Pequeno dissipador 9×9 mm

Cartão 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.
Características da placa XIAO-ESP32-S3-Sense
A XIAO-ESP32-S3 Sense faz parte da série ultra-compacta XIAO da Seeed Studio. É construída em torno do ESP32-S3R8, um SoC da Espressif Systems adaptado para tarefas de AI e computação de borda. Combina o poder do SoC ESP32-S3 com periféricos integrados num formato compacto, adicionando sensores de visão e áudio onboard.
A XIAO-ESP32-S3 Sense é composta por quatro partes: a placa principal, o Sense Hat, a câmara e a antena Wi-Fi:

O Sense Hat pode ser ligado à placa principal e tem um soquete para cartão SD, um soquete para a câmara e um microfone. Quando montado, torna-se uma unidade muito compacta com dimensões de um cubo de 20mm. A imagem abaixo mostra a placa XIAO-ESP32-S3-Sense montada sem a antena Wi-Fi:

A alimentação da placa pode ser fornecida via a porta USB Type-C 5V ou pela interface de carregamento da bateria que pode ser ligada a uma bateria LiPo de 3,7V. O consumo de corrente da placa varia de 64μA em modo deep-sleep, sem periféricos, até 340mA ao tirar uma foto.
O alcance Wi-Fi da placa sem a antena externa será bastante curto, mas com a antena pode chegar até 100m. A desvantagem da antena é, obviamente, o espaço que ocupa.
Placa Principal
A placa principal tem um pequeno botão Reset e um botão Button. Ao lado dos botões há pequenos LEDs para carregamento/energia e um LED laranja controlado pelo utilizador no GPIO21. Além dos pinos GPIO, a placa principal também tem conectores para a antena Wi-Fi externa e para o Sense Hat.

A tabela seguinte resume as características técnicas da placa principal:
| Categoria | Detalhes |
|---|---|
| Microcontrolador | Espressif ESP32-S3R8 SoC |
| CPU | Dual-core Xtensa® LX7, até 240 MHz |
| Conjunto de Instruções | 32-bit, com suporte a extensões vetoriais para ML e DSP |
| Aceleração AI | Instruções vetoriais para processamento leve de redes neurais |
| ROM | 384 KB |
| SRAM | 512 KB |
| RAM Externa | 8 MB PSRAM |
| Flash | 8 MB QSPI NOR Flash |
| Wi-Fi | IEEE 802.11 b/g/n (2.4 GHz) |
| Bluetooth LE 5.0 | Suporta BLE Mesh e modo de longo alcance |
| Opções de Antena | Antena PCB onboard / conector U.FL para antena externa |
| GPIOs | 11 GPIOs multifunção (PWM, digital I/O, alguns analógicos) |
| ADC | ADC de 6 canais, 12-bit |
| I2C | 1 interface I2C |
| SPI | 1 interface SPI |
| UART | 1 interface UART |
| I2S | Suportado (para aplicações de áudio) |
| USB | USB nativo 1.1 FS (12 Mbps), suporte USB-OTG |
| Conector USB | USB Type-C para alimentação, programação e serial |
Sense Hat
Como mencionado, o Sense Hat em cima da placa principal inclui a câmara, o microfone e um soquete para cartão Micro SD. A tabela seguinte resume os detalhes técnicos:
| Categoria | Detalhes |
|---|---|
| Modelo da Câmara | OV2640 |
| Resolução da Câmara | Até 1600 × 1200 (UXGA) |
| Interface da Câmara | Conector de 24 pinos (DVP paralelo de 8 bits + I2C) |
| Campo de Visão da Câmara | ~60–65° |
| Taxa de Frames da Câmara | Até 30 FPS em resoluções mais baixas |
| Modelo do Microfone | MP34DT06JTR (microfone digital MEMS) |
| Interface do Microfone | PDM (Modulação por Densidade de Pulsos) |
| Sensibilidade do Microfone | −26 dBFS |
| SNR do Microfone | 61 dB(A) |
| Suporte a Cartão SD | Até 32 GB (FAT) |
Pinout da placa XIAO-ESP32-S3-Sense
A imagem seguinte mostra o pinout da placa XIAO-ESP32-S3-Sense:

O pino 5V é o 5V da porta USB. O pino 3V3 fornece a saída do regulador onboard e pode fornecer até 700mA. O GND é o terra.
Quanto aos GPIOs: a placa oferece 11 GPIOs digitais/analógicos, mas GPIO0, GPIO3, GPIO43 e GPIO44 são pinos de strapping que precisam estar num estado específico durante o arranque. Uma vez que o microcontrolador está a funcionar, os pinos de strapping operam como pinos IO normais, mas deve evitá-los se possível. Para mais detalhes veja o Getting Started Wiki by Seeed Studio.
O Sense Hat fornece mais dois pinos GPIO (GPIO41, GPIO42) que estão disponíveis para GPIO quando o microfone não está a ser usado.

Esquemas
Para informações mais detalhadas, veja também os esquemas da placa XIAO-ESP32-S3-Sense, que pode encontrar no seguinte link.
Instalar Core ESP32
Se quiser usar o Arduino IDE para programar a placa (como faremos), primeiro precisa instalar o Core ESP32 para ativar o suporte a placas ESP32 no Arduino IDE. Abra o seu Arduino IDE e siga os passos indicados abaixo. Se tiver problemas, pode encontrar instruções mais detalhadas no nosso tutorial How to Program ESP32 with Arduino IDE.
URLs adicionais para o gestor de placas
Primeiro abra o diálogo de Preferências selecionando “Preferences…” no menu “File”:

Isto abrirá o diálogo de Preferências mostrado abaixo. Na aba Settings encontrará uma caixa de edição na parte inferior do diálogo rotulada “Additional boards manager URLs“:

Neste campo copie a seguinte URL: “https://espressif.github.io/arduino-esp32/package_esp32_dev_index.json“
Isto informa o Arduino IDE onde encontrar as bibliotecas core do ESP32. A seguir vamos instalar as bibliotecas core ESP32 usando o Gestor de Placas.
Gestor de Placas
Abra o BOARDS MANAGER clicando no ícone da placa na barra lateral do Arduino IDE:

Verá o BOARDS MANAGER aparecer ao lado da barra lateral. Digite “ESP32” no campo de pesquisa no topo e deverá ver dois tipos de placas ESP32; as “Arduino ESP32 Boards” e as placas “esp32 da Espressif”. Queremos as bibliotecas esp32 da Espressif. Clique no botão INSTALL e aguarde até a descarga e instalação terminarem.

Depois de instalado, o seu Gestor de Placas deverá parecer com isto, embora a versão real (aqui 3.0.0-a) possa ser diferente.

No passo seguinte, mostro como selecionar a placa ESP32 para a XIAO-ESP32-S3-Sense.
Selecionar placa XIAO_ESP32S3
Pode selecionar uma placa no menu suspenso sob a barra de menus: no exemplo abaixo está selecionada uma Arduino Uno, por exemplo:

Clicando no nome da placa atualmente selecionada (Arduino Uno), abrirá o diálogo de seleção de placa. Na caixa de pesquisa digite “xiao s3” e selecione “XIAO_ESP32S3” como mostrado abaixo:

Se a placa estiver ligada ao seu PC via USB, também deverá conseguir selecionar a porta COM. Na captura acima é COM9, mas no seu caso pode ser outra porta COM.
Exemplos de Código
Nesta secção, vou fornecer alguns exemplos de código sobre como usar o microfone e a câmara da placa. No entanto, começaremos com o exemplo comum Blink para testar a instalação da placa e a comunicação USB.
Piscar LED onboard
Este é o exemplo comum Blink. Liga e desliga o LED onboard durante um segundo. O LED onboard da XIAO-ESP32-S3 Sense está ligado ao GPIO21, mas é invertido. LOW significa que o LED está ligado e HIGH que está desligado. Pode ver isto no exemplo de código abaixo:
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);
}
Ler & Escrever GPIO
Nos exemplos muito curtos seguintes, lemos e escrevemos GPIO. Para especificar pinos no código pode usar o número GPIO x ou o número Dx. Por exemplo, de acordo com o pinout, D3 ou GPIO4 identificam o mesmo pino e no seu código pode usar qualquer um dos dois. Os dois exemplos de código seguintes são idênticos em função e definem GPIO4 para HIGH:
digitalWrite(D3, HIGH); // D3 == GPIO4
digitalWrite(4, HIGH); // D3 == GPIO4
Se quiser ler sinais analógicos pode usar as constantes pré-definidas Ax. Por exemplo, o código seguinte lê uma entrada analógica de A3, que é o mesmo que o pino GPIO4:
int val = analogRead(A3); // A3 == GPIO4
int val = analogRead(4); // A3 == GPIO4
Os valores analógicos variam de 0 a 4095, o que equivale a uma tensão na entrada entre 0 e 3,3V.
Ler sinal do microfone
O próximo exemplo usa o microfone incorporado para amostrar dados de áudio via I2S e exibe os dados de áudio no Monitor Serial e no 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 executar o código, abrir o Serial Plotter e assobiar numa frequência fixa, verá uma bonita onda senoidal no Serial Plotter:

Se variar a frequência assobiando um pouco mais baixo ou mais alto, verá que a frequência da onda senoidal exibida muda em conformidade. Muito fixe ; )
Gravar áudio
O código de exemplo seguinte mostra como gravar 20 segundos de áudio e grava os dados como um ficheiro de áudio em formato WAV no cartão SD. Vai precisar de um cartão SD formatado.
Assim que abrir o Monitor Serial, o código imprime “20 SEC RECORDING STARTED …” e inicia a gravação. Após 20 segundos grava o ficheiro de áudio e imprime “COMPLETE.”. Pode então retirar o cartão SD e ouvir o áudio gravado no seu computador.
#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 quiser mais informações sobre como gravar áudio, veja o tutorial Record Audio with XIAO-ESP32-S3-Sense.
Transmitir vídeo
Como exemplo final, vamos transmitir dados de vídeo para o navegador web do seu computador. No entanto, o código requer a biblioteca esp32cam, que pode instalar via o Library Manager no Arduino IDE. Basta procurar por “esp32cam” e clicar em INSTALL. A imagem abaixo mostra a instalação concluída:

Além disso, no código abaixo terá de substituir SSID e PASSWORD pelas credenciais reais da sua rede Wi-Fi.
De seguida, deve definir o seguinte parâmetro para a placa no menu Tools:
- ativar: OPI PSRAM
- definir Partition Scheme: Maximum APP
Isto deve permitir compilar e executar o código. Ele imprimirá a URL para o stream de vídeo no Monitor Serial, por exemplo “Stream at: http://192.168.2.40/stream”. Se copiar e colar esta URL na barra de endereços do seu navegador, deverá ver o vídeo.
#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 quiser informações mais detalhadas, veja o tutorial Stream Video with with XIAO-ESP32-S3-Sense.
E é tudo! Agora deve ter informação suficiente para usar a câmara, microfone e GPIO da placa XIAO-ESP32-S3 Sense.
Conclusões
Este artigo mostrou como começar rapidamente com a Seeed Studio XIAO-ESP32-S3 Sense. A Seeed Studio tem muito mais informação no seu Getting Started Wiki.
Comparado com outras placas similares como a ESP32-CAM ou a ESP32-WROVER CAM, que também têm câmaras, as vantagens da XIAO-ESP32-S3 Sense são o tamanho muito menor, o microfone adicional e um microcontrolador com suporte específico para aplicações AI, como classificação de objetos, deteção facial e mais.
Pode encontrar vários pretrained modeled no site da Seeed Studio, onde a plataforma SenseCraft AI facilita a implementação destes modelos. E se estiver interessado em aplicações controladas por voz e quiser treinar o seu próprio modelo, veja os nossos tutoriais Voice control with XIAO-ESP32-S3-Sense and Edge Impulse e Train an Object Detection Model with Edge Impulse for ESP32-CAM.
Se tiver alguma dúvida, sinta-se à vontade para deixar nos comentários.
Boas experiências a criar 😉

