本当に……本当に私らしからぬモノを手に入れてしまったw
いや違う、手には入れるんです、いつも。
Arduino Uno、Wio Terminal、Raspberry Pi、IchigoJamなどなど…。ワンボードマイコンも含めると10個以上が使用待ちになってるかも。積みゲーならぬ積みマシン??
手に入れるものの、なかなか使う機会がやってこない。
そして…いつも「やってみようかな?」という高まった気持ちにブレーキを掛けるのが、IDE……いわゆる統合開発環境というモノ。
キライ……とか苦手……とかではなく、趣味に仕事に何度も何度も使っている。
TurboPascal、PowerC、CodeWarrior、VisualStudio、ここでは書けないけれども専用のアレとかコレとか。長くソフトウェア開発の仕事に携わっていると、そこの開発現場に合わせていろんなものを使う。
でも……使ってみて便利だと思ったことが一度もないのだ(-_-;;
IDEを使う…と言っても、使い慣れたEmacsをエディタとして使い、IDE自体はビルドツールとしてのみ使う。これがいつものパターンだ。デバッガじゃなくてROM Emulatorでいいじゃん…と自分でも思うw
いつもは逃げてばかりだけど、今回はちょっと頑張ってみよう…!と思った!
M5Stack Core2
実は発売当時からものすごく気になっていたM5Stack。いつも千石電商で見るたびに手にとっていたんだけど、「BASIC」「Gray」など種類があって何を選択したら良いのかさっぱりわからん!となっていた。どれでもいいやとばかりにレジまで持っていき、やっぱ辞めよう…どうせ使わない…と繰り返す事数10回!(^^;;
そしてCore2が発売された時も手に入れようと思っていたが、やっぱ躊躇してたw
最新のマシンなんて使いこなせないし、作りたいものもないし。
さんざんっぱら悩んだけど、今回は手に入れた!(^^;
そして手に入れた初日に箱から開けなかったら、きっと数年は開けないと思ったので気合を入れて開梱!(そこまで?)
実際、M5Stackがどんなもので何が出来るのか、あんまり理解していなかった。この大きさでいろんなセンサーが入っている…くらいの知識。ロボット的なものに取り組んでいる方には便利なのかも??
そして本体を取り出して、多分充電が必要なんだろうなー…と思ってUSBを繋げたところ、いきなり電源が入ってこの画面。なんだろうな……エヴァ○ゲリオンを思い出す(^^;;
いろんなハードウェアの状態を表示しているんだろうけれど、初めてM5Stackを使う私には、何がなんだかさっぱり分からない。まぁ…あとで見たらいいか…。
Webを参考にしながらArduino IDEをインストールしてみる。そうか、M5StackってArduino系なんだ(こんなことも知らずに手に入れたヤツ)。これで慣れたらArduino Unoも使えるって事なのかな…それはそれで助かる!
IDEを起動したら……あ、なるほど、こういう画面になるワケね(^-^;;
れっつプログラミング!
とりあえずネットに書かれていたHello Worldを表示するプログラムを入力。
ビルドしてみるけどエラーの連続(T_T)
私の環境にはArduinoの開発環境が入ってなかったので、その辺りですっ飛ばされた説明の部分に引っかかってしまった模様。ここで挫折しちゃう人も多そうだなぁ…と思いつつも、あれこれ調べてみて、ようやく表示された!
Hello Worldを変更しながら実験しつつTwitterにご報告したのが↓この写真。
テキストを表示するだけだったら、とても簡単にプログラミング出来る!
これに加えてシリアル側にも情報を出力できる(Serial.printfなど)ので、デバッグでものすごく使えそう。
他にもいくつかの関数をテスト見たり。
プログラムはC++で書ける上に豊富なライブラリが用意されているため、何か作る事に対して困る事がほぼない。困る…というか「コレはどうだろ?」と思うのは、やれる事が豊富にありすぎて、やりたい事に対して「どういうアプローチが最適なのか」を調べるのが苦労する(^^;
とりあえず絵を表示してみよう…と思ってフレームバッファを用意してそこにプログラムで画像を描き、表示させる…という、いつもの手順をしようと思った。
…んが、どうにもうまくいかない。どうやら画面は2バイト1ドットの構成らしかったので、普通にuint16_tを320x240ドット分newして…とかやってもうまく動かない。この「動かない」理由が分からない(T-T)
newするのを辞めてmallocするかーってしても、やっぱり動かない。メモリ確保に失敗してるのかと思いきや、どうもそういう事情でもなさそう。でも動かない。はて???
nint16_t *v = heap_caps_malloc(sizeof(uint16_t) * 320 * 240, MALLOC_CAP_DEFAULT);
としてようやく動くようになった。
これで何故動くのかもさっぱり意味不明(T-T)
手探りというよりは流れに任せっぱなしのプログラミングだ!理屈を理解できてないプログラム=自分を信頼出来ない事ほど危険なモノはない(^^;;
とりあえずフレームバッファを塗って表示させたのがこれ↓
M5Stack Core2でプログラミング!
— PocketGriffon (@GriffonPocket) 2021年8月31日
やっとビットマップを扱えるようになった。フレームバッファのサイズがmalloc出来なくて苦労してたw
書き換えが見えちゃってる気がするけど、そーゆーものかな…きっと遅い関数呼び出してるだけかも?
ちょっと楽しくなってきた(^ ^) pic.twitter.com/pQQIsiMCdC
ゼビマップを表示させてみる!
せっかくカラーが表示できる液晶モニタなんだから、何かを表示させてみたい!
というわけで、以前TI-84 Plus CEで表示させていたアレをやってみよう!
この時に利用してたデータをそのまんま使って、M5Stackでも表示させてみる。
実は、この当時に使っていたMacとは「違うMac」を使っている関係上、当時のビルド環境が失われている。これを復活させるのにはホネが折れそうだったので、TI-84 Plus CEに読み込ませていたバイナリデータをそのまま利用する事にした。
TI-84 Plus CEとM5Stackとではグラフィックのフォーマットが違っているため、これはもうM5Stack内部で変換しつつ表示する事にした。マップデータ(BG、キャラクタ、パレット)はプログラム中に入れるのではなく、SDカードへ置いて実行時に読み込ませるようにしてみた。
おかげでSDへのアクセスを覚えることが出来た(^^;;
やっと表示できた!(^-^)
色のデータフォーマットがTI-84 Plus CEとは違っているので、これは初期化時に変換、カラーインデックスは描画時に解決しながら進めている。そのため描画が激重だ(T-T)
その激重状態でスクロールさせてみたのがこちら↓
M5Stack Core2でゼビ○スマップをスクロールさせてみた。
— PocketGriffon (@GriffonPocket) 2021年9月1日
ちなみにこれでほぼ最高速度。最適化はコンパイラには頑張ってもらってるけどプログラム的な工夫はゼロの状態。
画面更新がそんなに速くないのは、間違いなく自分のスキル不足です(ーー;) pic.twitter.com/RkNAyZyISX
マップの描画も重たいけれど、スクロール(メモリコピーしまくり)と画面描画(drawBitmap)の方が何倍も処理掛かってる気がする…。
外部エディタを使えるよう設定ができたおかげで、慣れたEmacsを使えるようになった。
やっぱり…Arduino IDEがビルド+ローダーになってしまった感は否めない…。ちょっと楽しくなってきたので、もう少しだけプログラムしてみようかなって気になっている。
PC-G850Vも中途半端になってるので、戻らないと…汗
ではまた次回!(^-^)ノ