【ESP32】I2Cシリアル 128×64 OLED LCDの動作確認【SSD1306】

  • 投稿 : 2019-03-26

本記事は広告およびアフィリエイトプログラムによる収益を得ています

・aliexpressで購入したI2Cシリアル 128×64 OLED LCD(参考
Amazon:KKHMF ESP32 ESP-32S NodeMCU開発ボード2.4GHz WiFi + Bluetooth
・Arduino IDE v1.8.8
で確認しました

表示できた

初期不良を調べるために、簡単なプログラムで表示できることだけ確認。

初めは、Adafruit_SSD1306を使おうと思ったんだけどうまくいかなかったので、路線変更。表示できることさえ確認できれば良いので・・。

上下逆のような?!

2つ購入して2つとも上下逆に表示されるし、不良とは考えられないのでライブラリーかな?ということで、ライブラリーのほうを少し書き換えたら、上下反転できました。

\Arduino\libraries\ESP8266_and_ESP32_Oled_Driver_for_SSD1306_display\srcのOLEDDisplay.hの一部を書き換えます。

//#define COMSCANDEC 0xC8
//#define COMSCANINC 0xC0
#define COMSCANDEC 0xC0
#define COMSCANINC 0xC8
//#define SETCOMPINS 0xA0
#define SETCOMPINS 0xA1
//#define SETSEGMENTREMAP 0xA1
#define SETSEGMENTREMAP 0xA0

3か所書き換えます。そうすると、画像のように上下反転します。

修正方法が正しいかどうかは不明なんですが、SSD1306に、上下、左右反転する機能がついてるのは確かのようです。

この修正はなくても、1枚目の写真のように表示されるので、とりあえずスルーでよいかと思います。

参考:

0xA0 / 0xA1 : カラムアドレス0位置の指定
通常(カラムアドレス0が左端)
$ i2cset -y 1 0x3c 0x00 0xa0 i

左右逆転(カラムアドレス0が右端)
$ i2cset -y 1 0x3c 0x00 0xa1 i


0xC0 / 0xC8 : ページ0位置の指定
通常(ページ0は上端)
$ i2cset -y 1 0x3c 0xc0 i
上下逆転(ページ0は下端)
$ i2cset -y 1 0x3c 0xc8 i
上下逆転
OLED 0.96インチで遊ぶ ~その2~ - LSI Jiu-Jitsu

#SSD1306_SETCOMPINS = 0xDA
SSD1306_SETCOMPINS = 0xA0
#SSD1306_COMSCANDEC = 0xC8
SSD1306_COMSCANDEC = 0xC0
Adafruit SSD1306 library for Python (rotate)上下逆転 – しおそると

接続

OLED   ESP32
GND <=> GND
VCC <=> VIN (5V)
SCL <=> D22
SDA <=> D21

参考:ESP32 Arduino: Interacting with a SSD1306 OLED display – techtutorialsx

左側:0x78 右側:0x7A

接続先I2Cアドレス
0x78側に接続されている0x3C
0x7A側に接続されている0x3D

参考:OLED I2C Display Arduino/NodeMCU Tutorial : 15 Steps - Instructables

写真の場合は、0x3Cになります。

ライブラリの導入

ESP8266_and_ESP32_Oled_Driver_for_SSD1306_display

ArduinoIDEの「スケッチ」=> 「ライブラリをインクルード」 => 「ライブラリを管理…」から導入します。「esp32 ssd1306」で検索して、上記のライブラリーを導入

動作確認用のスケッチ

#include <Wire.h>
#include "SSD1306.h"
 
SSD1306  display(0x3c, 21, 22); // I2Cアドレス,SDA,SCL
 
void setup() {
  display.init();  
  display.setFont(ArialMT_Plain_16);
  display.drawString(0, 0, "Hello World");
  display.display();  
}
 
void loop() {}

参考:
ESP32 Arduino: Interacting with a SSD1306 OLED display – techtutorialsx
ESP32 Arduino SSD1306: Changing font size – techtutorialsx

スポンサーリンク