2017-08-21

SSD1306 OLED ディスプレイをテスト

SSD1306を使用した安価なOLEDディスプレイモジュール。
インターフェースやカラー、サイズ違いで様々なバリエーションが流通しているが今回は0.96インチ 128x64 ホワイトをテスト。

セットアップ

動作確認としてライブラリにバンドルされている色々なフォントを表示してみる。

以下を用意。

  • SSD1306 SPI 0.96inch OLEDディスプレイ
  • Arduino Nano

SDAをA4にSCLをA5に接続する。VCCは5Vを使用。

コード

完全版はGitHubから。
Adafruit GFX LibraryAdafruit SSD1306ライブラリを使用。

SSD1306モジュールのバリエーションに応じてAdafruit SSD1306ライブラリを改修する必要があるので注意。

#include <Arduino.h>

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

const int OLED_RESET = 4;

Adafruit_SSD1306 display(OLED_RESET);

void testFont(String name, const GFXfont * font, int offset) {
  display.clearDisplay();

  display.setTextSize(1);
  display.setTextColor(WHITE);

  // NOTE: classicとフォント指定時で描画位置決定の挙動が異なる (classic=左上, new=ベースライン)

  // classic font (built-in)
  display.setFont(NULL);
  display.setTextWrap(false);
  display.setCursor(0, 0); //
  display.println(name);

  // new font
  display.setFont(font);
  display.setTextWrap(true);
  display.setCursor(0, 20 + offset);
  display.println("The quick brown fox jumps over the lazy dog. 1234567890");

  display.display();

  delay(5000);
}

void setup()   {
  display.begin(SSD1306_SWITCHCAPVCC, SSD1306_I2C_ADDRESS);

  // スプラッシュロゴ表示
  display.display();
  delay(3000);
}


#include "font/FreeMono9pt7b.h"
#include "font/FreeSans9pt7b.h"
#include "font/FreeSerif9pt7b.h"
#include "font/Org_01.h"
#include "font/Picopixel.h"
#include "font/TomThumb.h"

void loop() {
  testFont("FreeMono9pt7b", &FreeMono9pt7b, 14);
  testFont("FreeSans9pt7b", &FreeSans9pt7b, 16);
  testFont("FreeSerif9pt7b", &FreeSerif9pt7b, 16);
  testFont("Org_01", &Org_01, 7);
  testFont("Picopixel", &Picopixel, 7);
  testFont("TomThumb", &TomThumb, 8);
}

結果

解像度の低さは気になるが白物家電等の液晶に比べると鮮やかに発光して視認性は良好。 値段も安いので、何個かストックしておくと良いかも。