【ESP32】128×64 OLED LCDの動作確認【SSD1306】

今回は、商品が動作するかだけの確認なので、結構適当です。

配線

OLED   ESP32
GND <=> GND
VCC <=> VIN (5V)
D0 <=> D18 (CLK)
D1 <=> D23 (MOSI)
RES <=> D2
DC <=> D4
CS <=> D5

Internet Clock using ESP32 and OLED Display

上記を参考にして接続しました。おそらく、RES、DCは任意のポートにして大丈夫だと思う。D2は今回使った開発ボードでは、基板上の青色LEDにも接続されてるので変えたほうがよさそうには思う。

今回は、VSPI?あたりを使用しましたが、HSPIを使う事例もあるので、ほかにも接続の仕方はいろいろあるかと思います。まだ、ポート(端子)の意味がよくわかってないので過去事例(実績)のマネをしています。

参考

CS(Chip select) pin of OLED -> PIN D5 of ESP32
DC pin of OLED -> PIN D4 of ESP32
RES pin of OLED -> PIN D2 of ESP32
SDA pin of OLED -> PIN D23 i.e. MOSI of ESP32
SCK pin of OLED -> PIN D18 i.e. SCK of ESP32
Vdd of OLED -> Vcc of ESP32
GND of OLED -> GND of ESP32
Internet Clock using ESP32 and OLED Display

今回参考にした接続

Arduino Pins u8glib comment HiLetgo OLED Pins Other OLED Pins
13 SCK D0 CLK
11 MOSI D1 MOSI
HiLetgoのOLEDを使う -SPI- – jumbleat

OLED側のD0、D1の端子の意味を上記から推測しました。

SPI通信を行う場合、ハードウェアSPIだけでなく、ソフトウェアSPI(BitBangging SPI)を使うこともできます。
ハードウェアSPIではSCLK(Pin#23)とMOSI(Pin#19)は変更できませんが、ソフトウェアSPIでは全てのピンに好きなピン を使うことができます。
OLED液晶モジュールを使う

上記のやり方は UNO 用のソフトウェア SPI 接続なので、汎用的なハードウェア SPI 接続で使う方法もご紹介します。
OLED_DC と OLED_RESET は任意のピンを使えます。
[SPI] 0.96 inch OLED ディスプレイ (ER-OLED0.96-3W / SSD1306)

https://ht-deko.com/arduino/esp-wroom-32.html#13

各SPIモジュールのピンアサインは以下の通りです。ただし、GPIOマトリックスの項目で説明した通り、比較的自由にリマッピング可能です。
HSPI - SCK,MISO,MOSI,SS = 14,12,13,15
VSPI - SCK,MISO,MOSI,SS = 18,19,23,5
esp32_tips – スイッチサイエンス

Getting Started with the ESP32 Development Board | Random Nerd Tutorials

ライブラリーを導入(Arduino)

ESP32 と 小型128x32OLED液晶ディスプレイ (試運転) - Qiita

上記を参考に、いかの2つのライブラリーを導入します。

・Adafruit SSD1306 by Adafruit
・Adafruit GFX Library

ArduinoIDEの「スケッチ」=> 「ライブラリをインクルード」 => 「ライブラリを管理…」から簡単に導入できます。

Adafruit SSD1306 by Adafruitをインストール。

検索ワードは「Adafruit_SSD1306」のほうが良いかも。

※画像は、間違えて「Adafruit_SSD1306_Wemos_Mini_OLED」を導入してます。それでも動作しますが・・。正しくは「Adafruit_SSD1306」のほうを・・

Adafruit GFX Libraryをインストール

ヘッダーファイルの編集

ESP-WROOM-02でOLED(有機EL) SSD1306が動作しない | Open Beta Lab

128×64 で使うためには、ライブラリの「Adafruit_SSD1306.h」を編集する必要があります。

C:\Users\kuro\Documents\Arduino\libraries\Adafruit_SSD1306 または、
C:\Users\kuro\Documents\Arduino\libraries\Adafruit_SSD1306_Wemos_Mini_OLED 
kuroはログインユーザー名です。Windowsのドキュメントフォルダあたりにあるかと思います。

上記あたりにある「Adafruit_SSD1306.h」ファイルを以下のように修正します。

#define SSD1306_64_48
//   #define SSD1306_128_64
//   #define SSD1306_128_32
//   #define SSD1306_96_16

修正前↑
修正後↓

//#define SSD1306_64_48
   #define SSD1306_128_64
//   #define SSD1306_128_32
//   #define SSD1306_96_16

#define SSD1306_128_64が有効になるように書き換えて、その他は//でコメント化してください。

サンプルプログラムで確認(Arduino)

「ファイル」> 「スケッチ例」>「Adafruit SSD1306」>「ssd1306_128x32_spi」を選択します。

ソースファイルの編集

// If using software SPI (the default case):
#define OLED_MOSI  23 
#define OLED_CLK   18
#define OLED_DC    4
#define OLED_CS    5
#define OLED_RESET 2
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

ポート番号(接続)の部分を、今回接続したものに書き換えます。

※記事を書いてるときに気づきましたが「software SPI 」とかかれてますね。

実行結果

あっさり動作しました。初期不良とかはなさそうなので、動作確認は終わりです。

補足

error

#error("Height incorrect, please fix Adafruit_SSD1306.h!");

上記エラーが出るときは、「Adafruit_SSD1306.h」の編集を忘れているかと思います。

その後の接続例

OLED   ESP32
GND <=> GND
VCC <=> 3V3 (3.3V)
D0 <=> D18 (CLK)
D1 <=> D23 (MOSI)
RES <=> D16 (RX2)
DC <=> D4
CS <=> D5

・3.3Vでも動作した
・RSEをD16に変更してみた

スポンサーリンク
コメント一覧
  • 名前:管理人 :

    コメントは、まだありません。