Notre firmware Remora précédent était destiné à recevoir de courtes commandes d'Orcλ et à faire des animations de néopixels très simples sur des rayures LED adressables (WS2812B comme)
Planifiez un middleware Nodejs
La première implémentation qui n'a besoin d'aucun chapeau MIDI pour convertir le signal en MIDI utilise un middleware NodeJS . Pour commencer, allez simplement au répertoire:
cd middleware/midi-to-udp
nodejs midi.js
Là, vous verrez quels ports vous avez en tant que MIDI entrant. Vous avez besoin d'une source d'entrée MIDI, soit un instrument, soit quelque chose que vous envoyez de l'ordinateur lui-même. Dans mon cas, j'utilise une combinaison de timidité et de rosegarden (type de gâteau pour Linux). Une fois que vous voyez le port répertorié, ajoutez-y l'adresse IP -P (port) et -u (UDP). Le port UDP est fixé à 49161 à la fois dans le middleware et également sur le firmware ESP32. Par exemple:
$ 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
Cela redirigera les notes MIDI vers UDP. Et l'ESP32 recevra ces messages courts UDP et dessinera des choses dans votre matrice LED.
Version en série MIDI Plan B
Nécessite un module MIDUino SparkFun pour activer le MIDI à travers et effectuer le signal à la conversion en série. Le câblage de l'ESP32, utilisant Serial2 pour laisser le premier pour le débogage, est assez simple:
ESP32 | Chapeau midi 5v 5v gnt gnd rx 26 tx 27
Cela devrait être en fait la vraie chose, plus rapide et avec moins de sensation, si vous voulez être indépendant du wifi.

Afin d'unifier à la fois différentes prises de firmware et à l'avenir faire une classe commune qui écoutera les mêmes commandes, nous avons inventé un message interne très court qui utilise 6 caractères. Nous utilisons l'hexadécimal pour le garder toujours en longueur de 2 caractères:
2 chars (HEXA) representing Note played
1 boolean representing Status (1 note on, 0 note off)
2 chars (HEXA) representing Velocity
Remarque NNSVV , statut, vitesse
Dans la version UDP-Midi-Matrix, le script middleware devrait MIDI.js devrait s'exécuter en arrière-plan afin de convertir les signaux MIDI en messages UDP courts.
Dans la version MIDI-en-matrice, le MIDI est converti en UART à l'aide d'un chapeau MIDI SparkFun et reçu directement dans le port HardwareSerial (Serial2) dans l'ESP32. Cette version est donc indépendante du WiFi et devrait avoir moins de latence. Mais a l'inconvénient que vous devez utiliser MIDI dans les câbles.
Exemple: jouer à faire en octave 3 qui est de 36 en décimal, Velocity 60, note on message serait:
2413B
When the same note is released it could be:
24000
Notez que certains synthés envoient également la vitesse de libération, de sorte que les 2 derniers caractères Hexa ne sont pas toujours 0. Le filtrage des canaux serait mis en œuvre à l'avenir. Vous permettant de choisir entre tous les canaux ou 2 canaux configurables à l'aide des constantes de plateforme.ini:
-D MIDI_LISTEN_CHANNEL1=0
-D MIDI_LISTEN_CHANNEL2=0
Sur 0, cela permettra à tout. Si vous utilisez 1 et 2 pour chaque constante, il n'écoutera que ces canaux. Le filtrage des canaux ne sera disponible que dans la version série, car je n'ai toujours pas découvert où il vient dans la bibliothèque MIDI Nodejs. N'hésitez pas à explorer le Readme sur Middleware / Midi-to-UDP
La langue doit être maintenue simple et également courte afin qu'elle puisse voler rapidement via UDP. Premier plan Une itération ressemble à ceci:
Chord HEXA | note on/off (1 char) | velocity HEXA
48140 C on 40
48030 C off
Veuillez vous assurer de modifier PlatformOio.ini et uncomment qu'un seul des dossiers SRC_DIR pour sélectionner l'exemple à exécuter. Par exemple, si vous souhaitez exécuter le firmware UDP vers MIDI, il suffit de décommenter cette ligne:
#Uncomment only one of the folders to select what example to run:
#src_dir = firmware/adafruit-matrix-test
src_dir = firmware/udp-midi-matrix
Ensuite, la compilation choisira ce répertoire et le flasher sur votre ESP32.
Les exigences sont dans le fichier de plateforme.ini . Vérifiez-le et adaptez-le à votre conseil d'administration et aux besoins. Cela fonctionne très rapidement grâce au travail de l'incroyable fourche de Marc Merlin pour FASTLED_NEOMATRIX, c'est-à-dire ce qui envoie les données à votre broche de données LED adressable.