Arduino Uno を USB-MIDIデバイス化

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をインストール

 

brewでインストールした場合こんなログが出て完了です。バージョン0.7.2がインストールされました。

 

(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コマンドで確認

 

ファームウェアを削除

 

ファームウェアを書換え

 

最後にリセットコマンドを打って完了

 

ここまででボードの準備は完了です。

 

■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が点灯している事も確認して今回は完了です。