🌞
有機ELディスプレイ(OLED)の使い方
部品
項目 | 値 |
---|---|
制御方式 | I2C |
解像度 | 128x64 |
電源電圧 | 3.3 〜 5 V |
アドレス | 0x78 or 0x7A |
ググるとみんなアドレス 0x3C
を使っていた。秋月電子のスペック表記が間違っているのかと思ったが、そうではなく 0x78
なら 0x3C
で 0x7A
なら 0x3A
になるらしい。いったいどういうことだ?
配線
モジュール側 | Arduino側 |
---|---|
SCL | A5 |
SDA | A4 |
ライブラリで指定する場所がなかったのでどことどこを繋ぐかは決まっているようだ。
ライブラリ
ドキュメント
コード
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DebugLog.h>
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(128, 64, &Wire);
void setup() {
int value = display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS);
ASSERT(value);
}
int count = 0;
void loop() {
display.clearDisplay();
display.setCursor(0, 0);
display.println(count);
int x = display.width() / 2 + cos(2 * PI / 60 * count * 3) * display.width() * 0.4;
int y = display.height() / 2 + sin(2 * PI / 60 * count * 4) * display.height() * 0.4;
display.drawCircle(x, y, 24, SSD1306_WHITE);
display.display();
count += 1;
delay(1000 / 60);
}
- ライブラリのおかげで抽象化されたメソッドを呼ぶだけで制御できる
- 描画メソッドは内部バッファに書き込む
- 内部バッファは
display()
で反映する (見えるようになる) -
drawPixel
でドットを打てる - テキストも書ける
-
setCursor(x, y)
はドット単位で指定する - 半角カナは使えない
-
- アニメーションは想像していたよりかなり速い
- 20FPSはでる
- 円を書く
drawCircle
が重いだけ?
結局 0x3C はどこから来た値なのか?
ChatGPT に聞いてみた結果
0x3C は、一般的に OLED ディスプレイの通信相手を識別するために使用されるアドレスである。
具体的には、0x3C は OLED のコントローラチップ SSD1306 と通信するためのアドレスである。
SSD1306 の名前を伝えずに SSD1306 がでてくるってことは SSD1306 の固有アドレスってことなんだろう。
参考
Discussion