เฟิร์มแวร์ remora ก่อนหน้าของเรามีจุดประสงค์เพื่อรับคำสั่งสั้น ๆ จากORCλและสร้างภาพเคลื่อนไหว Neopixels ง่าย ๆ บนแถบ LED ที่อยู่ได้ (WS2812B ชอบ)
วางแผน มิดเดิลแวร์ NodeJS
การใช้งานครั้งแรกที่ไม่ต้องการหมวก MIDI ใด ๆ ในการแปลงสัญญาณเป็น MIDI ใช้ มิดเดิลแวร์ NodeJS เพื่อเริ่มต้นไปที่ไดเรกทอรี:
cd middleware/midi-to-udp
nodejs midi.js
ที่นั่นคุณจะเห็นพอร์ตใดที่คุณมีเป็น MIDI ที่เข้ามา คุณต้องการแหล่งอินพุต MIDI ไม่ว่าจะเป็นเครื่องมือหรือสิ่งที่คุณส่งจากคอมพิวเตอร์เอง ในกรณีของฉันฉันใช้การรวมกันของความขี้ขลาดและ Rosegarden (ชนิดของ Cakewalk สำหรับ Linux) เมื่อคุณเห็นพอร์ตที่ระบุไว้ให้เพิ่มที่อยู่ IP -p (พอร์ต) และ -U (UDP) IP พอร์ต UDP ได้รับการแก้ไขถึง 49161 ทั้งในมิดเดิลแวร์และในเฟิร์มแวร์ ESP32 เป็นตัวอย่าง:
$ 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
สิ่งนี้จะเปลี่ยนเส้นทาง MIDI เป็น UDP และ ESP32 จะได้รับข้อความสั้น ๆ UDP นี้และวาดสิ่งต่าง ๆ ในเมทริกซ์ LED ของคุณ
แผน B MIDI รุ่นอนุกรม
ต้องใช้โมดูล midi-arduino sparkfun เพื่อเปิดใช้งาน MIDI ผ่านและส่งสัญญาณไปยังการแปลงอนุกรม การเดินสายไปยัง ESP32 โดยใช้ serial2 เพื่อออกจากการดีบักแรกสำหรับการดีบักค่อนข้างตรงไปตรงมา:
esp32 | หมวก MIDI 5V 5V GND GND RX 26 TX 27
นี่ควรเป็นของจริงเร็วขึ้นและมีความล่าช้าน้อยกว่าถ้าคุณต้องการเป็นอิสระจาก wifi

เพื่อรวมการใช้เฟิร์มแวร์ทั้งสองและในอนาคตสร้างคลาสทั่วไปที่จะฟังคำสั่งเดียวกันเราได้คิดค้นข้อความภายในสั้น ๆ ที่ใช้ 6 อักขระ เราใช้ Hexadecimal เพื่อให้มันอยู่ในความยาว 2 ตัวถ่านเสมอ:
2 chars (HEXA) representing Note played
1 boolean representing Status (1 note on, 0 note off)
2 chars (HEXA) representing Velocity
NNSVV หมายเหตุสถานะความเร็ว
ในเวอร์ชัน UDP-Midi-Matrix สคริปต์มิดเดิลแวร์ควร MIDI.JS ควรทำงานในพื้นหลังเพื่อแปลงสัญญาณ MIDI เป็นข้อความ UDP สั้น ๆ
ในรุ่น midi-in-matrix MIDI จะถูกแปลงเป็น UART โดยใช้หมวก Sparkfun Midi และได้รับโดยตรงในพอร์ต hardwareserial (serial2) ใน ESP32 ดังนั้นรุ่นนี้เป็นอิสระ wifi และควรมีเวลาแฝงน้อยลง แต่มีข้อเสียที่คุณต้องใช้ MIDI ในสายเคเบิล
ตัวอย่าง: การเล่นทำใน octave 3 ที่ 36 ในทศนิยม, ความเร็ว 60, หมายเหตุเกี่ยวกับข้อความคือ:
2413B
When the same note is released it could be:
24000
โปรดทราบว่า synths บางตัวยังส่งความเร็วในการเปิดตัวดังนั้น 2 Chars HEXA สุดท้ายไม่ได้อยู่เสมอ 0. การกรองช่องจะถูกนำไปใช้ในอนาคต ให้คุณเลือกระหว่างทุกช่องหรือ 2 ช่องที่กำหนดค่าได้โดยใช้ค่าคงที่ platformio.ini:
-D MIDI_LISTEN_CHANNEL1=0
-D MIDI_LISTEN_CHANNEL2=0
ใน 0 มันจะอนุญาตทั้งหมด หากคุณใช้ 1 และ 2 สำหรับค่าคงที่แต่ละค่านั้นจะฟังเฉพาะช่องเหล่านั้น การกรองแชนเนลจะใช้ได้เฉพาะในเวอร์ชันอนุกรมเนื่องจากฉันยังไม่ได้ค้นพบว่าอยู่ที่ไหนในไลบรารี NodeJS MIDI อย่าลังเลที่จะสำรวจ readme บนมิดเดิลแวร์/midi-to-udp
ภาษาควรเก็บไว้ง่ายและสั้นเพื่อให้สามารถบินได้อย่างรวดเร็วผ่าน UDP แผนการทำซ้ำครั้งแรกมีลักษณะเช่นนี้:
Chord HEXA | note on/off (1 char) | velocity HEXA
48140 C on 40
48030 C off
โปรดตรวจสอบให้แน่ใจว่าได้แก้ไข platformio.ini และไม่เขียนบทเพียงหนึ่งในโฟลเดอร์ SRC_DIR เพื่อเลือกตัวอย่างที่จะเรียกใช้ ตัวอย่างเช่นหากคุณต้องการเรียกใช้เฟิร์มแวร์ UDP ไปยัง MIDI เพียงแค่ไม่ทำให้รู้สึกถึงบรรทัดนี้:
#Uncomment only one of the folders to select what example to run:
#src_dir = firmware/adafruit-matrix-test
src_dir = firmware/udp-midi-matrix
จากนั้นการรวบรวมจะเลือกไดเรกทอรีนี้และแฟลชไปยัง ESP32 ของคุณ
ข้อกำหนดอยู่ในไฟล์ platformio.ini ตรวจสอบและปรับให้เข้ากับบอร์ดและความต้องการของคุณ สิ่งนี้ใช้งานได้อย่างรวดเร็วสุด ๆ ขอบคุณการทำงานของส้อมที่น่าทึ่งของ Marc Merlin สำหรับ fastled_neomatrix ซึ่งเป็นสิ่งที่ส่งข้อมูลไปยังพินข้อมูล LED ที่อยู่ที่อยู่ได้ของคุณ