Nosso Remora de firmware anterior pretendia receber comandos curtos da Orcλ e fazer animações de neopixels muito simples em listras de LEDs endereçáveis (WS2812b como)
Planeje um middleware nodejs
A primeira implementação que não precisa de nenhum chapéu MIDI para converter o sinal para MIDI usa um middleware NodeJS . Para começar, basta ir ao diretório:
cd middleware/midi-to-udp
nodejs midi.js
Lá você verá quais portas você tem como Midi de entrada. Você precisa de uma fonte de entrada MIDI, um instrumento ou algo que você envia do próprio computador. No meu caso, uso uma combinação de timidez e rosa (tipo de bolo para o Linux). Depois de ver a porta listada, basta adicionar o endereço IP -P (porta) e -u (UDP). A porta UDP é fixada em 49161 no middleware e também no firmware ESP32. Como exemplo:
$ nodejs midi.js -p 3 -u 192.168.12.109
Listening to: rosegarden:out 1 - General MIDI Device 130:3 and forwarding to 192.168.12.109:49161
Isso redirecionará as notas MIDI para UDP. E o ESP32 receberá essas mensagens curtas do UDP e desenhará as coisas em sua matriz LED.
Versão em série do Plano B Midi
Requer um módulo Sparkfun Midi-Aduino para ativar o MIDI e fazer o sinal para a conversão em série. A fiação do ESP32, usando o Serial2 para deixar a primeira para depuração, é bastante direta:
Esp32 | Hat midi 5v 5v gnd gnd rx 26 tx 27
Isso deve ser realmente a coisa real, mais rápida e com menos latência, se você quiser ser independente do wifi.

Para unificar as diferentes tomadas de firmware e, no futuro, fazer uma classe comum que ouvirá os mesmos comandos, inventamos uma mensagem interna muito curta que usa 6 caracteres. Usamos o hexadecimal para mantê -lo sempre em 2 chars de comprimento:
2 chars (HEXA) representing Note played
1 boolean representing Status (1 note on, 0 note off)
2 chars (HEXA) representing Velocity
NNSVV Nota, status, velocidade
Na versão UDP-MIDI-Matrix, o script do middleware, o Midi.js deve estar em segundo plano para converter sinais MIDI em mensagens UDP curtas.
Na versão Midi-in-Matrix, o MIDI é convertido em UART usando Sparkfun Midi Hat e recebeu diretamente na porta Hardwareserial (Serial2) no ESP32. Portanto, esta versão é wifi independente e deve ter menos latência. Mas tem a desvantagem de que você precisa usar MIDI em cabos.
Exemplo: tocar do Octave 3, 36 em decimal, velocidade 60, nota na mensagem seria:
2413B
When the same note is released it could be:
24000
Observe que alguns sintetizadores também enviam a velocidade de liberação para que os dois últimos chars hexa nem sempre sejam 0. A filtragem de canais seria implementada no futuro. Deixando você escolher entre todos os canais ou 2 canais configuráveis usando as constantes plataformio.ini:
-D MIDI_LISTEN_CHANNEL1=0
-D MIDI_LISTEN_CHANNEL2=0
Em 0, permitirá tudo. Se você usar 1 e 2 para cada constante, ele ouvirá apenas esses canais. A filtragem de canais estará disponível apenas na versão em série, pois ainda não descobri onde vem na biblioteca NodeJS MIDI. Sinta-se à vontade para explorar o ReadMe no Middleware/Midi-to-UDP
O idioma deve ser mantido simples e também curto para que possa voar rapidamente via UDP. Primeiro plano A iteração se parece com isto:
Chord HEXA | note on/off (1 char) | velocity HEXA
48140 C on 40
48030 C off
Certifique -se de editar plataformio.ini e descomamento, apenas uma das pastas SRC_DIR para selecionar qual exemplo ser executado. Por exemplo, se você deseja executar o firmware UDP para MIDI, apenas descomemente nesta linha:
#Uncomment only one of the folders to select what example to run:
#src_dir = firmware/adafruit-matrix-test
src_dir = firmware/udp-midi-matrix
Em seguida, a compilação apenas escolhe este diretório e o exibirá no seu ESP32.
Os requisitos estão no arquivo Platformio.ini . Confira e adaptá -lo à sua placa e às necessidades. Isso funciona muito rápido, obrigado pelo trabalho do Fork Amazing Marc Merlin para o HATLELLED_NEOMATRIX que é o que envia os dados para o seu pino de dados de LEDs endereçáveis.