AI要約
128×64、白色表示のOLED「SSD1306」をArduinoに接続し、Adafruit SSD1306で制御しました。テキストと波形グラフを描画し、左上を原点とする画面座標系を確認しました。
やること
有機LED(OLED)を用いたI2C制御のディスプレイモジュール「SSD1306」を買いました。解像度は128×64で、描画色は「白のみ」です。

0.96インチ 128×64ドット有機ELディスプレイ(OLED) 白色: オプトエレクトロニクス 秋月電子通商-電子部品・ネット通販
電子部品,通販,販売,半導体,IC,LED,マイコン,電子工作0.96インチ 128×64ドット有機ELディスプレイ(OLED) 白色秋月電子通商 電子部品通信販売
試しに動かしてみましょう。
コード
Arduino IDEで「Adafruit SSD1306」をインストール。
次のように配線。
| Arduino Uno | SSD1306 |
|---|---|
| GND | GND |
| 5V | VCC(※3.3~5V対応) |
| A5 (=SCL) | SCL |
| A4(=SDA) | SDA |
テキストとグラフ描画のために以下のコードにしました。配列の先頭から新しい値を入れて、既存の値は後ろにずらしています。
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.display();
}
int a = 0;
int wave[SCREEN_WIDTH];
void loop() {
// 波形を1個ずつずらす
for (int i = SCREEN_WIDTH - 1; i > 0; i--) {
wave[i] = wave[i - 1];
}
// aを1増やす
a++;
// 32で0に戻す
if (a >= 32) {
a = 0;
}
// 最新のaを0番目に入れる
wave[0] = a;
// Arduinoバッファクリア
display.clearDisplay();
// テキスト描画
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 10);
display.println(a);
//グラフ描画
for (int x = 0; x < SCREEN_WIDTH; x++) {
//y軸を反転する
int y = (SCREEN_HEIGHT - 1) - wave[x];
display.drawPixel(x, y, SSD1306_WHITE);
}
// SSD1306へ転送
display.display();
}座標系は画像処理のセオリー通り左上が原点、右にx、下にyですね。ディスプレイの一番左が現在の値です。
おわりに
実はこれで自作キーボード関連のツールを作りたいんですよね~
次回をお楽しみに ( ˘ω˘ ) ネテマテ


