Código de Pesquisa

Transforme um touchscreen ESP32 em um piano – sem necessidade de arquivos de som

Transforme um touchscreen ESP32 em um piano – sem necessidade de arquivos de som

Teclas elevadas, acordes reais e o som gerado no chip

Um piano tocável na tela sensível ao toque. As teclas parecem elevadas e afundam quando você as toca, o painel de toque rastreia cinco dedos para que você possa tocar acordes, e cada nota é sintetizada pelo processador - não há arquivos de som nem cartão SD envolvidos.

922-Este é o Artigo de Música com IA o projeto está aqui.

923-O Piano (este é o artigo atual)

É completamente offline. Grave e toque.

Piano de tela sensível ao toque rodando na placa MaTouch AI ESP32-S3

Dois layouts e por que ambos existem

Este sketch tem dois teclados completamente diferentes, e um botão LAYOUT no canto superior esquerdo alterna entre eles. O rótulo nesse botão informa em qual você está agora, então ele serve também como indicador - toque nele e ele muda.

KEYS - um piano real

MKRFAB3_4-D1.MOV.00_00_34_49.Still001

Sete teclas brancas em toda a largura com cinco teclas pretas em cima, exatamente como um teclado real. É assim que a placa inicia. Como apenas uma oitava cabe, os botões - e + ao lado de LAYOUT movem você para cima e para baixo; o indicador ciano entre eles mostra onde você está, de C3 a C6.

GRID - quatro oitavas, sem notas erradas

O layout GRID na MaTouch AI ESP32-S3 - quatro linhas de sete notas
O layout GRID na MaTouch AI ESP32-S3 - quatro linhas de sete notas

Quatro linhas de sete, 28 teclas de uma vez. Cada linha é uma oitava, a mais baixa embaixo; cada coluna é uma nota - C, D, E, F, G, A, B. Sem sustenidos, sem bemóis, então todo o painel é em Dó maior e não há notas erradas. Você pode entregá-lo a alguém que nunca tocou nada, deixá-lo apertar aleatoriamente, e ainda assim soará como música.

Por que apenas uma oitava cabe como teclado real

Esta é a aritmética que molda todo o projeto. A tela tem 320 pixels de largura, mas apenas cerca de 2,2 polegadas de largura, então uma ponta de dedo cobre aproximadamente 45 pixels.

  • Uma oitava - sete teclas brancas com cerca de 45 pixels cada. Confortável.
  • Duas oitavas - catorze teclas brancas com cerca de 22 pixels cada. Metade de uma ponta de dedo. Impossível de tocar.

Então, um layout de piano adequado só pode mostrar uma oitava aqui, por isso os botões de oitava existem - e por isso o grid existe como alternativa quando você quer alcance e confiabilidade em vez de realismo.

Alterando o layout no código

Três configurações perto do topo do sketch controlam tudo isso:

Configuração O que faz
BOOT_LAYOUT Qual teclado aparece ao ligar. LAYOUT_KEYS para o piano, LAYOUT_GRID para o grid.
ROWS Quantas oitavas o GRID mostra. Padrão 4.
COLS Notas por linha no GRID. Padrão 7, as sete notas naturais.
BASE_OCTAVE Em qual oitava a linha inferior do GRID começa. Padrão 3.

Como o visual elevado é feito

Uma borda clara ao longo do topo e da esquerda de cada tecla, e uma borda escura ao longo da parte inferior e da direita, faz parecer aos olhos algo que se projeta. Pressionar uma tecla as inverte e escurece a face, o que parece afundado. São duas linhas de código por borda e é convincente.

Como o som é produzido

Não há gravações em nenhum lugar desta placa. Sem amostras, nada no cartão de memória. Cada nota é um acumulador de fase percorrendo uma tabela de seno de 512 entradas - percorra-a rapidamente para uma nota alta, lentamente para uma baixa - então nenhuma trigonometria é calculada por amostra. Três harmônicos são misturados para aquecer o som.

Cada nota também recebe um envelope curto de ataque e liberação, cerca de seis milissegundos para entrar e setenta para sair. Sem ele, você ouve um clique toda vez que uma nota começa ou para, porque você está ligando uma forma de onda em amplitude total. Esse envelope é a diferença entre um instrumento e um bip.

Até cinco notas são misturadas, correspondendo aos cinco pontos de toque que o painel reporta. i2s_write() bloqueia quando o buffer de áudio está cheio, o que convenientemente ritma todo o programa em tempo real — sem necessidade de temporizadores ou interrupções.

Os botões

  • LAYOUT alterna entre KEYS e GRID. O rótulo mostra em qual modo você está.
  • - e + movem a oitava. Apenas no layout KEYS.
  • VOL abre um painel de volume sobre o teclado — arraste a barra para definir o nível. Toque em VOL novamente para fechá-lo.
  • DEMO toca uma melodia sozinho, acendendo cada tecla conforme avança.
  • WAVE alterna o tom entre SOFT, ORGAN e BRIGHT. Ele começa em ORGAN, que combina melhor com este pequeno alto-falante, mas experimente os três.

Controle de volume

O amplificador nesta placa é genuinamente alto — 3,2 W em um alto-falante de 4 Ω — então poder reduzi-lo é importante. Tocar em VOL desliza um painel sobre o teclado com uma barra grande arrastável; o nível atual também é mostrado permanentemente na barra superior.

Enquanto o painel está aberto, ele deliberadamente engole todos os toques abaixo da barra superior, para que você não acione notas acidentalmente através dele. A configuração é aplicada como uma única multiplicação quando o áudio misturado é escalado para 16 bits, o que não custa nada em tempo de execução e afeta a melodia demo igualmente. Ajuste VOL_STEPS no sketch se quiser passos mais finos ou mais grossos que os dez padrão.

Sem WiFi, sem contas, nada para configurar

Vale a pena dizer claramente, porque todos os outros projetos desta série precisam de uma conta em algum lugar: este não precisa. Não há nenhum secrets.h para preencher, nenhuma chave de API, nenhuma rede. Grave e toque. De tudo que foi construído para esta placa, este é o ideal para entregar a um iniciante.

Experimente um acorde

Pressione três ou quatro teclas ao mesmo tempo. O controlador de toque rastreia cinco dedos, então todas soam juntas — é o momento em que deixa de parecer um bip e começa a parecer um instrumento.

Sobre a placa MaTouch AI ESP32-S3 2.8"

Cada projeto nesta página roda na MaTouch AI ESP32-S3 2.8" TFT ST7789V da Makerfabs. É uma placa tudo-em-um: uma tela de toque colorida, uma câmera de 3 megapixels, dois microfones e um amplificador de alto-falante real, tudo alimentado por um ESP32-S3 com 8 MB de PSRAM. Essa combinação é o que torna esses projetos de IA possíveis em uma única placa sem nada mais conectado.

Os 8 MB de PSRAM importam mais do que qualquer outro número aqui. É o que permite que a placa mantenha um quadro de câmera, alguns segundos de áudio gravado ou uma foto codificada em base64 na memória ao mesmo tempo — nada disso cabe na RAM normal do ESP32.

Documentação do fabricante: página wiki da Makerfabs.

Todos os outros projetos para esta placa — a câmera, o reconhecimento facial offline, o assistente de voz com IA, a visão de IA e o projeto de desenho — têm seus próprios tutoriais. Links para todos eles estão abaixo deste artigo.

Especificações principais

  • Processador: ESP32-S3, dual core 240 MHz, WiFi 2.4 GHz + Bluetooth 5.0
  • Memória: 16 MB flash, 8 MB PSRAM (necessário para quase todos os projetos aqui)
  • Display: 2.8" IPS, 320×240, driver ST7789V, SPI
  • Toque: GT911 capacitivo, rastreia 5 dedos ao mesmo tempo
  • Câmera: OV3660, 3 megapixels, até 2048×1536
  • Microfones: dois microfones digitais I2S INMP441 (um par estéreo genuíno)
  • Alto-falante: amplificador classe-D MAX98357A, 3,2 W em 4 Ω
  • Armazenamento: slot para cartão microSD (modo SPI)
  • Alimentação: USB-C, conector de bateria JST, carregador TP4056, interruptor de energia
  • Também na placa: LED RGB WS2812B, relógio de tempo real com bateria PCF8563T e um medidor de bateria MAX17048 que não está listado nas especificações oficiais

Alimentando com bateria? As duas tomadas USB-C, o carregador TP4056 e o interruptor de energia são explicados em detalhes, com o esquema, no artigo de teste da placa — incluindo qual tomada carrega e se o interruptor deve estar ligado ou desligado.

Configurações do Arduino IDE

Essas configurações importam. A maioria dos problemas que as pessoas relatam com esta placa é uma dessas estando errada, e elas são redefinidas quando você muda a versão do core, então verifique-as novamente após qualquer alteração.

Configuração Valor
Placa ESP32S3 Dev Module
Versão do núcleo ESP32 2.0.17
PSRAM OPI PSRAM
Tamanho da Flash 16MB (128Mb)
Esquema de Partições 16M Flash (3MB APP/9.9MB FATFS)
USB CDC On Boot Desativado
Velocidade de Upload 921600
Apagar Toda a Flash Antes do Upload Desativado
Porta a porta USB-C CH340K

Se o upload falhar: colocando a placa no modo de download manualmente

Na maioria das vezes, você apenas pressiona Upload e funciona. Às vezes não funciona - o IDE fica em Connecting...... e então desiste com Failed to connect to ESP32-S3: No serial data received.

Isso acontece porque IO0 faz três trabalhos nesta placa ao mesmo tempo: é o botão BOOT, é a linha de reset automático do CH340K e é a linha de dados do LED RGB. Quando o sketch já em execução na placa está acionando esse LED, ele pode conflitar com o reset automático, então o chip reinicia no seu sketch antigo em vez de entrar no bootloader.

A correção leva cinco segundos. Coloque-a no modo de download você mesmo:

  1. Pressione e segure o botão BOOT.
  2. Enquanto ainda segura BOOT, pressione RESET e solte RESET.
  3. Agora solte BOOT. A tela fica em branco - isso é o bootloader esperando.
  4. Clique em Upload.
  5. Quando terminar, pressione RESET uma vez para executar o novo sketch.

Se ainda assim não conectar, reduza a Upload Speed para 115200 e tente novamente. E verifique se o interruptor de energia da placa está ligado - o CH340K é enumerado e fornece uma porta COM mesmo quando a própria placa está desligada, o que engana as pessoas.

Bibliotecas necessárias

Este projeto precisa de todas as bibliotecas na tabela abaixo - nada mais, nada menos. A maioria instala diretamente de Tools → Manage Libraries no Arduino IDE, mas a GFX Library for Arduino tem que ser instalada a partir de um arquivo ZIP. Os números de versão importam, então use exatamente os listados.

Biblioteca Versão Autor Instalar de
GFX Library for Arduino 1.5.6 moononournation Arquivo ZIP - veja abaixo
bb_captouch 1.3.1 Larry Bank Gerenciador de Bibliotecas
Adafruit NeoPixel qualquer recente Adafruit Gerenciador de Bibliotecas

Instalando a biblioteca GFX a partir de um arquivo ZIP

  1. Baixe o ZIP. Ele está incluído no download deste projeto, ou você pode obtê-lo do repositório Arduino_GFX - clique no botão verde Code e depois em Download ZIP.
  2. Salve-o em algum lugar onde possa encontrá-lo novamente. Não o descompacte.
  3. No Arduino IDE, clique em SketchInclude LibraryAdd .ZIP Library.
  4. Navegue até o arquivo ZIP que você baixou e clique em Open.
  5. O IDE o instala e confirma na parte inferior da janela. Se você já tiver uma versão 1.6 instalada, exclua essa pasta de Documents/Arduino/libraries primeiro, ou as duas entrarão em conflito.

Solução de problemas

Sintoma Causa e correção
Tela permanece preta Versão errada da biblioteca GFX (use 1.5.6) ou configurações erradas da placa.
PSRAM alloc failed Tools → PSRAM não está definido como OPI PSRAM.
Nada é enviado / sem porta COM Porta USB-C errada, ou o driver CH340 não está instalado.

Imagens

makerfabs_ESP32S3_cam_music_screen-10-
makerfabs_ESP32S3_cam_music_screen-10-
makerfabs_ESP32S3_cam_music_screen-12-
makerfabs_ESP32S3_cam_music_screen-12-
MKRFAB3_4-D1.MOV.00_00_34_49.Still001
MKRFAB3_4-D1.MOV.00_00_34_49.Still001
Nenhum código anexado.

Recursos e referências

Ainda não há recursos.

Arquivos📁

Nenhum arquivo disponível.