2025年9月25日木曜日

FAMIC on USBを試してみる~Linux Mintでも使えるかやってみる

以前の続きです。「FAMIC on USB」というMML(Music Macro Language)でプログラムできる音楽系ガジェット(小さなマイコンボード)を使ってみています。これまでは、MacBook ProGoogle chromeを使った動作確認をしてきましたが、今回はLinux Mintで動かしている自作PCでも動作確認をしておきたいと思います。

使っていてわかってきたこと(どこかに明記されているかも…)ですが、仕組みとしては、DACのようにPCから音声出力する仕組みを利用してデータの書き込みを行っているようなので、DACのように認識されてしまえば理論的にはLinuxでも使えると思います。今回の動作確認には、自作PCのUSB 3.0ポートにUSB 3.0対応のケーブルを挿して、そこにFAMIC on USBをつないで検証します。今回もYAZAWATVR35WH(電池駆動のアンプ内蔵スピーカー)を使って音が出るか確認します。

Linux版のGoogle chromeで「MML Playground」にアクセスしてMMLでプログラムを作ります。普段は、ヘッドホン出力をBluetoothで飛ばしてスピーカーから音を出しているので、プログラムが完成するまではスピーカーから音を出して確認します。以前からやってみたかった「呼び込みくん群馬電機株式会社製)」の曲を再現してみました。(耳コピですけどね)音の長さをどう表現するか少し悩みましたが、「MML Command Reference」も参考にしながらそれらしいプログラムを作りました。
#著作権等を考慮して、プログラム自体の公開は控えておきます。

いよいよFAMIC on USBを接続してみます。USB 3.0ポートにUSB 3.0ケーブルでつなぐと、予想通りDACと同じように自動的に認識されて、「Analog Output FAMIC WRITER」と「Digital Output (S/PDIF) FAMIC WRITER」として認識されました。デフォルトで「Analog…」の方が選択されるようなので、そのまま「FAMIC WRITE」ボタンをクリックしました。緑のLEDが点灯して、書き込まれている感じになりましたが曲が流れず、リセットボタンを押すともともとプログラムされていた音が流れます。ならばと思い「Digital…」の方でもやってみましたが、結果は同じでした。

この後、挿し込むUSBポートを2.0の方にしてみたり、USBケーブルを2.0対応のものに替えてみたり、書き込むデータを「Example」から選んだものにしてみたりといろいろと試行錯誤してみましたが、どのパターンでも書き込むことができませんでした。挙動としては、緑のLEDが2回点灯するので、書き込もうとしていることはわかるのですが、青のLEDの方は全く反応していないように見えます。

うまくいく方法はないものかと「歯車(設定)」アイコンをクリックして、「WRITING SPEED」を「9600 baud」から「4800 baud」に変更してみました。ダメ元で「FAMIC WRITE」をクリックして書き込みを試みると、青のLEDも点灯して無事に書き込むことができました。「WRITING SPEED」を「4800 baud」にした状態でUSBポートとUSBケーブルの違いを再度検証してみましたが、USBポートやUSBケーブルの問題ではなく、単に書き込み速度(ボーレート)の問題だったことわかりました。

Linuxでの使い方にはちょっと工夫が必要ではありますが、使えることがわかってホッとしました。MMLでのプログラミングについては、もう少しスマートにわかりやすく書けるようになりたいと思いました。自己満足の世界ではありますが、昔ファミコンで遊んだゲームの音を再現して遊んでみるだけでなく、ファミコン音源(のようなもの)で様々な楽曲を演奏できるのが面白いと思いました。

2025年9月15日月曜日

M5Stackを使ってみる〜とりあえずLinuxで使えるか試す

以前の続きです。前回は、MacBook Proを使ってM5StackCORE BASIC V2.7の動作確認をしました。macOSでは、Upload時にエラーが出てうまく動かすことができませんでした。今回は、Linux Mintで動かしている自作PCを使って動作確認をしていきたいと思います。

自宅のMintには、Linux版Arduino IDE(2.3.6)をインストールしています。これを起動して、MacBook Proでやったときと同じように、ボードマネージャで「esp32(2.0.17)」を、ライブラリマネージャーで「M5Stack(0.4.6)」をインストールしておきます。
#「esp32」は、2.x系のものを使わないとダメみたいなので。

M5StackをUSBケーブルでPCにつないだ上で、「ツール」メニューから「ボード:」の項目を選択して、「esp32」→「M5Stack-core-ESP32」を選択し、さらに「ポート:」の項目を選択して、「/dev/cu.usbserial-…(LilyGo T-Display)」を選択します。(「LilyGo T-Display」というのがあるらしい←何故これでよいのかはわからないけど…)次に、「ファイル」メニューから、「スケッチ例」→「(カスタムライブラリのスケッチ例)M5Stack」→「Unit」→「CardKB」とたどってプログラムを開きます。

この状態でちょっと試しにと「→(コンパイル&書き込み)」ボタンをクリックしてみました。すると、何の問題もなくコンパイルとUploadが完了してしまいました。もしやと思ってGroveポートにCardKBをつなぐと、キーボードとして使うことができました。Cardであることにこだわった製品なだけに、タクティルスイッチが薄くて押し難かったり、挙動が不安定だったりして必ずしも使いやすいとは言えませんが、使えることだけはわかりました。M5StackのGitHubサイトにあった、Arduino IDEのサンプルプログラムでも試してみましたが、こちらも問題なくコンパイルと書き込みができて使えることがわかりました。

MacBook Pro(macOS)ではできなかったのに、Linux Mintでは意外にあっさりとCardKBが使えたので、その他のユニット類についてもMintで動作確認をしてみようと考えました。さしあたってUNIT-SYNTH(仏dream社のSAM2695を内蔵したシンセサイザーユニット(「SYNTH」と略記))で音が出せるかやってみようと思いました。先に結論から言うと、そもそも今回使っているCORE BASIC V2.7のGroveポートはI2C(「PORT.A」と言うらしい)にしか対応しておらず、「PORT.C(UART)」対応のSYNTHユニットは使えないことがわかりました。orz
#「M5Stack Groveポート A-B-C」を参考にしました。

前回の記事で、すでにフラグが立っていたことに気づいて悶絶してしまいましたが、Groveポートの「色の違い」に違和感を覚えなかった自分にも問題がないとは言えません。ちなみにですが、「PORT.A(I2C)」は赤、「PORT.B(I/O=GPIO」は黒、「PORT.C(UART)」は水色となっています。M5Stick-CやCardKBのGroveポートの色は白ですが、これはそもそものGroveポートの色が白だったためではないかと推察しています。

一応、Arduino IDEで作業した手順だけは記録しておきます。CardKBを動かした状態からなので、既にArduino IDEとCore Basicはつながっている状態からの手順と考えてください。

  1. ライブラリマネージャーから「M5UnitSynth(1.0.1)」ライブラリーをインストールする。
  2. 「ファイル」メニューから「スケッチ例」→「(カスタムライブラリのスケッチ例)M5UnitSynth」→「piano」を選択して開く。
    ※見つからない場合は、M5Stackの「UNIT-SYNTH」公式サイトで公開されている、サンプルプログラム(「drum」と「piano」)を使ってください。
  3. 「→(コンパイル&書き込み)」ボタンをクリックして、実行プログラムをUploadする。
  4. Core BasicにSYNTHをつなぐ。

ここまでの作業でUploadには成功するものの、SYNTHユニットから音が出ることはありませんでした。他に使えるようにする方法がないか調べてみたいと思います。

M5Stackを使ってみる

2025年9月7日日曜日

Arduino® UNO R4 WiFiを使ってみる〜Linuxでも使えるかリベンジも兼ねて

前回の続きです。Arduino UNO R4 WiFiの動作確認をしています。Arduino UNO R4 Minima動作確認のときは、Linux版のArduino IDEで動かすことができなかったところで終わっていたのですが、今回、R4 Minimaでの再チャレンジも併せてR4 WiFiの動作確認もしていきたいと思います。
#いつものLinuix Mintで動かしている自作PCで検証します。

まず、Linux版Arduino IDE(2.3.6)を起動して、改めて「Arduino UNO R4 Boards(1.5.0)」をインストールすることにします。「ボードマネージャ」で「UNO R4」を検索して、「Arduino UNO R4 Boards」を選択して「インストール」ボタンをクリックします。以前うまく行かなかったときから、R4 Minimaへの対応状況に変化があるか確認するために、「ツール」メニューから「ボード:」を「Arduino UNO R4 Minima」に、「ポート:」を「/dev/ttyACM0(Arduino UNO R4 Minima)」に設定しました。「ファイル」メニューから「スケッチ例」→「01.Basics」→「Blink」を開いてLチカ動作確認をしてみます。残念なことに、R4 Minimaでは、まだdfu-utilのDFUエラーが解消されておらず、エラーが出てしまって書き込むことができませんでした。

ダメ元で、ボードをR4 WiFiに交換して動作確認をすることにしました。「ツール」メニューから「ボード:」を「Arduino UNO R4 WiFi」に、「ポート:」を「/dev/ttyACM0(Arduino UNO R4 WiFi)」に変更して、「→(コンパイル&書き込み)」ボタンをクリックしてみました。すると、問題なくプログラムを書き込むことができてLチカ動作確認ができてしまいました。\(^O^)/(一人で勝手に盛り上がる)

こうなると、Linuxで使えないR4 Minimaが不便(不憫)に感じます。ファームウェアのアップデートで解決するかもしれないと考えて試行錯誤してみましたが、アップデートできるArduinoの種類が決まっているようです。詳しくは、公式のサポートページ「Use the Firmware Updater in Arduino IDE」に情報がありました。現時点では、R4 Minimaのファームウェアアップデートには対応していないようです。
#R4 WiFiの方は、Linux MintでもMacBook ProでもArduino IDEを使ってファームウェアアップデートができました。

R4 WiFiの方は、MacBook Proでの動作確認で使用した「PlayAnimation」をLinux版Arduino IDEで開いて無事にコンパイル&書き込みができました。調子に乗って、以前はできなかった「Arduino UNO R4 WiFiを使って、ネットから日時取得 のプログラム」を持ち込んで、ダメ元でコンパイル&書き込みをしてみたところ、問題なく動いてしまいました。(狂喜乱舞!)どうやら、プログラムの書き込みが完了したor書き込まれた状態で電源をつないだときに、Wi-Fiにつなぐことを試みているようなのですが、そのタイミングでうまくWi-Fiにつながることができないと、それ以降はもう一度電源をつなぎ直す以外にWi-Fiにつなごうとしてくれなくなるようでした。
#参考にしたプログラムを少しいじれば、解決するかもしれませんが…。

そんなことならと思い、MacBook Proの方でも再度チャレンジしてみましたが、コンパイル&書き込みの後、何度か電源をつなぎ直すと動いていることが確認できました。いろいろと試行錯誤させられましたが、うまく動かなかった原因がプログラムの問題ではなかったとわかってホッとしました。つまずきの原因が、意外と単純なことだというのはよくあることなのでよしとします。

2025年9月2日火曜日

Arduino® UNO R4 WiFiを使ってみる

これまでにも何度か紹介しているArduinoですが、フィジカル・コンピューティングと言えばなマイコンボードで、広く普及し始めた(「自分が使い始めた」と同義ですが)Arduino Duemilanoveの時代から愛用しています。小学校教育にフィジカル・コンピューティングを導入する研究をしてきたので、自宅には当時購入したDuemilanoveが複数枚あります。その流れで、UNOLeonardoとその互換ボード、M0、Genuino 101(Arduino 101)などもあって、シールド類も含めるとかなりの数に上ります。

以前、Arduino UNO R4 Minima動作確認をしていましたが、ようやくArduino UNO R4 WiFiを入手したので、こちらも動作確認をしていきたいと思います。
#おさらいではありますが、R4シリーズには、ルネサスRA4M1チップ(32bit Arm® Cortex®-M4内包)が使われています。
#UNO R3までのArduinoは、PCなどと接続する際に標準サイズやmicroサイズのUSB-Bコネクタを使っていましたが、R4からはUSB-Cコネクタが採用されていることも大きな違いになっています。

R4 WiFiは、その名の通り無線LANに接続できる機能が付加されているのですが、私自身は「マトリクスLED(8*12)」の方に興味があり、これを使いこなしてみたいという衝動に駆られて購入したのでした。ネットで情報を探していると、Wi-Fi経由でNTPサーバから現在時刻を取得する使い方が紹介されていました。ありがたいことに、取得した現在時刻をマトリクスLEDに表示するプログラムを作って紹介しているサイト「Arduinoマイコンボードでの実験備忘録」を見つけたので、今回は「Arduino UNO R4 WiFiを使って、ネットから日時取得」と「Arduino UNO R4 WiFiを使って、ネットから日時取得 のプログラム」を参考にしながら動作確認をしていくことにしました。

動作確認は、いつものMacBook Proを使います。Arduino IDE(バージョンは「2.3.6」)を起動して、「ツール」メニューから「ボード:」の項目を選択して、「Arduino UNO R4 Boards」→「Arduino UNO R4 WiFi」と選択します。(「Arduino UNO R4 Boards」をインストールしていない場合は、ボードマネージャでのインストール作業が必要です)R4 WiFiをUSBケーブルでつないで「ツール」メニューから「ポート:」の項目を選択して、接続したR4 WiFi(/dev/cu.usbmodem…(Arduino UNO R4 WiFi))を選択します。これで準備は完了です。

先ほど紹介させていただいた「プログラム」をもとに、少しだけ改造して作ったプログラムを「→(コンパイルと書き込み)」ボタンをクリックして作業を進めます。コンパイルにエラーはなく、問題なく書き込まれた感じになりました。R4 WiFiの方も動こうとしている感じがするので、プログラム自体は書き込めているのだろうと思います。しかし、うまく動きません。中の処理がどうなっているのかわからないので、どこでつまずいているのかはわかりません。でも、動作が途中で止まってしまうようなので、原因を考えていきたいと思います。

仕方がないので、「ファイル」メニューから「スケッチ例」→「(Arduino UNO R4 WiFi用のスケッチ例)LED_Matrix」→「PlayAnimation」を開いて使うことにしました。「→(コンパイルと書き込み)」ボタンをクリックするとエラーもなく無事にコンパイルと書き込みが行われ、Animationが表示されました。これで、マトリクスLEDの初歩的な使い方わかりました。あとは、はじめに動作実験を行った「マトリクスLEDに時刻を表示する」プログラムがどうすれば動くのか、試行錯誤してみたいと思います。