今回もマイコンボード「Arduino」を使う。前回はPC上のNodeからArduinoを制御したが、Webエンジニアとしては、Webブラウザーを使っていない点が心残りだった。そこで今回は、Webブラウザーから直接Arduinoを制御する方法に挑戦する。

 その方法とは電子楽器の演奏データ交換の規格である「MIDI」を使うことだ。今回はW3Cで策定中のUSBで接続したMIDI機器を操作するためのAPI「Web MIDI API」を利用する。Web MIDI APIを使えば、USBケーブル経由で、MIDIプロトコルを使ってArduinoを制御できるはずだ。現在はWebブラウザーの「Chrome」と「Opera」でWeb MIDI APIが利用可能だ。

 ただしWeb MIDI API経由でArduinoをWebブラウザーから制御するのは簡単ではない。ホストPCからArduinoを認識してもらうための工夫が必要だ。ご存知の通り、Arduinoは標準でUSBインタフェースしか持たない。ホストPCではシリアルポートとして認識されるが、Webブラウザーにはシリアルポート(仮想Comポート)を使って通信するためのAPIは実装されていない。さらに、ArduinoのUSBインタフェースはUSBコュミニケーションクラスとして認識されてしまう。Web MIDI APIでは、MIDI機器(MIDIクラス)として認識されないと、機器の発見すらできない。

 そこで今回はファームウェアを書き換えることで、この問題を解決したい。morecat_labが開発した「Moco」というファームウェアを使うことにした。Mocoを利用するとPC側からMIDI機器と認識されるようになる。Mocoには、Arduinoの特定の2つのピンをショートさせると、これまで通りのシリアルポートに戻る便利な機能がある。

 Arduino用のプログラムには、JavaScriptは利用できないので、今回は残念ながらC言語でスケッチを書く。MIDIプロトコルについては、ArduinoでMIDIを扱うようにするための「Arduino MIDI Library」を使う。