小型のOLEDディスプレイSSH1106を使ってみました。
SSD1306 0.96inchより一回り大きい表示パネルです。
今回紹介するもの
OLED SSH1106(1.3inch)
特徴
OLED SSD1306 0.96inchより一回り大きいため視認性が高いです。
I2Cで制御できますが、SSD1306 I2Cモデルと配線が違います。
ライブラリもSSD1306とよく似ていますが、SSH1106専用のライブラリが必要です。
サイズ | 1.3inch |
解像度(X, Y) | 128, 64 |
表示色 | 白、青、黄、黄+青 黄+青の場合、それぞれのエリアが決まっていて、 色の変更はできないようです。 |
電源電圧 | 3.3 – 5.0V |
通信方式 | I2C(アドレスは 0x3c, または0x3dのどちらかを選択) ※SPIもありますが、この記事ではI2Cの紹介 |
ドライバ | SSH1106 |
I2Cアドレス | 0x3C(デフォルト)または、チップ抵抗を移動させることで0x3D |
入手 | 電子部品ショップ、ネットショップ 入手性は非常に良く、安く大量買いする場合はAli Express |
本記事でSSH1106を2種類紹介します。
SSH1106ドライバを使った1.3inchOLEDは他にもいくつか販売されていますが、ほとんどがSSD1306と比べると電源とGNDのピン配置が違います。
購入する前にピン配置をよく確認してください。
ピン配置
DIY MOREのOLEDです。
こちらは、SSD1306と同じピン配置です。
こちらははSSH1106でよく見かけるタイプのピン配置です。
外観
こちらはDIY MORE製のSSH1106です。
こちらはSSH1106でよく見かけるタイプのピン配置です。
SSD1306とは電源とGNDが逆なので注意。
SSD1306の0.96inchと1.54inchと表示を比べてみました。
縦横解像度は同じですが、1pixelが大きくなっているため0.96inchより見やすいです。
左から、SSD1306-0.96inch、SSH1106-1.3inch、SSD1306-1.54inchです。
使用感
0.96inchより大きいため視認性が良く、1.54inchより小さいですが価格が安い。
サイズも価格も中間のモジュールです。
ライブラリにはAdafruitを使用していますが、SSD1306とはライブラリが異なります。
宣言箇所箇所と初期化関数のパラメータが違いますが、描画関数の仕様は同じようですので親和性は高めだと思います。
同じライブラリであれば尚よかったと思います。
SSH1106 1.3inchにはピン配置が2種類あり、購入前によく確認する必要があります。
余談ですが、今回紹介した2種類以外にもう1種類所有してます。
ピン配置はよく見かけるパターンのものと同じですが、I2Cアドレスの変更ができないタイプもあります。
OLEDを複数使用する場合は、I2Cアドレスが重複してしまうので不利になります。
準備
使うもの
画像 | 名称、型番 | 用途 |
---|---|---|
OLED 1.3inch SSH1106 | 表示します。 今回紹介したDIY MORE製と ピン配置の違うもう一種類を使用します。 | |
RP2040-A | SSH1106を制御します。 RaspberryPi Pico互換基板を使用します。 | |
ブレッドボード | 配線します | |
– | ジャンパワイヤ数本 オス-オス | 配線します |
ライブラリ
ライブラリマネージャから以下2件のライブラリをインストールします。
SPI、I2Cのどちらで通信する場合も同じライブラリを使用します。
ライブラリ名 | 検索 | 確認時のバージョン |
---|---|---|
Adafruit SSH110X by Adafruit | OLED | 2.1.8 |
Adafruit GFX Library | GFX | 1.11.9 |
動作
表示制御(1個)
説明
RP2040-Aを使いSSH1106 OLEDを制御します。
そのほかの図形描画サンプルは、Arduinoサンプルを参照してください。
ファイル(F) > スケッチ例 > Adafruit SH110X > OLED_QTPY_SH1106 > SH1106_128x64_i2c_QTPY
配線
RP2040-A | 配線 | SSH1106 |
---|---|---|
3.3V | 赤 | VCC |
GND | 黒 | GND |
GPIO0(I2C0 SDA) | 青 | SDA |
GPIO1(I2C0 SCL) | 黄 | SCL |
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/
【マイコン基板】
RaspberryPi Pico
【スケッチの説明】
SSH1106 OLEDを制御します。
【ライブラリ】
Raspberry Pi Pico / RP2040 > Raspberry Pi Pico
Adafruit SSH110X by Adafruit
Adafruit GFX Library by Adafruit
【準備】
マイコン基板 <-> SSH1106(I2C address 0x3c)
3V3 <-> VCC
GND <-> GND
GP0(I2C0 SDA) <-> SDA
GP1(I2C0 SCL) <-> SCL
【バージョン情報】
2023/10/28 : 新規
**********************************************************************/
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_SH110X.h>
#define PIN0_SDA 0 //0.96, 1.54inch用I2C
#define PIN0_SCL 1
#define SCREEN_WIDTH 128 //解像度 128 x 64 で使用します。
#define SCREEN_HEIGHT 64 //SCREEN_HEIGHTは 32 に設定することができます。
#define OLED_RESET -1 //使用しないので -1を設定する。
#define OLED_13 0x3c //1.3inch I2cアドレスは 0x3c
Adafruit_SH1106G display13 = Adafruit_SH1106G(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup()
{
// //I2C0の場合
Wire.setSDA(PIN0_SDA);
Wire.setSCL(PIN0_SCL);
display13.begin(OLED_13, true); // Address 0x3C default
display13.clearDisplay(); //何か表示されている場合に備えて表示クリア
display13.setTextSize(2); //フォントサイズは2(番目に小さい)
display13.setTextColor(SSD1306_WHITE); //色指定はできないが必要
display13.setCursor(20, 0); //テキストの表示開始位置
display13.print(F("TAMANEGI")); //表示文字列
display13.setCursor(20, 25);
display13.print(F("OLED 1.3"));
display13.setCursor(25, 45);
display13.print(F("SSH1106"));
display13.display(); //バッファ転送(表示)
}
void loop()
{
}
結果
SSH1106に文字を表示できました。
サイズが違う以外にSSD1306との差異は見られません。
表示制御(2個)
説明
RP2040-Aを使いSSH1106を2個表示します。
I2Cアドレスは両方ともに0x3cを使用します。
片方はI2C0を使用し、もう片方にはI2C1を使用します。
配線
本記事で紹介した、DIY MOREのSSH1106と、よく見かけるSSH1106を使用しています。
電源とGNDのピン配置が違うのでよく確認して配線してください。
RP2040-A | 配線 | SSH1106 | 配線 | SSH1106 |
---|---|---|---|---|
3.3V | 赤 | VCC | 赤 | VDD |
GND | 黒 | GND | 黒 | GND |
GPIO0(I2C0 SDA) | 青 | SDA | ||
GPIO1(I2C0 SCL) | 黄 | SCL | ||
GPIO2(I2C1 SDA) | 緑 | 緑 | SDA | |
GPIO3(I2C1 SCL) | 橙 | 橙 | SCL |
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/
【マイコン基板】
RaspberryPi Pico
【スケッチの説明】
SSH1106 OLEDを制御します。
I2C0 と I2C1を使い2個のOLEDを別々に制御します。
使用するOLEDのI2Cアドレスは2個ともに0x3cです。
【ライブラリ】
Raspberry Pi Pico / RP2040 > Raspberry Pi Pico
Adafruit SSH110X by Adafruit
Adafruit GFX Library by Adafruit
【準備】
マイコン基板 <-> SSH1106(I2C address 0x3c)
3V3 <-> VCC
GND <-> GND
GP0(I2C0 SDA) <-> SDA
GP1(I2C0 SCL) <-> SCL
マイコン基板 <-> SSH1106(I2C address 0x3c)
3V3 <-> VCC
GND <-> GND
GP2(I2C2 SDA) <-> SDA
GP3(I2C3 SCL) <-> SCL
【バージョン情報】
2023/10/28 : 新規
**********************************************************************/
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_SH110X.h>
#define PIN0_SDA 0
#define PIN0_SCL 1
#define PIN1_SDA 2
#define PIN1_SCL 3
#define SCREEN_WIDTH 128 //解像度 128 x 64 で使用します。
#define SCREEN_HEIGHT 64 //SCREEN_HEIGHTは 32 に設定することができます。
#define OLED_RESET -1 //使用しないので -1を設定する。
#define OLED0_13 0x3c //I2c0に使用するアドレスは 0x3c
#define OLED1_13 0x3c //I2c1に使用するアドレスは 0x3c
Adafruit_SH1106G display0 = Adafruit_SH1106G(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Adafruit_SH1106G display1 = Adafruit_SH1106G(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire1, OLED_RESET);
void setup()
{
//I2C0
Wire.setSDA(PIN0_SDA);
Wire.setSCL(PIN0_SCL);
//I2C1
Wire1.setSDA(PIN1_SDA);
Wire1.setSCL(PIN1_SCL);
display0.begin(OLED0_13, true); // Address 0x3C default
display0.clearDisplay(); //何か表示されている場合に備えて表示クリア
display0.setTextSize(2); //フォントサイズは2(番目に小さい)
display0.setTextColor(SSD1306_WHITE); //色指定はできないが必要
display0.setCursor(20, 0); //テキストの表示開始位置
display0.print(F("TAMANEGI")); //表示文字列
display0.setCursor(5, 25);
display0.print(F("OLED_0 1.3"));
display0.setCursor(25, 45);
display0.print(F("SSH1106"));
display0.display(); //バッファ転送(表示)
display1.begin(OLED1_13, true); // Address 0x3C default
display1.clearDisplay(); //何か表示されている場合に備えて表示クリア
display1.setTextSize(2); //フォントサイズは2(番目に小さい)
display1.setTextColor(SSD1306_WHITE); //色指定はできないが必要
display1.setCursor(20, 0); //テキストの表示開始位置
display1.print(F("TAMANEGI")); //表示文字列
display1.setCursor(5, 25);
display1.print(F("OLED_1 1.3"));
display1.setCursor(25, 45);
display1.print(F("SSH1106"));
display1.display(); //バッファ転送(表示)
}
void loop()
{
}
結果
それぞれに別の表示ができました。
変化の少ない表示ですが、左側には”OLED_0″、右側には”OLED_1″と表示をしています。
左側がDIY MOREのSSH1106、右側がよく見かけるSSH1106です。
画像からはわかりにくいですが、右側の表示は若干暗いです。
電源は左側を中継して右側にチェーンしています。
電源のチェーンの順番を入れ替えても変わりませんでした。
製品差か個体差かについては調べていません。
コメント