MIDI Note Player: отправка MIDI-нот с Arduino
Узнайте, как отправлять MIDI-сообщения о нотах с Arduino на синтезатор или другое MIDI-устройство через стандартный 5-контактный DIN-разъём.
В этом уроке разберёмся, как отправлять MIDI-ноты с платы Arduino на музыкальный инструмент или синтезатор, подключённый через стандартный 5-контактный DIN-кабель.
MIDI (Musical Instrument Digital Interface) — широко распространённый протокол для управления синтезаторами, секвенсорами и другой музыкальной электроникой. MIDI-устройства делятся на два больших класса: контроллеры (генерируют MIDI-сигналы в ответ на действия музыканта) и синтезаторы (включая сэмплеры, секвенсоры и т.п.), которые принимают MIDI-данные и воспроизводят звук, свет или другой эффект.
MIDI — это последовательный протокол со скоростью 31 250 бит/с. Встроенный Serial-порт Arduino (а на Mega — все порты) умеет работать именно на этой скорости, поэтому никакого дополнительного оборудования для передачи не нужно.
Структура MIDI-байт
MIDI-байты делятся на два типа:
- Командные байты — значение от 128 до 255 (0x80–0xFF). Это команды: «нота включена» (Note On), «нота выключена» (Note Off), pitch bend и т.д.
- Байты данных — значение от 0 до 127 (0x00–0x7F). Это параметры команды: высота ноты, громкость (velocity), глубина pitch bend и т.д.
MIDI-данные принято записывать в шестнадцатеричном виде, потому что банки и инструменты в MIDI сгруппированы по 16.
Подробнее о протоколе можно почитать в MIDI Protocol Guides на сайтах, посвящённых MIDI.
Дополнительные материалы: introduction to MIDI (архивная ссылка) и example.
Необходимое оборудование
- Arduino Board
- Гнездо MIDI (мама, female)
- 2 резистора по 220 Ом
- Соединительные провода
- MIDI-устройство (опционально, для проверки)
Схема подключения
По стандарту MIDI все разъёмы на устройствах — только «мама» (female). Подключение к плате:
- Контакт 5 MIDI-гнезда → цифровой пин
1(TX) через резистор 220 Ом - Контакт 2 MIDI-гнезда →
GND - Контакт 4 MIDI-гнезда →
+5Vчерез резистор 220 Ом
Резисторы защищают линию передачи данных от случайных замыканий и снижают риск повреждения оборудования при неправильном подключении.

Схема подключения MIDI-гнезда к Arduino UNO на макетной плате
Принципиальная схема

Принципиальная схема: гнездо MIDI (мама) подключается к Arduino UNO через два резистора 220 Ом — один на линию данных (пин TX→1), другой на линию питания (+5 V)
Код
Внимание!
Если вы используете плату с ATmega32U4, например DUE или Leonardo, замените Serial на Serial1 в скетче ниже. Это связано с тем, что на таких платах аппаратный
Serialвыведен на USB, а физические пины TX/RX соответствуютSerial1.
Как это работает
Ардуино отправляет три байта для каждой ноты:
- Команда Note On — байт вида
0x90+ номер канала (0x90 = канал 1). - Номер ноты — число от 0 до 127 (например,
60= средняя до, C4). - Velocity (громкость) — число от 0 до 127 (0 = беззвучно, 127 = максимум).
Чтобы остановить звук, отправляется команда Note Off (0x80) с теми же параметрами, либо Note On с velocity = 0.
Типичные ошибки
- Перепутаны контакты MIDI-гнезда. Нумерация контактов DIN-5 может сбивать с толку — считайте их со стороны пайки, а не со стороны разъёма.
- Забыт резистор на линии данных. Без него велик риск повредить MIDI-вход принимающего устройства.
- Неверный
Serialна Leonardo/DUE. На этих платахSerial— это USB, а не физические пины. ИспользуйтеSerial1. - Неверная скорость. MIDI работает строго на 31 250 бод. Любое другое значение в
Serial.begin()приведёт к мусору на входе.
Как проверить результат
Если под рукой нет физического MIDI-устройства, можно использовать компьютер с USB-MIDI-интерфейсом и программным синтезатором (например, GarageBand, LMMS или любой DAW). Подключите Arduino через MIDI-интерфейс и откройте монитор MIDI-сообщений — вы увидите входящие Note On/Off-команды.
Дополнительные материалы
Больше базовых примеров — в разделе built-in examples.
Полный справочник по языку программирования Arduino доступен в language reference.
Последнее обновление: 10.12.2015, AG