Unsere vorherige Firmware -Remora sollte kurze Befehle von orcλ erhalten und sehr einfache Neopixel -Animationen auf adressierbaren LEDs -Stripes (WS2812B wie) erstellen.
Planen Sie einen NodeJS Middleware
Die erste Implementierung, die keinen MIDI -Hut benötigt, um das Signal in MIDI umzuwandeln, verwendet eine NodeJS Middleware . Um es zu beginnen, gehen Sie einfach zum Verzeichnis:
cd middleware/midi-to-udp
nodejs midi.js
Dort sehen Sie, welche Ports Sie als eingehende MIDI haben. Sie benötigen eine MIDI -Eingangsquelle entweder ein Instrument oder etwas, das Sie vom Computer selbst senden. In meinem Fall verwende ich eine Kombination aus Schüchternheit und Rosegarden (Art Cakewalk für Linux). Sobald Sie den aufgeführten Port sehen, fügen Sie dort einfach die IP -P -Adresse -p (Port) und -U (UDP) hinzu. Der UDP -Port ist sowohl in der Middleware als auch auf der ESP32 -Firmware auf 49161 festgelegt. Als Beispiel:
$ 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
Dadurch wird die MIDI -Notizen zu UDP weitergeleitet. Und der ESP32 erhält diese UDP -Kurznachrichten und zeichnet Dinge in Ihrer LED -Matrix.
Plan B MIDI Serienversion
Benötigt ein Sparkfun Midi-aduino-Modul, um MIDI durch und durch das Signal für die serielle Umwandlung durchzuführen. Die Verkabelung zum ESP32 mit Serial2, um den ersten zum Debuggen zu lassen, ist ziemlich einfach:
ESP32 | HAT MIDI 5V 5V GND GND RX 26 TX 27
Dies sollte tatsächlich die reale Sache sein, schneller und mit weniger Latenz, wenn Sie unabhängig von WLAN sein wollen.

Um sowohl unterschiedliche Firmware -Einnahmen als auch in Zukunft zu vereinen, machen wir eine gemeinsame Klasse, die denselben Befehlen anhört, wir haben eine sehr kurze interne Nachricht erfunden, die 6 Zeichen verwendet. Wir verwenden Hexadezimal, um es immer in 2 Chars -Länge zu halten:
2 chars (HEXA) representing Note played
1 boolean representing Status (1 note on, 0 note off)
2 chars (HEXA) representing Velocity
NNSVV -Hinweis, Status, Geschwindigkeit
In der UDP-MIDI-Matrix -Version sollte das Middleware-Skript im Hintergrund ausgeführt werden, um MIDI-Signale in kurze UDP-Nachrichten umzuwandeln.
In der MIDI-in-Matrix -Version wird der MIDI unter Verwendung von Sparkfun MIDI Hat in UART konvertiert und direkt im Hardwareserial-Port (serial2) im ESP32 empfangen. Diese Version ist also WLAN -Unabhängigkeit und sollte weniger Latenz haben. Hat aber den Nachteil, dass Sie MIDI in Kabeln verwenden müssen.
Beispiel: Das Spielen von Do in Octave 3, das 36 in Dezimalzahl, Geschwindigkeit 60, Anmerkung zur Nachricht ist, wäre:
2413B
When the same note is released it could be:
24000
Beachten Sie, dass einige Synthesizer auch die Release -Geschwindigkeit senden, sodass die letzten 2 Chars Hexa nicht immer 0 sind. Die Kanalfilterung wird in der Zukunft implementiert. Sie können zwischen allen Kanälen oder 2 Kanälen wählen, die mithilfe der Platformio.ini -Konstanten konfiguriert werden:
-D MIDI_LISTEN_CHANNEL1=0
-D MIDI_LISTEN_CHANNEL2=0
Auf 0 wird es alles zulassen. Wenn Sie 1 und 2 für jede Konstante verwenden, hört es nur auf diese Kanäle an. Die Kanalfilterung wird nur in der seriellen Version erhältlich sein, da ich noch nicht entdeckt habe, wo es in der NodeJS MIDI -Bibliothek kommt. Fühlen Sie sich frei, die Readme auf Middleware/MIDI-to-uDP zu erkunden
Die Sprache sollte einfach gehalten und auch kurz gehalten werden, damit sie über UDP schnell fliegen kann. Erster Plan Eine Iteration sieht so aus:
Chord HEXA | note on/off (1 char) | velocity HEXA
48140 C on 40
48030 C off
Bitte stellen Sie sicher, dass Sie Platformio.ini bearbeiten und nur eine der Ordner src_dir aus auswählen, um auszutauschen, welches Beispiel ausgeführt werden soll. Zum Beispiel, wenn Sie das UDP auf MIDI -Firmware ausführen möchten, wobei Sie diese Zeile nur in Überzeugung überzeugen möchten:
#Uncomment only one of the folders to select what example to run:
#src_dir = firmware/adafruit-matrix-test
src_dir = firmware/udp-midi-matrix
Das Kompilieren wählt dann dieses Verzeichnis und blitzt es auf Ihr ESP32.
Die Anforderungen erfolgen in der Datei plattformio.ini . Probieren Sie es aus und passen Sie es an Ihr Board und Ihre Bedürfnisse an. Dies funktioniert sehr schnell, dank der Arbeit von Amaz Merlins Fork für Fastled_neomatrix sendet das die Daten an Ihre adressierbare LEDs -Daten -Pin.