会社のアドカレをプチネタで埋める活動も、おかげさまで順調に枠が埋まり2024年度は今回で最後になりそうです!よかった!
もちろんカレンダーは明日以降も順調に続く予定ですので、他の社員有志の投稿をお楽しみに!
過去記事と何が違う?!
実は過去に何本も似たような記事書いてますね。
- Arduinoを使ってWeb MIDI APIから制御可能なUSB MIDIデバイスを自作する(MIDIUSB編)
- Arduino UNOで作る一番簡単なMIDI音源
- Arduino Leonardo/MicroでもMIDI使いたい。
- Arduino UNOとATTiny13Aを使ったタッチセンサーMIDIコントロールデバイスの作り方
2024年の今、初心者がUSB-MIDIデバイスの制作に挑戦する環境としてATmegaやATtinyを採用するのは、コストメリットもなく技術的な難易度的にも合わなくなったと思います。
AtmelもMicrochipになっちゃいましたしねー。
最近、DIY界隈で人気なのは、Raspberry Pi Pico に代表される RP2040搭載マイコンボードだと思います。安くて高性能。Seeed XIAO RP2040 のように小型のボードもあり、さまざまなデバイスのDIYに使いやすいです。
今回の記事では RP2040マイコンを使ってMIDIデバイスを作る方法を紹介します。
記事冒頭のGIFに写ってるXMASツリーは、昨年の記事で作成したものに USB-MIDIファームウエアを書き込んで PCで動作しているWebアプリと連動させたものです。Ogaki Mini Maker Faireにて展示しました!
準備(物理)
下記を準備しましょう。以下必須です。
- RP2040マイコン(前述の Raspi Picoでも、XIAO RP2040でも、その他の互換ボードでも大丈夫です)
- Arduino IDEが動くPCとUSBケーブル(PC側のUSB端子とマイコンボード搭載のUSB端子を接続可能なケーブル)
下記はあると便利です。RP2040にファームウエアを書き込む際にBOOTボタンを押しながらUSBケーブルをPCから抜き差しする時に微妙に手が足りん!ということがなくなります。
- スイッチ付きUSBハブ (例えばこういうの)
準備(ソフトウエア)
ソフトウエアの準備として下記が必要です。
-
- Arduino IDE のインストール
-
- Arduino IDEへ、arduino pico ボード設定の追加
-
- Arduino IDEへ、Adafruit TinyUSB ライブラリの追加
順を追ってやってみましょう。
1. Arduino IDE のインストール
リンク からPCのOSに合わせたVer.をダウンロードしてインストールしておいてください。
私は今だに 1.8.x 系列を使ってますけど、最近は2.x 系列でも安定したんじゃないかな?使ってないからわかりません。
2. arduono-pico をArduino IDEに導入
ArduinoはRP2040を標準ではサポートしていません!.... というのは実は嘘で、Arduino Mbed Core for RP2040という標準サポートのボード設定もあります。Arduino Nano RP2040 Connectなどのボードを使う場合は、こちら標準のライブラリも使えますが、Arduinoが出してるボードしかサポートしてないこともあって、微妙に流行ってません。
迷わずさまざまなボードに対応したarduono-picoの方をお勧めしますので、本稿ではこちらの導入方法について紹介します。
2-1. Preferences へ Additional Boards Manager URLs を設定
Arduino IDE起動後、[Arduino > Preferences]を選びます。
Preferences
画面が表示されますので、Additional Boards Manager URLs
のテキストボックスに下記URLを入れます。
https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
Preferences
画面は OK
を選んで閉じます。
2-2. Board Managerで ボード設定をインストール
続いてArduino IDEから、[Tools > Board > Board Manager] を選びます。
Boards Manager
画面が表示されます。
テキストボックスに RP2040
と入力してください。
いくつか、追加可能なボード設定の一覧が出てきます。
Raspberry Pi Pico/RP2040/RP2350
と書いたボード設定が見つかります。
これをインストールしてください。(既にインストールしてるとupdate
ボタンが表示されます)
ボード設定のインストールが終わったらBoards Manager
画面は Close
ボタンで閉じて構いません。
3. Adafruit TinyUSB をArduino IDEに導入
次にインストールするのはライブラリです。下記手順でインストールしてください。
Arduino IDEから、[Tools > Manage Libraries] を選びます。
Boards Manager
とよく似た Library Manager
画面が表示されます。
検索Boxに TinyUSB
と入力してください。
Adaftuit TinyUSB Library
が見つかりますので、install
ボタンを押してインストールします。
インストールが終わったら Library Manager
画面は Close
ボタンで閉じてください。
example を動かしてみよう
ざっくり準備が終わりましたので、Arduinoでスケッチを作ってボードに書き込んでみます。最初からコードを書くのは大変ですので、example
を書き込んでみましょう。
TinyUSB ライブラリを追加すると、ライブラリを使った example も Arduino IDEに追加されます。
Arduino環境の凄いところはまさにココ。最初っから悩まずにスルスル学習が進むところですね。
1. example を開く
今回は、[File > Examples > Adafruit TinyUSB Library > MIDI > midi_test] を選んで開いてみましょう。
私が書いたコードじゃないので転載差し控えますが、おおまかに下記内容のプログラムになっています。
- ループでメロディ(MIDI Note ON / MIDI Note OFF)を送信
- MIDIイベントをデバイス側が受信するとシリアル経由で届いた内容を送信
という感じです。
2. デバイスへの書き込み。の前の準備
それではさっそく、デバイスに書き込んでみましょう。と言いたいところですが、ファイルを開いたあとに書き込みの準備をします。
2-1. ターゲットボードの選択
さきほど board manager
からボード設定を追加しましたので、RP2040デバイスが選べるようになっているはずです。
今回私は Seeed XIAO RP2040 を準備しましたので、こちらの設定を読み込みます。
[Tools > Board > Raspberry Pi RP2040 Boards ... > Seeed XIAO RP2040] と選びます。この部分ではお使いのデバイスを選んでくださいね。
2-2. USB Stackの選択
ボードを選んだ後は、さまざまなボード設定が行えるようになりますが、今回は USB Stackの設定のみ変更します。
[Tools > USB Stack > Adafruit TinyUSB] を選んでください。
3. 書き込み!
準備も終わりましたので、さっそくデバイスにプログラムを書き込んでみましょう。
手順は下記の通りです。
3-1. デバイスをBOOT
モードで PCに接続
デバイス(RP2040ボード)には、BOOT
スイッチが備わっているはずです。
このBOOT
スイッチを押しながら PCのUSBポートに接続してデバイスの電源を入れる必要があります。
USB-C端子は固く、最近のPCはPC側もUSB-Cだったりするので、この作業が実はかなりやりにくいです。
スイッチ付きUSBハブがかなり欲しくなると思いますが、なければ頑張ってください。
....安いスイッチつきUSBハブの導入をお勧めします。
BOOT
モードで起動すると、PCから見ると RPI-RP2
マスストレージデバイスがマウントされます。
OSにもよりますが(上記はMacの場合)マウントされたDiskが見えたらひとまず成功です。
3-2. 書き込み
それでは、プログラムを書き込んでみましょう。
Arduino IDEの画面左上、左から2番目の →
アイコンをクリックするとアップロードが始まります。
下記のような画面が出たら書き込み成功です。
うまくいかなかったら、これまでの手順を見直して、やり直してみてください。
書き込みが終わると、BOOT
モードで接続されていたデバイスは一度自動的にアンマウントされ、新たにMIDIデバイスとして接続されます。
4. テスト
最後に動作テストの方法です。
一番簡単なのは、Web MIDI を使ってブラウザでテストする方法です。
下記サイトで 接続された MIDIデバイス情報を確認することができますので、やってみてください。
まず、下記サイトに Web MIDI API に対応したブラウザ(iOS以外のChrome、Edgeブラウザーなど)でアクセスします。
上記サイトのコンテンツの中段くらいに「入力」と書かれたセレクターがあります。
このセレクターで「XIAO RP2040」など、今回利用したデバイスが表示されていれば、まずは成功です!
表示されているデバイスを選択すると、少し上に表示されているテキストエリアに何やらテキストがどんどん表示されているはずです。
これがデバイスから送られてくる MIDIメッセージのダンプになります。
まとめ
RP2040とArduinoを使ってUSB MIDIデバイスをDIYする方法、の基本的な部分の解説を行いました。
一旦、今回の記事はここまでで一区切りとしたいと思います。
USB MIDIデバイスをもう少し使いやすくするために、PCから認識されるデバイス名などを変更する方法などについては別の機会に書いて行こうと思います。
最後までおつきあいいただき、ありがとうございました!
P.S.
大垣で展示したクリスマスツリー形MIDIデバイスは、その後職場に飾りました!クリスマス終了まで稼働予定!