Arduino環境で透過OLEDを使う(SSD1306)

コンピュータ、組み込み

透明なディスプレイになる透過型OLED(SSD1306)を使ってみます。
制御はこれまで紹介してきたOLEDと同じすが、透過であることで未来感を感じます。

今回紹介するもの

SSD1306透過OLED 1.54inch

特徴

I2C通信により制御します。(Reset端子を使います)
透過型なので、反対側からも鏡写しで見ることができます。

電源電圧5V
通信I2C
リセット端子を使います
I2Cアドレス 3C(h)
発色

この基板の場合は、Reset端子の設定をすることで動作します。

ピン配置

7pinありますがI2Cで、画像の5ピンをI2Cで使用します。
RESET端子をマイコンで制御する必要があります。

外観

表示部は極細の配線のようなものが見えていて遠目からは若干薄黒くなっていますが、それでも十分透過してみえます。
それ以上に表示部の反射率が高く、ハーフミラーのように手前の物の映り込みが気になります。

1.54inchのOLED SSD1306のフレキシブルケーブルは着脱することができます。
これまで紹介してきたOLED SSD1306の1.54inchには SPI通信で制御するものとI2Cで制御するものがありました。

今回紹介する透過OLEDはAli Expressでセット販売(基板だけ、または表示パネルだけ販売もあります)されていたものですが、表示パネルと基板を入れ替えて使用することもできます。

下図は1.54inch SPI通信で制御するOLED SSD1306の基板に、透過OLEDの表示部をはめかえた図です。このままSPI通信で透過表示をすることができます。
非透過のI2C制御1.54inch OLED SSD1306の場合は、Reset端子を使わないで表示制御することもできます。

左から透過OLEDのセット販売、SPI通信、I2C通信のOLED SSD1306です。
右二つは接着剤や両面テープで表示部が固定されていますが、根気よくはがすことで入れ替えて使用することができます。

I2Cで使う小型のOLED

SPIで使うOLED

使用感

使い方としては、I2Cで制御するOLED SSD1306 と同じ使い方ができるので、経験があればすぐに使用することができます。
今回使った緑色の基板もI2Cですが、リセット端子を設定しないと動作しないので注意点です。

表示すると鮮やかに青で発色します。
表示部が半鏡面状になっているので透過背景は少しコントラストが下がって見えますが、十分透過認識できます。
1.54inchあるので、文字を表示しても大きく見えて視認性があります。

取り扱いには注意が必要です。
基板に表示部は接着されていないのでプラプラの状態です。
ガラス素材になると思いますが落下させたり、ぶつけるなど衝撃を与えると破損しやすいと思うので、取り扱いに慎重さが必要です。

準備

使うもの

画像名称、型番用途
透過OLED 1.54
SSD1306
透過文字を表示してもらいます。
Raspberry Pi PicoSSD1306を表示制御します。
ブレッドボード配線します
ジャンパワイヤ数本
オス-オス
配線します

ライブラリ

ライブラリマネージャから以下2件のライブラリをインストールします。
SPI、I2Cのどちらで通信する場合も同じライブラリを使用します。

ライブラリ名検索確認時のバージョン
Adafruit SSD1306 by AdafruitSSD13062.5.1
Adafruit GFX LibraryGFX1.11.1

動作

メッセージ表示

説明

OLEDにテキスト表示をします。

配線
Raspberry Pi Pico配線SSD1306
VBUS(5V)VCC
GNDGND
GPIO0 (I2C0 SDA)SDA
GPIO1 (I2C0 SCL)SCL
GPIO28RESET
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
Raspberry Pi Pico

【スケッチの説明】
SSD1306 OLEDの制御をします。
I2Cは I2C0とI2C1のどちらのサンプルも掲載しますが、
I2C1側はコメントアウトしますので、状況に応じてコメントを外してください。
※コメント検索 [I2C1の場合]

【ライブラリ】
Raspberry Pi Pico / RP2040 > Raspberry Pi Pico

【準備】
マイコン基板 <-> SSD1306
3V3             <-> VCC
GND             <-> GND
GPIO0(I2C0 SDA) <-> SDA
GPIO1(I2C0 SCL) <-> SCL
GPIO28          <-> RESET

【バージョン情報】
2023/7/15 : 新規
**********************************************************************/

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


#define PIN_SDA 0
#define PIN_SCL 1

#define SCREEN_WIDTH 128                //解像度 128 x 64 で使用します。
#define SCREEN_HEIGHT 64                //SCREEN_HEIGHTは 32 に設定することができます。

#define OLED_RESET     28               //透過OLED(緑基板)のI2Cではリセット端子を使用する。
#define SCREEN_ADDRESS 0x3C             //I2Cアドレスは 0x3C

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);     //I2C0の場合
//Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire1, OLED_RESET);     //I2C1の場合

                                        
void setup()
{
  
  // //I2C0の場合
  Wire.setSDA(PIN_SDA);
  Wire.setSCL(PIN_SCL);

  //I2C1の場合
  // Wire1.setSDA(PIN_SDA);
  // Wire1.setSCL(PIN_SCL);


  if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
    for(;;);
  }

  display.clearDisplay();               //何か表示されている場合に備えて表示クリア

  display.setTextSize(2);               //フォントサイズは2(番目に小さい)
  display.setTextColor(SSD1306_WHITE);  //色指定はできないが必要
  display.setCursor(20, 0);            //テキストの表示開始位置
  display.print(F("TAMANEGI"));         //表示文字列
  display.setCursor(15, 25);
  display.print(F("OLED 1.54"));
  display.setCursor(25, 45);
  display.print(F("SSD1306"));

  display.display();                    //バッファ転送(表示)
}

void loop()
{
}
結果

表示できました。
透過していることで反対側からも表示文字が確認できます。
(結果動画の撮影時、スケッチ間違いで0.96と表示していますが1.54inchです。)

コメント

タイトルとURLをコピーしました