はじめに
MIDIコントローラー自作のためにArduinoを使うわけですが、ArduinoをUSB-MIDIデバイスにするための方法は色々あります。
今回はそのうちの一つであるMoco LUFAの導入に関してのまとめです。
ついでに言えば、一番楽な方法はTeensyの導入なのでそれに関しては下部までスクロールしてください。
MIDIデバイス化とdual MocoLUFA
Arduinoには実際にスケッチされたプログラムを動かすためのチップであるAtmel ATMega328Pとは別に、USBシリアル通信の情報を書き込むAtmel ATMega16U2が組み込まれています。
このチップのファームウェアをUSB-MIDI通信のためのファームに書き換えることでArduinoをMIDIデバイスとして使用することができるようになります。
Aruduino互換機を使う場合は、一部の互換機ではATMega16U2が使われていないものがあるので注意して購入してください。
dualMocoLUFAの導入
ダウンロード
MIDIデバイスにするファームウェアのうちの1つである、dualMocoLUFAのファームウェア更新ファイル(hexファイル)をダウンロードします。
dualMocoLUFAのGitHubサイトから、hexファイルをダウンロードします。
GitHub : https://github.com/kuwatay/mocolufa
GitHubのMocoLUFAのサイトから「Branch: master」の状態で「Download ZIP」からzipファイルをダウンロードします。実際に使用するものはzip内にあるhexファイルだけです。
ファームウェアの書き込み
MacとWindowsでやり方が変わります。
Macの場合、dfu-programmerで書き込むのですが、Homebrewというパッケージマネージャーを使ってdfu-programmerをインストールするのが楽だそう。
Winの場合は書き込みソフトがあるのでそれを使えば楽。
dfu-programmerの準備
以下macのやり方です。
MacにHomebrew (公式サイト) を導入します。
ターミナルを起動させて、以下のコマンドを入力します。
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)";
これでHomebrewのインストールが完了です。
通常はこれで最新版がインストールされますが、一応更新しておきます。
$ brew update
次に必要なパッケージを導入します。
$ brew install dfu-programmer;
$ brew install wget;
これでdfu-programmerが導入されました。
dfu-programmerの起動からファームの書き換え
Arduinoの電源を入れる前に、Arduinoの上部にあるICSP 6ピンのうち、2つのピンをワイヤーでつなぎ短絡させます(ついでにこの2つはReset 2 と GND)。
その後、ArduinoとPCをUSBでつなぎ電源を入れます。
LEDが光って電源が入ったことを確認したら、短絡させたピンを外します。
これでArduinoがDFUプログラムモードになっているはずです。
ターミナル上で、ArduinoがDFUモードで認識されているか確認します。
$ dfu-programmer atmega16u2 get
このコマンドで「Bootloader Version」の表示が出たら認識されています。
次にATMega16U2の初期化とhexファイルの書き込みを行います。
$ dfu-programmer atmega16u2 erase
$ dfu-programmer atmega16u2 flash dualMOCO.hex
この時、dualMOCO.hexを読むために、cdコマンドでdualMOCO.hexのある階層まで移っておくか、絶対パスでhexファイルを読み込む必要があります。
絶対パスを示す時には、ターミナルにdualMOCO.hexをドラッグしてやればパスが表示されるので、わからなければ「$ dfu-programmer atmega16u2 flash 」まで入力した後にdualMOCO.hexをターミナルの画面にドラックしてやります。
最後にATMega16U2を再起動させます。
$ dfu-programmer atmega16u2 reset
これでArduinoのATMega16U2にmocoLUFA.hexが導入されました。
dual MocoLUFAの使用
dual MocoLUFAを導入すると通常はMIDIデバイスとして認識されるようになるので、Arduino IDEでのスケッチの受送信ができなくなります。
Arduinoでスケッチする場合はArduinoの電源を入れる前に、Arduinoの上部にあるICSP 6ピンのうち、2つのピンをワイヤーでつなぎ短絡させます(ついでにこの2つはMOSI 2 と GND)。
MIDIデバイスとして認識させたい時には外すのを忘れないように。
ArduinoとMIDIライブラリ
Arduinoには標準でMIDIライブラリがあります。
Arduino MIDI Library : https://playground.arduino.cc/Main/MIDILibrary/
詳しくはこの辺りを参照。
FortySevenEffects/arduino_midi_library : https://github.com/FortySevenEffects/arduino_midi_library
Arduino MIDI Library の使い方 : https://qiita.com/yudai220/items/3bde9461f282d56d1ac2
MIDIライブラリは標準では5PIN MIDIコネクタに対する動作をターゲットに作られていますが、dual MocoLUFAを導入すれば、MIDIライブラリを使ってUSB-MIDIデバイスとしてのコーディングをすることができます。
MIDIライブラリの使い方とスケッチに関しては今回は割愛します。
とりあえず、「MIDI_CREATE_DEFAULT_INSTANCE()
」を呼び出すのを忘れないことと、setup()
関数内に「MIDI.turnThruOff()
」を入れてループを防ぐことを忘れないようにしましょうというくらい。
TeensyのMIDIデバイス化
ここからが本題()
Arduino互換機というと語弊がありますが、Teensyというマイコンボードがあります。Arduino IDEで編集できるのでArduino互換機のひとつとも考えられています。
このTeensyは標準でシリアル通信をどうするかを決めることができ、そのうちのひとつとしてUSB-MIDI通信ができます。
基板サイズ、Arduinoと同等の機能、スペックの高さを考えても、Arduinoにdual MOCOLUFAを導入させるよりもTeensyを購入するほうが結果的に楽になる可能性もあります(Teensy LC安いし)。
TeensyをMIDIデバイスとして使用する場合は、Teensyduinoを導入させたArduino IDEの上部タブ「ツール」からボードを「Teensy x.x」に変更させたのち、「USB Type : 」を「MIDI」にしてやることでTeensyがMIDIデバイスとして認識されるようになります。
TeensyにもMIDIライブラリを使用することができますが、MIDIライブラリは5PIN MIDIを想定して作られています。
USB-MIDIとして使用する限りは、追加のライブラリを使わなくても標準のコードでUSB-MIDIとして使用できます。
Teensyduino Using USB MIDI : https://www.pjrc.com/teensy/td_midi.html
まとめ
今回はdual MocoLUFAの導入でした。
自作MIDIデバイスの第一歩ですね。
僕はTeensy LCを買います。