Arduinoを使ってMIDIデバイスを作成する為のHelloWorld手順です。
■環境
・Mac (High Sierra 10.13.3)
・Arduino IDE (1.8.5)
・ELEGOO UNO R3 (Arduino Uno R3互換品)
Arduino Uno R3にはメインプロセッサとは別に、Atmel Mega16U2というプロセッサが載っています。
ATMEGA16U2は、メインプロセッサのシリアルポートとPCのUSBポートとをつなぐ役割をしていて、DFU(Device Firmware Update)という特別なUSBプロトコルを用いてファームウェアの書き換えが可能です。
このファームウェア書換えによってボードをUSB-MIDI機器としてパソコンに認識させる事ができます。
※今回使用したArduino Uno R3互換ボードには、正規品と同じATMEGA16U2が使用されています。
(正規版との比較)
■準備
公式サイトに「Updating the Atmega8U2 and 16U2 on an Uno or Mega2560 using DFU」というページがありますのでファームウェアの書換え手順は大体その通りに行っていきます。
https://www.arduino.cc/en/Hacking/DFUProgramming8U2
(1) dfu-programmerをインストール
1 2 3 4 5 6 7 8 9 |
brewを使う場合 $ brew update $ brew install dfu-programmer portsを使う場合 $ sudo port install dfu-programmer |
brewでインストールした場合こんなログが出て完了です。バージョン0.7.2がインストールされました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ brew install dfu-programmer ==> Installing dependencies for dfu-programmer: libusb, libusb-compat ==> Installing dfu-programmer dependency: libusb ==> Downloading https://homebrew.bintray.com/bottles/libusb-1.0.21.high_sierra.bottle.tar.gz ######################################################################## 100.0% ==> Pouring libusb-1.0.21.high_sierra.bottle.tar.gz 🍺 /usr/local/Cellar/libusb/1.0.21: 29 files, 510.5KB ==> Installing dfu-programmer dependency: libusb-compat ==> Downloading https://homebrew.bintray.com/bottles/libusb-compat-0.1.5_1.high_sierra.bottle.tar.gz ######################################################################## 100.0% ==> Pouring libusb-compat-0.1.5_1.high_sierra.bottle.tar.gz 🍺 /usr/local/Cellar/libusb-compat/0.1.5_1: 14 files, 94.4KB ==> Installing dfu-programmer ==> Downloading https://homebrew.bintray.com/bottles/dfu-programmer-0.7.2.high_sierra.bottle.tar.gz ######################################################################## 100.0% ==> Pouring dfu-programmer-0.7.2.high_sierra.bottle.tar.gz 🍺 /usr/local/Cellar/dfu-programmer/0.7.2: 9 files, 107.3KB |
(2) 書きこむファームウェアをダウンロードする
ファームウェアは以下のリポジトリで公開してくださっていますので有り難く使わせて頂きます。(2018.02.24現在)
https://github.com/kuwatay/mocolufa
(詳細は morecatlab様サイトへ。 http://morecatlab.akiba.coocan.jp/lab/index.php/aruino/midi-firmware-for-arduino-uno-moco/ )
このファームウェアは通常はMIDIモードとして動作し、MOSI PB2とGNDを短絡させる事によって、スケッチの書き込みモードとして動作するという最高に素晴らしい仕様です。
(3) ボードをDFUモードにする。
通常PCにボードを接続すると下記のようにシリアルポートの一覧に出てきます。
ここで、一旦接続を外して、
arduino公式サイトの「Reset the 8u2 or 16u2」に記載されているように、RESET pinとGNDを短絡し(USBのコネクタ付近にある6本のピンのコネクタ側2本です。)、
再度PCと繋ぐと、一覧から消えます。
(3) ファームウェアを書きこむ
ボードが起動したらジャンパを外して、認識できているかdfu-programmerコマンドで確認
1 2 |
$ sudo dfu-programmer atmega16u2 get Bootloader Version: 0x20 (32) |
ファームウェアを削除
1 |
$ sudo dfu-programmer atmega16u2 erase |
ファームウェアを書換え
1 2 3 4 5 6 7 8 |
$ sudo dfu-programmer atmega16u2 flash dualMoco.hex Checking memory from 0x0 to 0x167F... Empty. 0% 100% Programming 0x1680 bytes... [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success 0% 100% Reading 0x3000 bytes... [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success Validating... Success 0x1680 bytes written into 0x3000 bytes memory (46.88%). |
最後にリセットコマンドを打って完了
1 |
$ sudo dfu-programmer atmega16u2 reset |
ここまででボードの準備は完了です。
■MIDI信号を送るスケッチを書き込む
arduinoではMIDIを扱う為のMIDI Libraryが用意されていますので、IDEに取り込みます。
http://playground.arduino.cc/Main/MIDILibrary
から最新のライブラリをダウンロードして、/{ユーザhome}/Documents/Arduino/libraries/ にコピーし、IDEを再起動。
試しにMIDIライブラリのexample「Basic_IO」を開いて書き込みます。
書きこむ時は、GNDとPB2をショートするだけでOK。後は普通にコンパイル&書き込みを行います。
■動作確認する
DAWなどMIDI信号を送受信できるソフトウェアを起動し、何か信号を出してみます。
先ほど書き込んだBasic_IOは4chのMIDI信号を受けると、LEDを点灯して1chにMIDI信号を送信するので、そのようにソフトを準備して鍵盤を押してみます。
下画像はprotoolsの例ですが、arduinoボードがMocoLUFAとして認識されているのが分かります。
MocoLUFA-4chに出力するMIDI2トラックでどの鍵盤を押しても、MocoLUFA-1chに同じ音のMIDI信号が返ってくるのが確認できました。
その時にarduinoのLEDが点灯している事も確認して今回は完了です。