🎛️ ESP32 Host MIDI¶
O hub MIDI universal para ESP32 — 9 transportes, uma API.
ESP32_Host_MIDI transforma o seu ESP32 em um hub MIDI multi-protocolo completo. Conecte um teclado USB, receba notas de um iPhone via Bluetooth, conecte o seu DAW pelo WiFi com RTP-MIDI, controle o Max/MSP via OSC, alcance sintetizadores vintage por um cabo DIN-5 e troque pacotes MIDI 2.0 com resolução de 16 bits — tudo ao mesmo tempo, tudo pela mesma API limpa de eventos.
Visão Geral da Arquitetura¶
flowchart TD
classDef transport fill:#B3E5FC,color:#01579B,stroke:#0288D1,stroke-width:2px
classDef handler fill:#E8EAF6,color:#283593,stroke:#3F51B5,stroke-width:3px
classDef output fill:#B2DFDB,color:#004D40,stroke:#00796B,stroke-width:2px
USB["🔌 USB Host"]:::transport
BLE["📱 BLE MIDI"]:::transport
DEV["💻 USB Device"]:::transport
UART["🎹 UART / DIN-5"]:::transport
RTP["🌐 RTP-MIDI"]:::transport
ETH["🔗 Ethernet"]:::transport
OSC["🎨 OSC"]:::transport
NOW["📡 ESP-NOW"]:::transport
M2["🚀 MIDI 2.0"]:::transport
HANDLER["⚙️ MIDIHandler\nFila thread-safe · Detecção de Acordes · Notas Ativas"]:::handler
GET["📤 getQueue() · getActiveNotes() · lastChord()"]:::output
SEND["📨 sendNoteOn() · sendCC() · sendPitchBend()"]:::output
USB & BLE & DEV --> HANDLER
UART & RTP & ETH --> HANDLER
OSC & NOW & M2 --> HANDLER
HANDLER --> GET
HANDLER --> SEND
SEND -.->|auto-forward| USB & BLE & UART & RTP
Início Rápido¶
#include <ESP32_Host_MIDI.h>
// Arduino IDE: Tools > USB Mode → "USB Host"
void setup() {
Serial.begin(115200);
midiHandler.begin(); // inicializa USB Host + BLE automaticamente
}
void loop() {
midiHandler.task(); // processa todos os transportes
for (const auto& ev : midiHandler.getQueue()) {
Serial.printf("%-12s %-4s ch=%d vel=%d\n",
ev.status.c_str(),
ev.noteOctave.c_str(),
ev.channel,
ev.velocity);
}
}
O Que Você Pode Construir¶
- Pedalboard sem fio — botões → ESP-NOW → hub → DIN-5 para rack de efeitos
- Pad de bateria MIDI — sensores piezo + ADC → notas MIDI sensíveis a velocidade
- Controlador MIDI customizado — encoders, faders → USB Device → qualquer DAW
- Theremin MIDI — sensores ultrassônicos → pitch/volume → BLE para iPad
- Conversor MIDI para CV — ESP32 + MCP4728 DAC → 0–5 V para Eurorack
- Interface USB sem fio — teclado USB → ESP32 → WiFi → macOS Logic Pro
- Adaptador DIN-5 para DAW — sintetizador vintage → ESP32 → USB Device
- Mesh de palco — ESP-NOW entre performers → saída USB única para FOH
- MIDI 2.0 — dois ESP32 trocam velocidade de 16 bits por UDP
- OSC ↔ MIDI — Max/MSP, Pure Data, SuperCollider via WiFi UDP
- TouchOSC → sintetizador DIN-5 — touchscreen para hardware vintage
- Composição algorítmica — Max → OSC → ESP32 → BLE → app no iPad
- Piano roll ao vivo — 25 teclas com rolagem em display 1.9"
- Detector de acordes — toque um acorde, veja "Cmaj7" instantaneamente
- Logger de eventos — timestamps, canal, velocidade, agrupamento de acordes
Galeria¶
Navegação¶
-
Guia
Do básico ao avançado: instalação, primeiros passos, configuração.
-
Transportes
9 protocolos documentados: USB, BLE, WiFi, Ethernet, DIN-5, ESP-NOW, OSC, MIDI 2.0.
-
Funcionalidades
Detecção de acordes, notas ativas, histórico PSRAM e integração com Gingoduino.
-
API
Referência completa de classes, métodos e estruturas de dados.
-
Exemplos
Sketches prontos para usar: piano roll, OSC bridge, ESP-NOW Jam, MIDI 2.0 e mais.
-
Avançado
Compatibilidade de hardware, MIDI 2.0 / UMP e troubleshooting.
Matriz de Transportes¶
| Transporte | Protocolo | Física | Latência | Chips |
|---|---|---|---|---|
| 🔌 USB Host | USB MIDI 1.0 | Cabo USB-OTG | < 1 ms | S3 / S2 / P4 |
| 📱 BLE MIDI | BLE MIDI 1.0 | Bluetooth LE | 3–15 ms | Qualquer ESP32 com BT |
| 💻 USB Device | USB MIDI 1.0 | Cabo USB-OTG | < 1 ms | S3 / S2 / P4 |
| 📡 ESP-NOW | ESP-NOW | Rádio 2,4 GHz | 1–5 ms | Qualquer ESP32 |
| 🌐 RTP-MIDI | AppleMIDI / RFC 6295 | WiFi UDP | 5–20 ms | Qualquer ESP32 com WiFi |
| 🔗 Ethernet | AppleMIDI / RFC 6295 | Cabeado | 2–10 ms | W5500 SPI ou ESP32-P4 |
| 🎨 OSC | Open Sound Control | WiFi UDP | 5–15 ms | Qualquer ESP32 com WiFi |
| 🎹 UART / DIN-5 | Serial MIDI 1.0 | DIN-5 | < 1 ms | Qualquer ESP32 |
| 🚀 MIDI 2.0 / UMP | UMP sobre UDP | WiFi UDP | 5–20 ms | Qualquer ESP32 com WiFi |
Links do Ecossistema¶
- Gingoduino — biblioteca de teoria musical para ESP32 (detecta acordes, escalas e progressões)
- Gingo — versão Python do Gingoduino para desktop e scripts
- LilyGO T-Display-S3 — placa recomendada (ESP32-S3 + display 1.9")