Raspberry Pi OSA MIDI Board

הגדרת Raspberry Pi עבור MIDI
מדריך זה יראה כיצד לקחת Raspberry Pi שהותקן טרי ולהפעיל אותו כהתקן MIDI I/O הניתן לגילוי מערכת ההפעלה. זה גם יספק כמה אקסampמידע על שימוש בספריות Python שונות כדי להעביר נתוני MIDI לתוך והחוצה מסביבת התכנות. עדכון - 11 בספטמבר 2021.: מדריך זה עודכן כדי לתקן כמה בעיות בגרסת ה-Raspberry Pi OS העדכנית ביותר, אתה יכול גם להוריד תמונה מלאה עם סקריפטים מותקנים מראש ומוגדרים במלואם כאן.
מה שאנחנו צריכים
- Raspberry Pi A+/B+/2/3B/3B+/4B
- לוח MIDI עבור Raspberry Pi
- כרטיס MicroSD•סט של 4 ברגים ניילון M2.5
- סט של 4 ניילון M2.5*11 מ"מ נקבה לנקבה
- סט של 4 ניילון M2.5*5 מ"מ זכר לנקבה
הַרכָּבָה
השתמש בברגי הניילון וביציבות כדי להרכיב את ה-Raspberry Pi יחד עם לוח ה-MIDI, כפי שמוצג בתמונה למטה:

הגדרה ראשונה
בדקנו את כל האקסיםampמסמכים במסמך זה על Pi 4B באמצעות מערכת ההפעלה Rasperry Pi, גרסה מאי 2020). בפעם הראשונה, יש צורך להשתמש במסך ובמקלדת כדי להגדיר את ה-Pi. לאחר מכן, השתמש בשיטת הבחירה שלך כדי לגשת למערכת ההפעלה של Pi. כל השלבים הם חובה אלא אם צוין אחרת
הַתקָנָה
עדכון/שדרוג
בצע את העדכון והשדרוג כמתואר כאן: https://www.raspberrypi.org/documentation/raspbian/updating.md
תצורת רשת (אופציונלי)
אם אתה מעביר SSH ממכונה אחרת ל-Pi, כדאי לתת ל-Pi כתובת IP קבועה: https://www.modmypi.com/blog/how-to-give-your-raspberry-pi-a-static-ip-address-update כמו כן, מומלץ להוסיף את הגדרות אבטחת הרשת ל-Pi כך שהוא יתחבר אוטומטית לרשת: https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md
הגדר את ה-Pi Up כגאדג'ט USB OTG
פתחו מסוף ב-Pi ובצעו את ההליך הבא:
- הגדר את מנהל ההתקן של ה-USB ל-dwc2
echo "dtoverlay=dwc2" | sudo tee -a /boot/config.txt - הפעל את מנהל ההתקן dwc2
הד "dwc2" | sudo tee -a /etc/modules - הפעל את מנהל ההתקן של lib Composite
echo "lib composite" | sudo tee -a /etc/modules - הפעל את גאדג'ט ה-MIDI
echo "g_midi" | sudo tee -a /etc/modules
צור את סקריפט התצורה:
- צור את file
sudo touch /usr/bin/midi_over_usb - להפוך אותו הפעלה
sudo chmod +x /usr/bin/midi_over_usb - ערוך את זה עם Nano
sudo nano /usr/bin/midi_over_usb
הדבק את הדברים הבאים ב- file, ביצוע עריכות במחרוזות המוצר והיצרן כנדרש. cd /sys/kernel/config/usb_gadget/ mkdir -p midi_over_usb cd midi_over_usb echo 0x1d6b > idVendor # Linux Foundation echo 0x0104 > idProduct # Multifunction Composite Gadget echo 0x0100 > bcd1.0.0Devicedir. 0x0200 echo "fedcba2" > strings/0x409/serialnumber echo "OSA Electronics" > strings/9876543210x0/manufacturer echo "MIDI USB Device" > strings/409x0/product ls /sys/class/udc > שמור את היציאה UDC file (Ctrl+X, Y, חזרה). הוסף קריאה לסקריפט ל-rc.local, כך שיופעל בכל הפעלה. sudo nano /etc/rc.local הוסף את השורה הבאה לפני "exit0" /usr/bin/midi_over_usb צא מ-Nano ושמור את file ואתחל מחדש את ה-Pi. sudo reboot רשום את יציאות ה-MIDI הזמינות. amidi -l אם ה-MIDI מוגדר כהלכה, הפקודה האחרונה צריכה להוציא משהו דומה ל: Dir Device Name IO hw:0,0 f_midi IO hw:0,0 f_midi
התקן את ספריות Python
סעיף זה יסביר כיצד להתקין את הספריות המועדפות עלינו עבור Python 2.x.
MIDO
Mido היא ספרייה קלה לשימוש לטיפול בנתוני MIDI. זה מסתמך על ה-rt-midi backend, ספריית asound וג'ק. הזן את הפקודות הבאות ברצף: הפלט צריך להראות יציאת 'Midi Through' אחת ויציאה אחת נוספת. אם זה המקרה, הכל בסדר. *הערה: ב-Mido, שם היציאה הוא כל המחרוזת המוקפת במירכאות בודדות, אך אפשר לקטוע את השם למחרוזת שלפני המעי הגס. במכונה זו, המחרוזת היא: 'f_midi:f_midi 16:0'. למשלample, שתי הפקודות הללו שוות ערך
PIGPIO
אנו משתמשים בספריית pigpio כדי להתממשק עם פיני GPIO. מצאנו שספרייה זו יציבה וגמישה יותר מהשיטה הסטנדרטית של התממשקות עם החומרה של ה-Pi (RPi.GPIO). אם ברצונך להשתמש בספרייה אחרת, ערוך את הקוד בהתאם. כדי להתקין את ספריית pigpio, בצע את ההוראות כאן: http://abyz.me.uk/rpi/pigpio/download.html לפני הפעלת כל האקסampלהלן, עליך להפעיל את שירות pigpio אם לא תעשה:
Python Examples
האקסיתamples גם משתמשים בפונקציית interp של ספריית numpy כדרך קלה למיפוי בין שני טווחים. השתמשנו בריפר כדי לשלוח ולקבל נתונים. ה-Pi מוגדר כפלט MIDI של חומרה בתפריט ההעדפות של ריפר.
שליטה ב-GPIO עם נתוני הערות (לדוגמהample_1_key_press.py) דוגמה זוample מראה כיצד:
- האזן ל-3 אירועים ספציפיים של הערה והפסקה באמצעות תנאי פשוט
- תפוס את החריגים המתעוררים כאשר נשלחים נתונים שאינם פתקים אל ה-Pi (למשל העברה של נתונים מרצף)
- מפה את מהירות התו ל-PWM של פין הפלט
ייבא את הספריות הרלוונטיות, צור את אובייקט ה-pi מספריית pigpio ופתח את יציאת הפלט: בלוק ה-try/catch נועד לתפוס את השגיאות הנובעות מסוגים אחרים של נתוני MIDI שנשלחים (למשל בקרות תעבורה וכו'). while True: try: #זה מסנן את כל הנתונים שאינם הערות עבור msg ב-port.iter_pending(): # if there is a message pending if(msg.type == 'note_on'): # if it is Note On message out = interp(msg.velocity, [0,127],[0,255]) # מהירות סולם מ-0-127 ל-0-255 #סנן את הנתונים לפי מספר הערה if(msg.note == 53): pi1.set_PWM_dutycycle(2, out ) elif(msg.note == 55): pi1.set_PWM_dutycycle(3, out) elif(msg.note == 57): pi1.set_PWM_dutycycle(4, out) else: # אם ההודעה אינה Note On (למשל הערה כבוי) if(msg.note == 53): pi1.set_PWM_dutycycle(2, 0) elif(msg.note == 55): pi1.set_PWM_dutycycle(3, 0) elif(msg.note == 57): pi1. set_PWM_dutycycle(4, 0) למעט AttributeError as error: print(“Error excepted”) pass
שליטה ב-GPIO עם גלגלי Mod ו-Pitch (לדוגמהample_2_wheels.py)
האקסית הזוample מראה כיצד:
- האזן לנתוני Pitch ו-Mod וסנן אותם לפי סוג
- מפה את הנתונים ל-PWM של פין הפלט
האקסית הזוample דומה לאמור לעיל, עם סוגי ההודעות הבאים:
- גלגל ה-Pitch הוא מסוג pitchwheel עם ערך של msg.pitch
- גלגל המוד הוא בקר מתמשך מסוג control_change עם פרמטר בקרה של msg.control = 1 (מספר ה-CC) וערך של msg.value
פלט נתוני MIDI מאירוע GPIO (gpio_event.py)
האקסית הזוample מראה כיצד:
- השתמש בפסיקה כדי לזהות לחיצה על כפתור
- שלח נתוני MIDI מה-Pi למכשיר אחר
פתח את יציאת הפלט, צור שתי הודעות והגדר את פין GPIO כקלט. האקסית הזוampאני מניח שיש כפתור קשור לפין 21, כך שהסיכה תעלה ל-HIGH כאשר הכפתור נלחץ: להלן פונקציות ההתקשרות חזרה שנקראות כאשר הכפתור נלחץ או שחרור. פונקציית הפלט ports send() פשוט שולחת את ההודעה מהיציאה: מאזיני ההתקשרות חוזרים פועלים ברקע ואינם זקוקים לתשומת לב נוספת:
השמעת MIDI File
האקסית הזוample מראה כיצד:
- טען MIDI file בסביבת התכנות
- הפעל את file .
האקסית הזוamples מניח שיש לך MIDI file נקרא מידי_file.mid באותה ספרייה כמו סקריפט python שלך: ייבוא mido מ-mido import MidiFile מ-mido import MetaMessage port = mido.open_output('f_midi') mid = MidiFile('midi_file.mid') בעוד True: עבור msg במידיFile('midi_file.mid').play(): port.send(msg)
מסמכים / משאבים
![]() |
Raspberry Pi OSA MIDI Board [pdfמדריך למשתמש OSA MIDI, לוח |




