Nuestra remora de firmware anterior tenía la intención de recibir comandos cortos de Orcλ y hacer animaciones de neopíxeles muy simples en rayas LED direccionables (WS2812B como)
Planifique un middleware NodeJS
La primera implementación que no necesita ningún sombrero MIDI para convertir la señal en MIDI utiliza un middleware NodeJS . Para comenzar, solo vaya al directorio:
cd middleware/midi-to-udp
nodejs midi.js
Allí verá qué puertos tienes como MIDI entrante. Necesita una fuente de entrada MIDI, ya sea un instrumento o algo que envíe desde la computadora. En mi caso, uso una combinación de timidez y Rosegarden (tipo de camarera para Linux). Una vez que vea el puerto en la lista, simplemente agregue allí la dirección IP -p (puerto) y -u (UDP). El puerto UDP se fija a 49161 tanto en el middleware como en el firmware ESP32. Como ejemplo:
$ 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
Esto redirigirá las notas MIDI a UDP. Y el ESP32 recibirá estos mensajes cortos de UDP y dibujará cosas en su matriz LED.
Versión serie del plan B MIDI
Requiere un módulo Sparkfun Midi-Arduino para habilitar MIDI a través y hacer la señal a la conversión en serie. El cableado al ESP32, usando Serial2 para dejar el primero para la depuración, es bastante sencillo:
ESP32 | Hat Midi 5V 5V Gnd Gnd Rx 26 Tx 27
Esto debería ser realmente lo real, más rápido y con menos latencia, si quieres ser independiente de WiFi.

Para unificar las diferentes tomas de firmware y en el futuro, haga una clase común que escuche los mismos comandos, inventamos un mensaje interno muy corto que usa 6 caracteres. Usamos hexadecimal para mantenerlo siempre en 2 caracteres de longitud:
2 chars (HEXA) representing Note played
1 boolean representing Status (1 note on, 0 note off)
2 chars (HEXA) representing Velocity
Nota nnsvv , estado, velocidad
En la versión UDP-Midi-Matrix, el script de middleware debe ejecutar Midi.js en segundo plano para convertir las señales MIDI en mensajes UDP cortos.
En la versión MIDI-in-Matriz, el MIDI se convierte en UART usando SparkFun MIDI Hat y se recibe directamente en el puerto de HardWareserial (Serial2) en el ESP32. Entonces, esta versión es independiente WiFi y debería tener menos latencia. Pero tiene la desventaja de que necesitas usar MIDI en cables.
Ejemplo: jugar en octava 3 que es 36 en decimal, velocidad 60, nota sobre el mensaje sería:
2413B
When the same note is released it could be:
24000
Tenga en cuenta que algunos sintetizadores también envían la velocidad de liberación, por lo que los últimos 2 caracteres hexa no siempre son 0. El filtrado de canales se implementaría en el futuro. Permitirle elegir entre todos los canales o 2 canales configurables utilizando las constantes Platformio.ini:
-D MIDI_LISTEN_CHANNEL1=0
-D MIDI_LISTEN_CHANNEL2=0
En 0 lo permitirá todo. Si usa 1 y 2 para cada constante, entonces escuchará solo esos canales. El filtrado de canales solo estará disponible en la versión serie ya que todavía no descubrí dónde viene en la biblioteca NodeJS MIDI. Siéntase libre de explorar el readme en el middleware/midi-to-udp
El idioma debe mantenerse simple y corto para que pueda volar rápido a través de UDP. Primer plan Una iteración se ve así:
Chord HEXA | note on/off (1 char) | velocity HEXA
48140 C on 40
48030 C off
Asegúrese de editar Platformio.ini y Uncomment solo una de las carpetas SRC_DIR para seleccionar qué ejemplo ejecutar. Por ejemplo, si desea ejecutar el firmware UDP a MIDI solo sin comment esta línea:
#Uncomment only one of the folders to select what example to run:
#src_dir = firmware/adafruit-matrix-test
src_dir = firmware/udp-midi-matrix
Luego, la compilación solo elegirá este directorio y lo flasheará en su ESP32.
Los requisitos están en el archivo Platformio.ini . Compruébalo y adaptarlo a tu tabla y necesidades. Esto funciona muy rápido gracias por el trabajo de la bifurcación de Amazing Marc Merlin para Fastled_Neomatrix, que es lo que envía los datos a su PIN de datos LED direccionables.