IA escreve uma música e este ESP32 ensina você a tocá-la
Peça a uma IA para escrever uma melodia, ouça-a tocar e deixe o teclado ensinar você a tocá-la
Escolha um clima, toque em ESCREVER, e uma IA compõe uma melodia curta. O teclado a toca, acendendo cada tecla enquanto avança. Depois toque em APRENDER e ele se transforma em um professor: ele acende uma tecla de cada vez e espera você pressioná-la, nota por nota, até que você tenha tocado a melodia inteira sozinho.
922-Este é o Artigo de Música com IA (o artigo atual)
923-O projeto do Piano está aqui.
Ele continua sendo um piano completo de 21 teclas a qualquer momento - apenas toque.
Robojax_Makerfab no checkout na página do produto MaTouch AI ESP32-S3. Não custa nada para você usar e ajuda a apoiar o código gratuito e os tutoriais aqui.A tela

Seis botões na parte superior, depois um teclado de 21 teclas - três fileiras de sete, de C3 a B5. Diferente do projeto do piano, não há layout preto e branco aqui, porque a IA está restrita às sete notas naturais e a grade é como essas notas se parecem.
| Botão | O que faz |
|---|---|
| ESTILO | Alterna o clima: FELIZ, TRISTE, ASSUSTADOR, FOLCLÓRICO, CANÇÃO DE NINAR. Isso é o que é enviado para a IA. |
| ESCREVER | Pede à IA uma melodia nesse clima. Mostra AGUARDE enquanto ela pensa, depois toca o que voltou. |
| TOCAR | Reproduz a melodia atualmente carregada. Toque novamente para parar. |
| APRENDER | Modo de ensino - acende uma tecla e espera por você. |
| ONDA | Cor do tom: SUAVE, ÓRGÃO ou BRILHANTE. |
| VOL | Toque para aumentar o volume de 1 a 5. O rótulo mostra o nível. |
O volume com o qual a placa inicia é definido por #define VOLUME perto do topo do sketch, então você pode compilar no nível que preferir e ainda alterá-lo ao vivo.
O que a IA realmente gera
Esta é a parte que vale a pena ser precisa, porque é fácil exagerar. A IA não gera áudio. Produzir uma forma de onda real exige um modelo grande e uma placa gráfica; nenhum microcontrolador está fazendo isso, e qualquer um que afirme o contrário está tocando um arquivo renderizado em outro lugar.
O que ela gera é uma lista de notas, como texto comum:
[{"n":"C4","ms":300},{"n":"E4","ms":300},{"n":"G4","ms":600}]
A placa analisa isso com ArduinoJson e toca usando o mesmo sintetizador do projeto do piano. Uma solicitação de texto curta custa uma fração de centavo, e uma vez que uma melodia chega, ela pode ser reproduzida para sempre com a internet desconectada.
Por que o prompt restringe a IA
A solicitação diz ao modelo que ele só pode usar as 21 notas que existem fisicamente neste teclado - notas naturais de C3 a B5, sem sustenidos ou bemóis. Isso não é uma limitação do sintetizador, que pode tocar qualquer frequência. Está lá por dois bons motivos:
- cada nota que ele escreve é uma que o modo APRENDER pode realmente ensinar a você, porque há uma tecla para ela
- permanecer em uma tonalidade significa que o resultado sempre soa musical, mesmo quando o modelo está tendo um dia sem inspiração
Analisando uma resposta de um modelo de linguagem
Modelos gostam de ser úteis, o que aqui significa envolver a resposta em cercas de markdown e adicionar uma frase amigável sobre o que escreveram. O sketch pede firmemente JSON puro e depois, defensivamente, pega tudo entre o primeiro [ e o último ] de qualquer forma. Qualquer nota que ele não conseguir colocar no teclado é ignorada, e o resultado só é aceito se pelo menos quatro notas utilizáveis sobreviverem. Ser tolerante com saída imperfeita é a maior parte do trabalho em qualquer projeto que analisa texto de IA.
A resposta vazia e como evitá-la
Uma coisa vai te pegar de surpresa se você mudar o modelo ou o prompt. O DeepSeek raciocina antes de responder, e esse pensamento é cobrado do mesmo orçamento de max_tokens que a resposta. Peça algo difícil e ele pode gastar todo o orçamento pensando, e então retornar uma resposta vazia - uma solicitação bem-sucedida que não contém nada.
Neste projeto, isso apareceu como os modos mais difíceis falhando enquanto os fáceis funcionavam. SPOOKY e LULLABY querem um tom menor, o que é genuinamente difícil quando cada sustenido e bemol é proibido, então o modelo deliberou - e ficou sem orçamento. HAPPY em Dó maior respondeu imediatamente.
Existem duas correções e este esboço usa ambas. A solicitação envia "thinking": {"type": "disabled"}, que desativa o raciocínio completamente para que todo o orçamento vá para a resposta e a resposta volte muito mais rápido. E o prompt agora diz ao modelo como soar menor sem sustenidos - centralize a melodia em Lá ou Mi, que usa as mesmas notas.
finish_reason. length significa que ficou sem orçamento - aumente MELODY_TOKENS. stop significa que o modelo escolheu não dizer nada, o que é um problema de prompt.O modo de ensino
Toque em LEARN e uma tecla fica verde. Pressione-a e o painel avança para a próxima nota. Pressione a tecla errada e ela ainda soa - é um piano, afinal - mas não avança. A barra de status conta seu progresso, e quando você chega ao final, ela avisa.
Não há pressão de tempo nem pontuação. Ele espera por você o tempo que precisar, o que o torna genuinamente útil para aprender uma frase musical em vez de apenas uma novidade.
Funciona também sem WiFi
Uma melodia está embutida no esboço, então PLAY e LEARN funcionam sem nenhuma rede. Apenas WRITE precisa da internet - e precisa apenas de uma chave DeepSeek. Nenhuma conta Azure ou OpenAI é necessária para este projeto.
Ao testar, toque em PLAY primeiro: isso confirma o caminho de áudio e o teclado antes de qualquer rede estar envolvida, então se WRITE falhar depois, você já sabe onde procurar.
Ideias para levar adiante
- Peça uma melodia "no estilo de uma cantiga de marinheiro" editando a lista de estilos.
- Peça para escrever uma segunda frase que responda à primeira.
- Salve as melodias no cartão SD para que o painel construa um cancioneiro ao longo do tempo.
- Adicione os microfones do projeto de assistente de voz para que você possa falar a solicitação em vez de tocar em um preset.
Sobre o painel MaTouch AI ESP32-S3 2.8"
Cada projeto nesta página roda no MaTouch AI ESP32-S3 2.8" TFT ST7789V da Makerfabs. É um painel tudo-em-um: uma tela de toque colorida, uma câmera de 3 megapixels, dois microfones e um amplificador de alto-falante real, tudo dirigido por um ESP32-S3 com 8 MB de PSRAM. Essa combinação é o que torna esses projetos de IA possíveis em um único painel sem mais nada conectado.
Os 8 MB de PSRAM importam mais do que qualquer outro número aqui. É o que permite que o painel segure 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’s.
Documentação do fabricante: Página wiki da Makerfabs.
Cada outro projeto para este painel - a câmera, reconhecimento facial offline, o assistente de voz de IA, visão de IA e o projeto de desenho - tem seu próprio tutorial. 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 no painel: 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
USB CDC On Boot como Disabled. Use a porta errada e o áudio se comportará mal ou os uploads falharão.Alimentando-o por bateria? Os dois soquetes USB-C, o carregador TP4056 e o interruptor de energia são explicados em detalhes, com o esquema, em o artigo de teste da placa — incluindo qual soquete carrega e se o interruptor deve estar ligado ou desligado.
Configurações do Arduino IDE
Essas configurações são importantes. A maioria dos problemas que as pessoas relatam com esta placa é uma delas estar errada, e elas são redefinidas quando você muda a versão do núcleo, 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ção | 16M Flash (3MB APP/9.9MB FATFS) |
| USB CDC On Boot | Disabled |
| Velocidade de Upload | 921600 |
| Apagar Toda a Flash Antes do Upload | Disabled |
| 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 para o LED RGB. Quando o sketch já em execução na placa está acionando esse LED, ele pode lutar contra o reset automático, então o chip reinicia no seu sketch antigo em vez de no bootloader.
A correção leva cinco segundos. Coloque-o no modo de download você mesmo:
- Pressione e segure o botão BOOT.
- Enquanto ainda segura BOOT, pressione RESET e solte RESET.
- Agora solte BOOT. A tela fica em branco - é o bootloader esperando.
- Clique em Upload.
- Quando terminar, pressione RESET uma vez para executar o novo sketch.
Se ainda não conectar, reduza Upload Speed para 115200 e tente novamente. E verifique se o interruptor de energia da placa está ligado - o CH340K enumera e dá a você 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 de um arquivo ZIP. Os números de versão são importantes, 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 |
| ArduinoJson | 7.x | Benoit Blanchon | Gerenciador de Bibliotecas |
| Adafruit NeoPixel | qualquer recente | Adafruit | Gerenciador de Bibliotecas |
Instalando a biblioteca GFX de um arquivo ZIP
- Baixe o ZIP. Ele está incluído no download deste projeto, ou você pode obtê-lo em o repositório Arduino_GFX - clique no botão verde Code e depois em Download ZIP.
- Salve-o em algum lugar onde possa encontrá-lo novamente. Não o descompacte.
- Na IDE Arduino, clique em Sketch → Include Library → Add .ZIP Library.
- Navegue até o arquivo ZIP que você baixou e clique em Open.
- A 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/librariesprimeiro, ou as duas entrarão em conflito.
Configurando secrets.h
Seus detalhes de WiFi e quaisquer chaves de API vão em secrets.h, que está incluído no download com valores de espaço reservado. Abra essa aba na IDE Arduino e substitua-os pelos seus próprios.
secrets.h.Obtendo suas chaves de API
Este projeto fala com um serviço de IA em nuvem, então você precisa da sua própria chave. Se você nunca fez isso antes, não se preocupe - é a mesma ideia de uma senha que identifica sua conta ao serviço. Leva alguns minutos, uma única vez.
DeepSeek - a parte do raciocínio
DeepSeek é o modelo de linguagem que realmente responde à sua pergunta. É barato - alguns dólares de crédito cobrem milhares de respostas.
- Vá para platform.deepseek.com e crie uma conta.
- Abra API keys no menu e clique em Create new API key.
- Copie-a imediatamente. Ela é mostrada apenas uma vez e nunca mais - se você a perder, exclua essa chave e crie outra.
- Adicione uma pequena quantia de crédito em Top up. Não há camada gratuita, mas a menor recarga dura muito tempo com esse uso.
Coloque a chave em secrets.h como DEEPSEEK_KEY. Ela começa com sk-.
deepseek-chat e deepseek-reasoner foram aposentados, então a maioria dos tutoriais que você encontrar online falhará com um erro 400. Use deepseek-v4-flash, que é o que esses projetos já definem.Quanto custa para executar
Muito pouco, mas não é gratuito, e você deve saber aproximadamente o que está gastando antes de deixar um projeto em execução.
| Serviço | Custo aproximado |
|---|---|
| DeepSeek | uma fração de centavo por resposta - milhares de respostas por alguns dólares |
Os preços mudam, então trate-os como um guia em vez de um orçamento. Cada um desses serviços tem uma página de uso onde você pode acompanhar o que gastou, e todos permitem definir um limite de gastos - o que vale a pena fazer desde o primeiro dia.
Solução de problemas
| Sintoma | Causa e correção |
|---|---|
| A 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 é carregado / sem porta COM | Porta USB-C errada, ou o driver CH340 não está instalado. |
Coisas que você pode precisar
-
Amazonas
Recursos e referências
-
DocumentaçãoMakerfabs MaTouch ESP32-S3 2.8" Camera and Touchscreen: User's Manualwiki.makerfabs.com
-
Documentação
-
ExternoSite da Makerfabsmakerfabs.com
Arquivos📁
Código Arduino (.ino)
-
Esboço Arduino makerfabs_ESP32S3_Draw_AI.zipinclui os arquivos de cabeçalho de pinos e secretos .h
makerfabs_ESP32S3_Draw_AI.zip0.02 MB
Folha de dados (pdf)
-
Folha de dados do ESP32-S3 em inglês
esp32-s3_datasheet_en[1].pdf1.05 MB