Uso dos periféricos onboard
Esta página reúne demos autônomos em nível de função para cada periférico onboard do Display IPS de 1,14''. Cada seção é independente — você pode escolher a que corresponde ao seu caso de uso sem precisar ler as demais.
Os GIFs de demonstração nesta página estão acelerados para mantê-los curtos.
Todos os demos desta página exigem esp32 Boards by Espressif (3.3.11) conforme descrito em Getting Started, além da biblioteca Seeed_GFX2 instalada manualmente conforme descrito abaixo.
- Seeed_GFX2 (instalação manual) — esta biblioteca não está disponível no Library Manager e deve ser instalada manualmente:
Passo 1. Clique no botão acima para baixar Seeed_GFX2 v1.0.0 como um arquivo ZIP (fixado em uma tag de release para que o tutorial permaneça reprodutível). Como alternativa, clone o repositório em Seeed-Studio/Seeed_GFX2.
Passo 2. No Arduino IDE, vá em Sketch > Include Library > Add .ZIP Library... e selecione o ZIP baixado. O IDE lê library.properties e o instala automaticamente na pasta Seeed_GFX2 correta — você não precisa renomear a pasta extraída. (Para instalar manualmente em vez disso, descompacte o arquivo e renomeie a pasta extraída para Seeed_GFX2 antes de colocá-la em Documents/Arduino/libraries/.)
Passo 3. Reinicie o Arduino IDE para que a nova biblioteca seja detectada.
- Seeed_GFX2 é a biblioteca gráfica da Seeed Studio construída sobre uma arquitetura em camadas
Board+Panel Config. Cada demo inicializa o display com uma única chamadadisplay.begin<Board_..., Config_...>()— o template Board contém o mapa de pinos (CS/DC/SCK/MOSI/RST/BL), e o Panel Config incorpora a resolução 135×240, a ordem de cores e a inversão. Nenhumdriver.hou configuração manual de pinos é necessária. - Nesta placa os demos usam
Board_XIAO_1inch14_LCD<13, 12>(RST=13, BL=12) comConfig_Seeed_1inch14_LCD_ST7789(135×240). Alguns demos definem umConfig_XIAO_1inch14_LCD_ST7789_BGRlocal ao sketch como substituição para a ordem de cores BGR. - A IMU é lida diretamente via I2C (
Wire) nestes demos — nenhuma biblioteca externa de IMU é necessária. O microfone PDM e a saída I2S usam os drivers do ESP-IDF 5 (driver/i2s_pdm.h,driver/i2s_std.h) eLittleFS, todos incluídos no pacote de placas esp32. - O Display IPS de 1,14'' não possui controlador touch nem slot para cartão SD, portanto não são necessárias bibliotecas de touch ou SD.
Obtendo o código de demonstração
Cada demo desta página está no repositório Display-Gadgets, dentro do diretório code_GFX2/Function/. Cada demo é uma pasta contendo um único sketch .ino. Sempre baixe a pasta completa em vez de copiar o código-fonte .ino da visualização web do GitHub.
Opção A — Baixar o repositório como ZIP (recomendado):
- Abra github.com/Seeed-Projects/Display-Gadgets e clique em Code > Download ZIP, depois extraia o arquivo em qualquer lugar conveniente.
- Navegue até
code_GFX2/Function/e abra a pasta mostrada na linha Code location de cada demo. Por exemplo, o demo GraphicTest para esta placa está emcode_GFX2/Function/114_ESP32/xiao_esp32s3_114_graphictest/. - Dê um clique duplo no arquivo
.inopara abri-lo no Arduino IDE.
Opção B — git clone:
git clone https://github.com/Seeed-Projects/Display-Gadgets.git
Em seguida, abra o arquivo .ino do demo a partir da pasta clonada code_GFX2/Function/....
Display da tela — GraphicTest
Este demo executa um benchmark gráfico completo no painel IPS ST7789 de 1,14 polegada (135×240), cobrindo barras de cores, linhas, retângulos, círculos, triângulos, retângulos arredondados, texto e um gradiente de pixels. Use-o para verificar se a tela está conectada corretamente e se todas as chamadas de desenho funcionam como esperado.
Code location: code_GFX2/Function/114_ESP32/xiao_esp32s3_114_graphictest/
Como funciona
O sketch inicializa o painel IPS ST7789 via Seeed_GFX2 e, em seguida, executa dez primitivas gráficas em sequência, medindo o tempo de execução de cada uma via micros() e imprimindo o resultado no monitor serial.
O display é inicializado com uma única chamada de template:
display.begin<Board_XIAO_1inch14_LCD<13, 12>,
Config_Seeed_1inch14_LCD_ST7789>();
O template Board contém o mapa de pinos — CS=D2, DC=D3, SCK=D8, MOSI=D10 — e seus parâmetros de template <RST, BL> recebem números GPIO puros, então <13, 12> define RST=GPIO13 (D17) e BL=GPIO12 (D18). O Panel Config incorpora a resolução 135×240, a ordem de cores e a inversão (invert = true), portanto nenhum driver.h ou chamada manual a invertDisplay() é necessária.
Executando o demo
Passo 1. Abra xiao_esp32s3_114_graphictest.ino no Arduino IDE.
Passo 2. Selecione Tools > Board > esp32 > XIAO_ESP32S3_PLUS e a Porta correta.
Passo 3. Clique em Upload.
Passo 4. Abra Tools > Serial Monitor (115200 baud). Você deverá ver o tamanho do painel seguido pela saída de tempo para cada teste:
=== XIAO ESP32-S3 Plus 1.14 graphic test ===
LCD width: 135
LCD height: 240
Color bars: 96.02 ms
Lines: 2634.02 ms
Fast lines: 143.65 ms
Rectangles: 113.85 ms
Filled rectangles: 340.06 ms
Circles: 358.57 ms
Triangles: 378.17 ms
Round rectangles: 163.69 ms
Text: 1458.63 ms
Pixel gradient: 4670.28 ms
Graphic test finished.
Na tela, você verá cada padrão de teste exibido por cerca de um segundo antes que o próximo comece. Quando todos os testes forem concluídos, aparecerá uma tela "Graphic / Finished" com uma borda azul de retângulo arredondado.
Resultado esperado

Depois que o sketch executar todos os padrões, a tela mostrará a mensagem "Graphic / Finished" com "Reset to rerun" abaixo. Reinicie a placa para executar o teste novamente.
IMU
O Display IPS de 1,14'' possui uma LSM6DS3 IMU de 6 eixos onboard (acelerômetro de 3 eixos + giroscópio de 3 eixos) conectada via I2C em D4/D5 no endereço 0x6A. A linha de interrupção de movimento em D14 oferece suporte a wake-up por hardware e detecção de gestos.
A IMU onboard é a LSM6DS3 (confirmada pelo esquemático da placa, endereço I2C 0x6A). O demo Electronic Quicksand faz sondagem por um sensor compatível com QMI8658 como fallback defensivo. O demo Raise to Wake tem como alvo os registradores de wake-up da LSM6DS3 onboard.
Os demos abaixo leem a IMU diretamente via I2C (Wire) — nenhuma biblioteca externa de IMU é necessária.
Demo 1: Electronic Quicksand
Este demo transforma a tela em uma simulação de fluido interativa — partículas de areia dourada que fluem e se acomodam de acordo com a gravidade, conforme medida pela IMU de 6 eixos onboard. Incline a placa e a areia muda de direção em tempo real.
Code location: code_GFX2/Function/114_ESP32/xiao_esp32s3_114_electronic_quicksand/
Como Funciona
A simulação usa uma grade de ocupação de 22×40 sobreposta na tela de 135×240, onde cada célula tem 6×6 pixels. Cerca de 150 partículas são colocadas na grade, cada uma com posição, velocidade e um gradiente de cor dourado.
O IMU é lido via I2C (D4/D5). O sketch procura por um IMU em ambos os endereços conhecidos — primeiro QMI8658, depois LSM6DS3 — e usa aquele que responder. Os valores brutos de aceleração são filtrados com um filtro passa-baixa e usados para derivar um vetor de gravidade. Quando você inclina a placa:
- Atualização do vetor de gravidade — os dados do acelerômetro são suavizados com uma média móvel exponencial para evitar tremores.
- Velocidade das partículas — cada partícula acelera na direção do vetor de gravidade, com amortecimento e um fator de mobilidade por partícula baseado em sua profundidade no fluxo.
- Ocupação das células — partículas mais profundas no fluxo (mais próximas do "fundo" em relação à gravidade) têm mobilidade reduzida, criando um efeito de empacotamento realista.
- Renderização diferencial — apenas as células para onde as partículas se moveram para dentro ou para fora são redesenhadas, minimizando o tráfego SPI e mantendo a animação suave.
Partículas próximas à superfície fluem livremente (maior mobilidade); partículas enterradas mais profundamente se compactam firmemente (menor mobilidade) — imitando como a areia real se comporta.
Executando o Demo
Passo 1. Abra xiao_esp32s3_114_electronic_quicksand.ino na Arduino IDE.
Passo 2. Selecione a placa e a porta, depois clique em Upload.
Passo 3. Depois do upload, a tela se enche de partículas douradas na parte inferior. Incline a placa em diferentes direções — a areia flui como se fosse puxada pela gravidade.
Passo 4. Abra Tools > Serial Monitor (115200 baud) para confirmar a inicialização:
=== Electronic Quicksand 1.14 ===
[IMU] LSM6-compatible at 0x6A, WHO=0x6A
Resultado Esperado

As partículas fluem em direção à borda mais baixa conforme você inclina a placa. Quando o display fica plano, o demo mantém a direção de gravidade anterior.
Demo 2: Levantar para Despertar
Este demo implementa um sistema de suspensão/despertar da tela acionado pela interrupção de wake-up integrada do IMU no D14. A tela desliga automaticamente (backlight desligado + light sleep do ESP32) após 8 segundos de inatividade e desperta instantaneamente quando você pega ou move o dispositivo.
Localização do código: code_GFX2/Function/114_ESP32/xiao_esp32s3_114_wakeup/
Como Funciona
O demo usa o detector de evento de wake-up incorporado do IMU compatível com LSM6 — um recurso de hardware que monitora internamente os dados do acelerômetro e aciona o pino INT1 (conectado ao D14 nesta placa) quando o movimento excede um limite configurável. Isso significa que o MCU não precisa consultar o acelerômetro continuamente.
Configuração do IMU (compatível com LSM6):
| Registrador | Valor | Finalidade |
|---|---|---|
CTRL3_C | 0x44 | Habilitar BDU + auto-incremento para leituras em bloco |
CTRL1_XL | 0x40 | Acelerômetro @ 104 Hz, ±2g |
CTRL2_G | 0x40 | Giroscópio @ 104 Hz |
TAP_CFG | 0x80 | Habilitar interrupções incorporadas |
WAKE_UP_THS | 0x05 | Limite de wake-up (sensibilidade média-baixa) |
WAKE_UP_DUR | 0x00 | Sem filtro de duração (wake responsivo) |
MD1_CFG | 0x20 | Direcionar wake-up para INT1 |
Fluxo de suspensão/despertar:
- Estado ativo — a tela está ligada, backlight em PWM 160. Os dados do IMU e a tensão da bateria são atualizados periodicamente. Um temporizador regressivo mostra os segundos restantes até a suspensão automática.
- Suspensão automática — após 8 segundos sem atividade, o sketch desliga o backlight, exibe a mensagem "Sleeping... Pick up device to wake", configura o D14 como fonte de wake-up via
esp_sleep_enable_gpio_wakeup()e entra em light sleep do ESP32. - Wake-up — quando o usuário pega a placa, o IMU detecta movimento e aciona o D14 em nível HIGH. O ESP32 acorda do light sleep e redesenha a interface.
Botões de teste manual:
| Botão | Pino | Ação |
|---|---|---|
| USR1 | D6 | Forçar suspensão |
| USR2 | D7 | Forçar wake |
Executando o Demo
Passo 1. Abra xiao_esp32s3_114_wakeup.ino na Arduino IDE, selecione a placa e a porta e clique em Upload.
Passo 2. A tela mostra um painel com estado de energia, dados de movimento e um temporizador regressivo. Deixe a placa parada por 8 segundos — ela entrará em suspensão automaticamente.
Passo 3. Pegue a placa ou agite-a levemente — a tela desperta imediatamente.
Passo 4. Abra Tools > Serial Monitor (115200 baud) para confirmar a inicialização:
=== XIAO ESP32-S3 Plus 1.14 IMU Wake Demo ===
[IMU] LSM6-compatible at 0x6A, WHO=0x6A
Resultado Esperado

A tela exibe dados de movimento em tempo real enquanto está acordada. Após 8 segundos de imobilidade, a tela escurece e o ESP32-S3 entra em light sleep. Pegue o dispositivo e a tela é restaurada em uma fração de segundo, com o contador de wake incrementado.
Microfone e Alto-falante
O Display IPS de 1,14'' possui um microfone digital PDM (Pulse Density Modulation) onboard para entrada de áudio, além de pads de saída I2S para acionar um alto-falante/amplificador externo. Esta seção mostra dois demos: uma visualização em tempo real Voice Bar da entrada do microfone (sem hardware extra) e um Flash Recorder que grava áudio na Flash onboard e o reproduz através de um amplificador I2S externo.
| Pino | Sinal | Função |
|---|---|---|
| D0 | PDM_CLK | Saída de clock PDM para o microfone |
| D1 | MIC_DATA | Entrada de dados PDM do microfone |
Demo 1: Voice Bar
Este demo visualiza a entrada de áudio em tempo real do microfone PDM como uma forma de onda dinâmica no estilo equalizador e uma barra de volume segmentada. Fale, bata palmas ou assopre no microfone onboard e veja as barras reagirem instantaneamente — nenhum hardware externo é necessário.
Localização do código: code_GFX2/Function/114_ESP32/xiao_esp32s3_114_voice_bar/
Como Funciona
O sketch captura o microfone PDM onboard através do periférico I2S do ESP32-S3 configurado em modo PDM RX, usando a API do driver do ESP-IDF v5 (driver/i2s_pdm.h). Isso requer esp32 Boards by Espressif 3.x — a API legada i2s_config_t do core 2.x não irá compilar.
A API do ESP-IDF v5 (i2s_new_channel() / i2s_channel_read()) é diferente da versão deste demo para nRF52840, que usa a biblioteca PDM do nRF52. Se você estiver portando o código do nRF52840, deverá substituir completamente a configuração de PDM.
O microfone é amostrado em 16 kHz mono em buffers DMA de 256 amostras (4 descritores). Em loop(), i2s_channel_read() busca um buffer, remove o offset DC, calcula a amplitude de pico e faz o downsampling do sinal em 27 faixas para o visualizador de forma de onda. A intensidade de acionamento do clock PDM também é reduzida com gpio_set_drive_capability() para diminuir o ruído de EMI/acoplamento.
A tela é dividida em três zonas:
| Zona | Posição | Descrição |
|---|---|---|
| Forma de onda | Parte superior (y=30–95) | Visualizador de equalizador de 27 barras. Amostras brutas são reduzidas e desenhadas como barras simétricas em torno de uma linha de base central. A cor da forma de onda segue o volume suavizado — verde (<50%), amarelo (50–90%), vermelho (>90%). |
| Porcentagem | Meio | Grande porcentagem numérica de volume (0–100%), codificada por cores em verde (<50%), amarelo (50–90%), vermelho (>90%). |
| Barra de volume | Parte inferior (y=130–225) | Barra de 10 segmentos (degradê verde/amarelo/vermelho). Atualiza com o volume suavizado a partir do pico PDM. |
Processamento de sinal:
- I2S PDM RX —
i2s_channel_read()busca 256 amostras PDM. O sketch remove o offset DC (média) para que o pico reflita a intensidade real do som e, em seguida, calcula a magnitude de pico. - Normalização — valores de pico abaixo de
VOL_FLOOR(20) são tratados como silêncio. Valores acima deVOL_CEIL(2400) saturam em 100%. Entre esses valores, um mapeamento linear produz um nível de volume de 0,0–1,0. - Suavização exponencial — o volume exibido é suavizado com um fator de mistura de 20% (
SMOOTH = 0.20) para evitar oscilações. Durante o silêncio, o volume decai a 6% por quadro. - Renderização diferencial — a barra de volume e o rótulo de porcentagem só são redesenhados quando o valor muda, minimizando o tráfego SPI.
Executando o Demo
Passo 1. Abra xiao_esp32s3_114_voice_bar.ino na Arduino IDE.
Passo 2. Selecione Tools > Board > esp32 > XIAO_ESP32S3_PLUS e a Port correta.
Passo 3. Clique em Upload.
Passo 4. Abra Tools > Serial Monitor (115200 baud). Você deverá ver:
=== Voice Bar | XIAO ESP32-S3 Plus 1.14 ===
[MIC] PDM RX ready (ESP-IDF v5)
[MIC] ready
Passo 5. Fale, bata palmas ou assopre no microfone. A forma de onda e a barra de volume respondem em tempo real. O rótulo de porcentagem muda de cor conforme o volume aumenta.
Resultado Esperado

Quando estiver em silêncio, a forma de onda fica plana e a barra de volume fica vazia (0%). Fale no microfone e as barras do equalizador serão animadas enquanto a barra de volume se enche de verde passando por amarelo até vermelho. O rótulo de porcentagem é atualizado em tempo real.
Demo 2: Gravador em Flash
Este demo grava 5 segundos de áudio do microfone PDM onboard na memória Flash onboard e depois o reproduz por meio de um alto-falante externo conectado à saída I2S. Pressione um botão para gravar e outro para reproduzir.
Localização do código: code_GFX2/Function/114_ESP32/xiao_esp32s3_114_flash_record/
Configuração de Hardware
A reprodução requer um amplificador de áudio I2S e alto-falante externos. O demo foi escrito para um breakout MAX98357A conectado aos pads de saída I2S da placa:
| Pad I2S | Pino XIAO | MAX98357A |
|---|---|---|
| 3V3 | 3V3 | VIN |
| GND | GND | GND |
| I2S_SD | D11 | DIN |
| I2S_SCK | D12 | BCLK |
| I2S_WS | D13 | LRC |
Os pads I2S (3V3, GND, D11, D12, D13) estão expostos no grupo de pads de expansão inferior da placa de display.
Como Funciona
Gravação — o microfone digital PDM (Pulse Density Modulation) onboard é amostrado por meio do periférico I2S do ESP32-S3 configurado no modo PDM RX. No ESP-IDF v5 (Arduino core 3.3.11), isso usa a nova API de driver (driver/i2s_pdm.h). O microfone é capturado em 16 kHz mono com 4 descritores DMA de 256 quadros cada. Quando você pressiona USR1, o sketch amostra 5 segundos de áudio em um buffer de RAM e depois o grava na Flash onboard como um arquivo WAV (/REC_RAW.WAV) usando LittleFS.
Após o microfone PDM iniciar, o sketch descarta os primeiros 300 ms de dados capturados como dados de aquecimento para reduzir o transitório de inicialização no começo da gravação.
Se o sketch não conseguir capturar todas as amostras em 7 segundos, ele interrompe a gravação e exibe "Mic capture timeout" em vez de permanecer bloqueado no loop de gravação.
Reprodução — pressionar USR2 lê o WAV de volta da Flash e o transmite pelo periférico I2S no modo estéreo padrão (Philips) em D11/D12/D13. As amostras mono são duplicadas para ambos os canais com um ganho de 0.75× aplicado para evitar clipping. O amplificador aciona um pequeno alto-falante para que você possa ouvir a gravação.
Estados na tela:
| Estado | Descrição |
|---|---|
| Pronto | Título "Flash Recorder" com "USR1: record" e "USR2: play Flash WAV" (ou "No saved recording") |
| Aquecimento | "Warming up mic..." com "Please wait" antes do início da captura |
| Gravando | "Capturing 5 seconds" exibido durante a captura (sem progresso em tempo real) |
| Erro | "Mic capture timeout" com "Try recording again" quando a captura excede 7 segundos |
| Salvo | Confirmação "Done — Saved Flash WAV", depois retorna para Pronto |
| Reprodução | "Playing raw audio" durante o streaming e depois "Finished" |
Executando o Demo
Passo 1. Conecte um amplificador MAX98357A e um alto-falante aos pads I2S conforme descrito acima.
Passo 2. Abra xiao_esp32s3_114_flash_record.ino na Arduino IDE.
Passo 3. Selecione a placa: Tools > Board > esp32 > XIAO_ESP32S3_PLUS (usando esp32 Boards 3.3.11).
Passo 4. Selecione Tools > Partition Scheme > "Default with spiffs (3MB APP/1.5MB SPIFFS)".
Passo 5. Selecione a Port correta e clique em Upload.
O gravador armazena o arquivo WAV em LittleFS, que usa a partição SPIFFS. O esquema de partição padrão da placa (16M Flash (2MB APP/12.5MB FATFS)) não contém partição SPIFFS, portanto LittleFS.begin() retorna false e a tela mostra "Flash write failed / Check partition". Você deve selecionar o esquema de partição SPIFFS acima, caso contrário a gravação não funcionará.
Passo 6. Pressione USR1 (D6) para gravar 5 segundos de áudio do microfone onboard. A tela mostra "Capturing 5 seconds" durante a gravação.
Passo 7. Pressione USR2 (D7) para reproduzir a gravação pelo alto-falante.
A gravação é armazenada na Flash onboard (LittleFS), portanto ela sobrevive a um ciclo de energia — você pode gravar uma vez e reproduzir depois. Gravar novamente sobrescreve o arquivo anterior.
Resultado Esperado

Pressione USR1 e a tela mostrará "Capturing 5 seconds". Após 5 segundos, ela confirma que o WAV foi salvo. Pressione USR2 e o áudio será reproduzido pelo alto-falante conectado enquanto a tela mostra o status da reprodução.
Grove I2C
O Display IPS de 1,14'' possui um conector Grove I2C dedicado que expõe D4 (SDA) e D5 (SCL) em um soquete Grove padrão de 4 pinos (GND / 3V3 / SDA / SCL). D4/D5 são compartilhados internamente com o IMU onboard.
| Pino Grove | Pino XIAO | Notas |
|---|---|---|
| GND | GND | Terra comum |
| 3V3 | 3V3 | Saída de alimentação de 3,3 V |
| SDA | D4 | Dados I2C — compartilhado com o IMU onboard |
| SCL | D5 | Clock I2C — compartilhado com o IMU onboard |
D4/D5 são compartilhados entre o conector Grove e o IMU onboard. O IMU está no endereço 0x6A. Ao conectar um dispositivo I2C externo, certifique-se de que ele não entre em conflito com esse endereço.
Demo: Temperatura e Umidade SHT31
Este demo lê temperatura e umidade de um sensor Grove SHT31 conectado ao conector Grove I2C e exibe as leituras na tela. O sketch se comunica diretamente com o sensor via I2C com Wire.h — nenhuma biblioteca SHT31 é necessária — e valida cada leitura com o CRC do sensor.
Localização do código: code_GFX2/Function/114_ESP32/xiao_esp32s3_114_sht31_temperature_humidity/
Configuração de Hardware
Conecte um sensor de temperatura e umidade Grove SHT31 ao conector Grove I2C. O sensor é alimentado com 3,3 V e se comunica no endereço I2C 0x44:
| Pino Grove | Pino XIAO | SHT31 |
|---|---|---|
| GND | GND | GND |
| 3V3 | 3V3 | VCC |
| SDA | D4 | SDA |
| SCL | D5 | SCL |
Como Funciona
O sketch lê o SHT31 diretamente via I2C (Wire) no endereço 0x44:
- Varredura I2C — na inicialização, ele faz uma varredura no barramento I2C e relata cada dispositivo encontrado.
- Medição de disparo único — envia um comando de disparo único de alta repetibilidade (
0x24 0x00, sem clock stretching), espera 20 ms e então lê 6 bytes: temperatura alto/baixo + CRC, umidade alto/baixo + CRC. - Verificação de CRC — cada valor de 16 bits é verificado em relação ao seu byte CRC; uma incompatibilidade é relatada como erro (fiação ou módulo danificado/ruidoso).
- Conversão — os valores brutos são convertidos em temperatura (
-45 + 175 × raw / 65535°C) e umidade relativa (100 × raw / 65535%).
O display é inicializado com Board_XIAO_1inch14_LCD<13, 12> e um Config_XIAO_1inch14_LCD_ST7789_BGR local ao sketch (135×240, ordem de cores BGR, invertido) para que as cores sejam exibidas corretamente. A tela mostra "SHT31 OK" com a temperatura e umidade em tempo real, ou "SHT31 ERROR" mais um código de erro se uma leitura falhar.
Executando a Demo
Passo 1. Abra xiao_esp32s3_114_sht31_temperature_humidity.ino na Arduino IDE.
Passo 2. Selecione Tools > Board > esp32 > XIAO_ESP32S3_PLUS e a Port correta e, em seguida, clique em Upload.
Passo 3. Abra Tools > Serial Monitor (115200 baud). Você deverá ver:
=== XIAO ESP32-S3 1.14 SHT31 Temperature/Humidity ===
[PIN] SDA=D4 SCL=D5 address=0x44
[I2C] scan start
[I2C] found 0x44
[I2C] scan done
[SHT31] OK T=26.81 C H=48.32 %
A tela mostra "SHT31 OK" com a temperatura e a umidade, atualizando uma vez por segundo. Se o sensor for desconectado ou a verificação de CRC falhar, a tela mostra "SHT31 ERROR" com um código de erro.
Resultado Esperado

A temperatura e a umidade são atualizadas uma vez por segundo na tela. Sopre sobre o sensor e a leitura de umidade aumentará.
Botões do Usuário
O Display IPS de 1,14'' possui três botões físicos de pressão conectados ao XIAO ESP32-S3 Plus:
| Botão | Pino | Lógica | Rótulo na Serigrafia | Pad de Breakout |
|---|---|---|---|---|
| USR1 | D6 | Ativo em nível baixo (pressionado = LOW) | USR1 | U1 |
| USR2 | D7 | Ativo em nível baixo (pressionado = LOW) | USR2 | U2 |
| USR3 | D19 | Ativo em nível baixo (pressionado = LOW) | USR3 | U3 |
Lendo um Botão
Os três botões possuem resistores de pull-up externos de 1 KΩ na placa, e o código de demonstração também habilita os pull-ups internos do XIAO (INPUT_PULLUP). Uma leitura simples por pesquisa (polling) com debounce se parece com isto:
const int USR1 = D6;
const int USR2 = D7;
const int USR3 = D19;
void setup() {
pinMode(USR1, INPUT_PULLUP);
pinMode(USR2, INPUT_PULLUP);
pinMode(USR3, INPUT_PULLUP);
Serial.begin(115200);
}
void loop() {
if (digitalRead(USR1) == LOW) {
Serial.println("USR1 (D6) pressed");
delay(200); // simple debounce
}
if (digitalRead(USR2) == LOW) {
Serial.println("USR2 (D7) pressed");
delay(200);
}
if (digitalRead(USR3) == LOW) {
Serial.println("USR3 (D19) pressed");
delay(200);
}
}
Debounce com Interrupções
Para um tratamento de botões responsivo e com debounce, você pode usar interrupções de GPIO com um curto atraso de estabilização:
volatile bool btn1Flag = false;
volatile bool btn2Flag = false;
volatile bool btn3Flag = false;
void btn1Isr() { btn1Flag = true; }
void btn2Isr() { btn2Flag = true; }
void btn3Isr() { btn3Flag = true; }
void setup() {
pinMode(D6, INPUT_PULLUP);
pinMode(D7, INPUT_PULLUP);
pinMode(D19, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(D6), btn1Isr, FALLING);
attachInterrupt(digitalPinToInterrupt(D7), btn2Isr, FALLING);
attachInterrupt(digitalPinToInterrupt(D19), btn3Isr, FALLING);
}
void loop() {
if (btn1Flag) {
btn1Flag = false;
delay(30); // debounce settling time
if (digitalRead(D6) == LOW) {
// handle USR1 press
}
}
if (btn2Flag) {
btn2Flag = false;
delay(30);
if (digitalRead(D7) == LOW) {
// handle USR2 press
}
}
if (btn3Flag) {
btn3Flag = false;
delay(30);
if (digitalRead(D19) == LOW) {
// handle USR3 press
}
}
}
Comportamento Padrão no Dashboard de Fábrica
No firmware de fábrica pré-carregado, os botões são mapeados da seguinte forma (você pode sobrescrever isso no seu próprio código):
| Botão | Pino | Ação |
|---|---|---|
| USR1 | D6 | Cicla o brilho da tela (100% → 75% → 50% → 25% → 0% → 100%) |
| USR2 | D7 | Alterna a tela desligada / restaura para o último brilho |
| USR3 | D19 | Alterna o título do cabeçalho entre "Hello,XIAO!" e "Seeed" |
Os pads de breakout dos botões (rotulados como U1, U2 e U3 na placa) espelham D6, D7 e D19, respectivamente, permitindo que você conecte botões externos, se desejar.
Detecção de Tensão da Bateria
Esta demonstração lê o divisor de tensão da bateria onboard em D16 e mostra duas leituras amarelas em tempo real no Display IPS de 1,14'': a tensão bruta do divisor em D16 e a tensão calculada da bateria. Ela exibe apenas leituras de tensão; não estima a porcentagem da bateria nem informa o status de carregamento.
Localização do código: code_GFX2/Function/114_ESP32/xiao_esp32s3_114_battery_status/
Como Funciona
Circuito da bateria:
O ESP32-S3 Plus lê a tensão da bateria LiPo através de um divisor de tensão onboard conectado ao D16:
| Sinal | Pino ESP32-S3 | Função |
|---|---|---|
BAT_ADC | D16 | Entrada analógica que lê a tensão dividida da bateria. Conectado internamente a um circuito divisor de tensão (316K / 160K). Não use este pino externamente. |
Taxa do divisor de tensão: R13 = 316 kΩ, R14 = 160 kΩ → Taxa do divisor = (316 + 160) / 160 ≈ 2,975
Leitura:
O sketch inicializa o display com Board_XIAO_1inch14_LCD<13, 12> e um Config_XIAO_1inch14_LCD_ST7789_BGR local ao sketch (135×240, BGR, invert = true), depois amostra o D16 doze vezes (a cada 700 µs) usando analogReadMilliVolts() em resolução de 12 bits com atenuação de 11 dB. Ele faz a média das amostras para obter a tensão bruta do divisor, multiplica pela taxa do divisor para obter a tensão da bateria (Calc = D16 × 2.975) e desenha ambas como duas linhas amarelas centralizadas. A tela é atualizada apenas quando qualquer um dos valores muda de forma significativa (D16 ≥ 0,02 V ou Calc ≥ 0,05 V).
Nenhum sinal de status de carregamento está conectado a um GPIO do ESP32-S3. Esta demonstração exibe apenas leituras de tensão; ela não detecta a presença da bateria nem o status de carregamento, nem estima a porcentagem da bateria.
Executando a Demo
Passo 1. Abra xiao_esp32s3_114_battery_status.ino na Arduino IDE.
Passo 2. Selecione Tools > Board > esp32 > XIAO_ESP32S3_PLUS e a Port correta.
Passo 3. Clique em Upload.
Passo 4. Observe a tela — ela mostra duas linhas amarelas: a tensão bruta do divisor em D16 e a tensão calculada da bateria. Conecte ou desconecte uma bateria LiPo (ou o cabo USB-C) para observar a atualização dos valores.
Resultado Esperado
![]() Leitura de tensão (D16 + Calc) | ![]() Conector da bateria (parte traseira) |
A tela mostra a tensão bruta do divisor D16 na linha superior e a tensão de bateria calculada (Calc) na linha inferior. Com uma bateria LiPo conectada, Calc se aproxima da tensão nos terminais da bateria. Uma leitura também pode aparecer apenas com alimentação USB, portanto Calc por si só não pode confirmar se uma bateria está conectada.
A demonstração também imprime uma linha de diagnóstico no Serial Monitor a cada segundo, por exemplo:
D16 1.39V | Calc 4.14V
Recursos
- 🗃️[Arquivos de projeto de PCB] XIAO 1.14'' IPS Display (ESP32-S3) KiCad Project
- 📄[Esquemático] XIAO 1.14'' IPS Display (ESP32-S3) Schematic
- 📦[Modelo 3D] XIAO 1.14'' IPS Display (STEP)
- 📄[Datasheet] 1.14 Inch Display Datasheet
- 💾[Firmware de fábrica] XIAO 1.14'' IPS Display (ESP32-S3) Factory Firmware
- [Demo] Código de demonstração da placa XIAO Display — todas as demos de função estão no diretório
code_GFX2/Function/114_ESP32/
Suporte técnico e discussão sobre o produto
Obrigado por escolher nossos produtos! Estamos aqui para oferecer diferentes tipos de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.

