I2C接続 SSD1306 OLEDで文字描画テスト(ESP32、Arduino IDE) | a24a24a24のブログ

a24a24a24のブログ

アメピグ残党。
釣り、温泉、お出かけ、パソコン。最近、電子工作。

電子工作の人気部品で、

SSD1306という、0.96インチの表示器があります。

明るい表示、小型・軽量・省電力。I2C接続だと信号線は2本だけ。

 

 

しかし、Adafruit等の既存ライブラリは多機能な分

なんだか動作が遅かったり、ちらついたり、桁がズレたり、フォントが読みにくかったり、

微妙なものが多かったです。

 

「こっちは手っ取り早く文字が表示できりゃいいんだよ!」 ←本音

 

 

 

 

 

 

というわけで、ムダを省いて軽さを追及した、SSD1306表示プログラムを自作しました。

・Wire.hのみ使用

・英数字+記号、白黒反転表示

・横16×縦4文字限定

・差分表示で高速化

 

 

 

差分表示とは。「前回の表示との差だけ、書き換える」というやり方で、

昔のゲームで描画の遅さを補うために使われていた手法です。

 

文字はAtariをベースにしたフリーフォントを、自分が見やすいようにドット修正しました。

SSD1306の制御は、以下の記事を参考にさせて頂きました。

ArduinoでOLEDをライブラリ無しで表示してみる – imo Lab. (garchiving.com)

 

 

 

結果は以下の通り。

 

 

 

I2Cのクロック周波数=400kHzと800kHzで、以下を試しました。
①全画面書き換え ②差分で16文字程度(25%)書き換え ③差分で3文字程度(5%)書き換え
計測時間は誤差があるので目安程度で(右下の数値表示にかかる時間を含むため)


1フレーム(1画面)の表示にかかる時間は
400kHzで ①約65ミリ秒 ②約19ミリ秒 ③約4ミリ秒
800kHzで ①約41ミリ秒 ②約12ミリ秒 ③約2ミリ秒

最大負荷の全画面書き換えでも、15~24フレーム/秒で表示できるようです。

画面の変化が数文字程度ならば、200フレーム/秒以上の速度が期待できそうです。

 

 

もっさり遅いイメージだったI2C版 SSD1306で、機能をしぼって軽く速い表示ができました。

これでセンサの値やログを表示するのが楽になりそうです。