RaspberryPi Picoに使われているマイコンチップRP2040は、100円ちょっとと安価で、デュアルコアで性能もよく、ATMEGA328Pの後継としてほぼ確定的と思ってます。現時点で2030年までは提供しますと宣言していますし、人気の高いマイコンに既になっているので、今後の普及は十分にあると思います。そんな中で、MP3再生できるライブラリがあるらしいので、さっそく、コンパイルまで通してみました。また、ファイルシステムへの書き込みツールの導入も行いました。
何を意図しているかというと、DCCデコーダでMP3再生できたら楽しいかな、ということです。つまり、N社のあれをRP2040で再現できないか、ということですね。
ESP8266Audio ライブラリの導入
RP2040用に、ESP8266Audioというライブラリが提供されていますので、Arduino IDEのライブラリマネージャ(メニューのツール→ライブラリの管理 で開けます)で導入します。
実はそのままだとSPIFFSというファイルシステム用ライブラリが無いと言われてコンパイルが通らないです。LittleFSというほとんど同じ機能を持つライブラリが、RP2040向けに移植されているので、こちらを使うようにちょっと直すのが正解です。下記は、ESP8266AudioのGithubページにある例を、LittleFS用に直しただけです。
#include <Arduino.h>
#include "AudioFileSourceLittleFS.h"
#include "AudioGeneratorMP3.h"
#include "AudioOutputI2SNoDAC.h"
AudioGeneratorMP3 *mp3;
AudioFileSourceLittleFS *file;
AudioOutputI2SNoDAC *out;
void setup()
{
Serial.begin(115200);
delay(1000);
LittleFS.begin();
file = new AudioFileSourceLittleFS("/jamonit.mp3");
out = new AudioOutputI2SNoDAC();
mp3 = new AudioGeneratorMP3();
mp3->begin(file, out);
}
void loop()
{
if (mp3->isRunning()) {
if (!mp3->loop()) mp3->stop();
} else {
Serial.printf("MP3 done\n");
delay(1000);
}
}
なお、あらかじめ、RP2040用のボードライブラリもボードマネージャから導入しておきましょう。
コンパイルを通した結果と、ボード設定は下記のようにしてます。
ファイルシステムへのアップロードツール導入
RP2040に繋げるフラッシュメモリは、スケッチを書き込むROMエリアのほかに、ユーザーがファイルを書き込めるファイルシステムを構築することができます。上記では1MBずつに分割しています。FlashSize 2MB(Sketch 1MB, FileSystem 1MB)と書いてあるのが、見えると思います。さっきからSPIFFSだの、LittleFSなど言ってるのは、ユーザーが書き込めるエリアであるファイルシステムにアクセスする方法の話をしていたわけです。ESP系のマイコンはSPIFFSらしいですが、RP2040はLittleFSが正解です。
それでは、ArduinoIDEからそのエリアにどうやって書き込むのかというと、ツールを入れる必要があります。これも便利なツール「Arduino Pico LittleFS Filesystem Uploader」が提供されているので大丈夫です。
公開されているjarファイルの入ったZIPをダウンロードし、解凍し、私の環境だと「C:\Program Files (x86)\Arduino\tools\PicoLittleFS\tool」の中にコピーすれば、下記のツールメニューのところに「Pico LittleFS Data Upload」という項目が増えます。そして、スケッチのフォルダの下にdataというフォルダができるので、ここにファイルを入れておくとコピーできるようになるそうです。便利ですね!!サウンドデータをここに置く感じになりそうですね。