Aliexpressでよく1.3inchのOLEDを買っている。秋月で売っているこいつの少し大きい版みたいなやつ。
こいつが微妙なバージョン違いがある。
買ったやつはうらの金色の配線(フレキシブルフラットケーブル)に型番が書いてある。(aliの写真で見る限り書いていないやつなど色々ありそう)
で手元にあるのはGME12864-70,GME12864-71,GME12864-77の3種類。なお、色と型番紐ついているかわからないけど(型番のとこに色も書いていたので色ごとに型番っぽい)70と77は白の、71は青のOLED文字色。
供給元と思われるとこのページをみると
GME12864-70のドライバはCH1116G/SH1106。
GME12864-77のドライバはSSD1315。しかも1.3inchでなく1.29inchらしい。
GME12864-71はページがないのでわからない。(後継っぽいGME12864-73があるけどそっちはI2Cがないタイプなので色々違いそう。)
GME12864-70,GME12864-71はAliで売っている互換Arduino NanoとAdafruit_SH1106.hの組み合わせで安定して動いている。
GME12864-77
GME12864-77はAdafruit_SH1106.hだと不安定というかすぐにとまる。Adafruit_SH110X.hだと動いている。
Adafruit_SH1106はAdafruit公式のOLEDに合わせてチューニングしているやつらしい。ちょっとパラメータが違うとダメっぽい。
なお、ラズピコや自作基盤のArduino互換機ではAdafruit_SH1106でも動くっぽい。
SSD1315と互換のあるSSD1306と互換のあるSH1106として動かしている状況なので色々無理が出るという状況っぽい。
ちゃんとするなら、ハードに合わせて使用ライブラリを交換するのがよいけど互換Nanoだとメモリが少ないのでOLEDライブラリ変えるとそれはそれでメモリ不足とか大変
Adafruit_SH110X
Adafruit_SH110Xライブラリの中のAdafruit_SH1106GはAdafruit_SH1106ライブラリのなかのものより若干メモリ使用量が多い模様。
メモリが足りない時に初期化でメモリ確保に失敗することがあるけど(ここ)、beginの中で戻り値を確認していないのですこしあとで死ぬ。多分続くdrawBitmapかoled_commandListで初期化されていないi2c_devを呼ぼうとした当たり。