Pular para conteúdo

🎛️ 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

Piano Visualizer
Piano roll de 25 teclas
Gingoduino
Detecção de acordes (Gingoduino)
MIDI 2.0
MIDI 2.0 UDP — velocidade 16-bit
RTP-MIDI
RTP-MIDI no macOS Audio MIDI Setup
BLE Receiver
BLE MIDI Receiver (iPhone → ESP32)
Event Queue
Fila de eventos em tempo real

  • Guia


    Do básico ao avançado: instalação, primeiros passos, configuração.

    Começar

  • Transportes


    9 protocolos documentados: USB, BLE, WiFi, Ethernet, DIN-5, ESP-NOW, OSC, MIDI 2.0.

    Ver Transportes

  • Funcionalidades


    Detecção de acordes, notas ativas, histórico PSRAM e integração com Gingoduino.

    Ver Funcionalidades

  • API


    Referência completa de classes, métodos e estruturas de dados.

    Ver API

  • Exemplos


    Sketches prontos para usar: piano roll, OSC bridge, ESP-NOW Jam, MIDI 2.0 e mais.

    Ver Exemplos

  • Avançado


    Compatibilidade de hardware, MIDI 2.0 / UMP e troubleshooting.

    Ver Avançado


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

  • 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")