「画像を表示するなら、データを16進数の配列『PROGMEM』に変換しろ」
AIから投げられた次なる課題は、令和の時代とは思えない「メモリの節約術」だった。 現代のPCなら画像ファイルを指定するだけで済む話だが、マイコンの世界では、画像は「0」と「1」の羅列に分解し、あらかじめメモリ上に展開しておく必要があるらしい。
まるでファミコン初期のプログラマーのような制約の中、私は仏様のドット絵をデータ化する作業に挑んだ。
1. マイコンのメモリは「令和のファミコン」?
調べてみると、ESP32のような高性能なマイコンであっても、画像データをそのまま扱うのは荷が重いようだ。 128×64ピクセルの小さな世界に画像を描くには、画像をドット単位で数値化(16進数配列)し、プログラムの一部として組み込む「PROGMEM」形式が一般的とのこと。
限られたリソースでやりくりするこの感覚、かつての職人プログラマーたちの苦労が偲ばれる。
2. AIによるリサイズと「ラーメンマン」事件
まずは、AIに画像のリサイズとデータ変換を頼んでみることにした。

この仏様のドット絵を64×64ピクセルにして、PROGMEM形式で出力してくれ

ところが、返ってきた配列を見て違和感を覚える。16進数のはずが、見たこともない文字が混ざり、数も合わない。

……いや、1ドットを『0』か『1』で表現してくれ。ソース上でドットの形が見えるように、Pythonの2次元配列 ary[64][64] で頼む

なるほど!ドット絵の形をコード上で再現したいのですね。お任せください(ドヤっ)


….
……全然違う。 慈悲深い仏様が、どこか悲しげな「ラーメンマン」に成り果てている。 AIとの不毛なやり取りに限界を感じた私は、自力で解決策を探すことにした。
3. 救世主「image2cpp」の登場
ネットの海を捜索した結果、ズバリ目的通りの神サイトを発見した。 それが、image2cpp だ。
このサイトを使えば、画像のリサイズから、OLED(SSD1306など)で読み込めるPROGMEM形式への変換まで一気通貫で行える。
【image2cppの使い方】
- Image Upload: 作成したドット絵をアップロードする。

2. Settings: 解像度(今回は64×64など)を設定し、プレビューを確認。

3. Output: 「Code output format」を Arduino Code にして生成。

無事、以下5枚のAIで作成した画像データをPRGMEM形式へ変換することができた。

4. ディスプレイに仏が降臨する
生成された配列をスケッチに貼り付け、ESP32へ書き込む。 張り詰めた空気の中、0.96インチの小さな画面に光が灯った。

できた。
心なしか、ドットの隙間から仏様の後光が差しているように見える。AI(ラーメンマン)の迷走を乗り越えた達成感はひとしおだ。
途中AIとの不毛なやりとりがあったような気がするが、無事画像の表示まで辿り着けた。これでハードウェア側の準備はほぼ整った。 次回、「【通信編】AIは今、機嫌が良いのか?API経由でスコアを取得する」。 いよいよ、このデバイスに「魂(AIの機嫌)」を注入する工程に入る。

