リファレンスやTips
Arduino
Rabbit Pieは、Raspberry Pi Picoというマイコンボードをベースにしていてます。RP2040というマルチコアのプロセッサを搭載していて
Earle F. Philhower, III氏の作成したArduino-Picoというパッケージを使用することで、
Arduinoからマルチコアを使ったプログラミングがとても簡単にできます。
Rabbit Pieでグラフィックとサウンドを同時に扱う際にはそれぞれの処理をコアを分けて書くのがおすすめです。
基本的な処理はArduinoと同じなのでまずはArduinoのリファレンスを見てみましょう。
Arduino Reference
Arduino 日本語リファレンス - 武蔵野電波
// Running on core0
//ここにcore0の処理を書く
void setup() {
}
void loop() {
}
// Running on core1
//ここにcore1の処理を書く
void setup1() {
}
void loop1() {
}
u8g2 / Mozzi
OLEDを表示するグラフィックの処理にはu8g2、音声出力のサウンド処理にはMozziというライブラリをそれぞれ
使用しています。u8g2、Mozziについては以下のリファレンスを参照してください。
u8g2reference
Mozzi learn
Fendoap氏によるMozziのドキュメントの日本語訳

u8g2でビットマップ画像を扱う方法
1.ビットマップ画像の用意
u8g2でビットマップ画像を扱う方法を紹介します。まずはPhotoshopなどの画像処理ソフトでドット絵を描きます。 白い背景に黒で描画部分を描きます。実際にOLEDに描画される際は黒い部分が白く発光する部分になります。 u8g2ではビットマップ画像の拡大・縮小はできないので、あらかじめ画面サイズ(128x64)に対してどのくらいのサイズの画像を表示したいかを決めてから描きましょう。 右のサンプルの例は32x32pxのサイズです。描けたら、pngなどのピクセルが滲まない画像フォーマットで書き出しておきます。

2.画像をxbmフォーマットに変換する
書き出したpngなどの画像をxbm(X BitMap)という形式に変換します。Photoshopなどからは直接描き出せないフォーマットなので、 ネットで「png xbm」などと検索すると右のような画像変換サイトがいくつか出てくるので、それを利用して変換してダウンロードします。

3.xbmファイルをエディタで開く
変換してダウンロードしたxbmファイルをテキストエディタやVSCode(Visual Studio Code)などで開きます。そうすると16進数の配列が見えます。 これをコピーして、Arduinoのコードに直接埋め込むことで描画することが出来ます。

4.Arduinoのコードに埋め込む
コピーした配列を、Arduinoのコードに埋め込みます。 static const unsigned char happy_mac[] U8X8_PROGMEM = {...};というような配列として記述し、 描画したい箇所で u8g2.drawXBM(48, 16, 32, 32, happy_mac);のように書いて描画します。 詳しいコードはサンプルファイルにある「03_bitmap_sample」を参照してください。
Mozziでサウンドファイルを扱う方法
1.サウンドファイルの用意
使用したいサウンドファイルをAudacity(波形編集ソフト)で開きます。ステレオ(2ch)の場合はモノラル(1ch)にします。 また、あまり長いファイルは再生できないので2-3秒以内に編集し、最後にフェードアウトなどつけておきます。 Audacityの環境設定から「プロジェクトのサンプリング周波数」を「その他」にした上で「16384」と設定します。 これはMozziのSTANDARDモードで扱えるサンプリングレートの上限から決まっている周波数です。
2.サウンドファイルの書き出し
編集し、サンプリングレートを変えたら、rawファイルとして書き出します。メニューから ファイル-> エクスポート -> オーディオをエクスポート を選択し、ヘッダーを「RAW(header-less)」、エンコーディングを「Signed 8-bit PCM」を選択して、任意のファイル名で書き出します。
3.サウンドファイルを配列に変換
↓以下のターミナルからの操作が面倒なので、Processing でアプリケーション化しました。
download app
Processing code
rawで書き出したサウンドファイルを、Arduinoのプログラムに埋め込むために変換します。変換にはMozziのライブラリに含まれる「char2mozzi.py」
というPythonのプログラムを使って変換を行います。「/Documents/Arduino/libraries/Mozzi-master/extras/python」にあります。
これを、以下のようにターミナルから実行します。
python3 char2mozzi.py metal.raw metal.h METAL 16384
以下説明です。
python3(pythonで実行) char2mozzi.py(実行するプログラム) metal.raw(入力するファイル) metal.h(出力される.hファイル) METAL(配列の名前) 16384(サンプリング周波数)
実際にはターミナルでは右の画像のようになります。ディレクトリが深いので実際には手で直接書かないでファイルをドラッグ&ドロップして入力します。 最後にエンターを押すと実行され、配列が記述された拡張子が.hのヘッダファイルが生成されます。
4.Arduinoのコードで読み込んで使用する
生成されたヘッダファイルを使用したいArduinoのプロジェクトフォルダ内に配置します。 サンプルでは「table」というディレクトリを作ってそこに配置しています。 #include "tables/metal.h" のようにincludeで読み込んで使用できるようになります。 実際のコードの例はサンプルにある「04_sleeping_rabbit」などを参照してください。