ESP32でI2C接続 OLEDディスプレイ

ESP32-DevKitCのI2C接続をテストするために有機EL(OLED)キャラクタディスプレイに文字を表示させます。キャラクタディスプレイは20文字x2行でI2C接続となるSO2002Aです。こちらで紹介されているライブラリーをそのまま使わせてもらいます。

ディスプレイモジュールの接続

ディスプレイモジュールはブレッドボードに接続しています。ESP32-DevKitCとの接続は、電源、GND、/CS、SA0、SDA_in、SDA_out、そしてSCLです。データシートによるとスレーブアドレスは0x3Cか0x3Dになり、どちらかはSA0によって決定します。

ディスプレイモジュールの電源は3.3VですのでESP32-DevKitCの3.3Vを接続します。この3.3VはESP32-DevKitCでUSBのバス電源(5V)から基板上で3.3Vを生成して3.3Vピンに出力しています。SDA、SCLのプルアップ抵抗も3.3Vに接続します。

(データシートのINTERFACE PIN ASSIGNMENTではSA0はデフォルトでHiとなっているので基板上でプルアップされていると思いNCとしていましたが動きませんので0x0Cにする場合はVSSに0x3Dにする場合はVDDに接続する必要があります)

8ピンと9ピンのシリアルデータ入力と出力はディスプレイモジュール基板でショートさせています。

SO2002Aのライブラリの追加

まずはSO2002A用のライブラリを追加します。

githubから「clone or download」をクリックしてSO2002A_I2C-master.zipをダウンロードします。Arduio-IDEから「スケッチ」-「ライブラリをインクルード」-「ZIP形式のライブラリをインクルード…」でSO2002A_I2C-masterを選択します

Documents/Arduino/libraries/SO2002A_I2C-master/src/のSO2002A_I2C.hの#ifdef〜#endifをコメントアウトします。

/*
 *#ifndef __SAM3X8E__ 
 *#error "Not Arduino Due"
 *#error "Remove this with care"
 *#endif
 */

ソース

ソースについては特に説明する必要もないと思いますが。

I2Cを使うためのWireライブラリを、そしてディスプレイモジュールSO2002Aのライブラリをインクルードします。

SO2002A_I2C oled(0x3d)でスレーブアドレスを設定します。

ESP32-DevKitCではI2CのSDA、SCLは21ピンと22ピンに割り当てられているのでWire.begin(SDA,SCL)でSDAとSCLのピンを設定しています。また、Wire.setClock(400000)でSCLクロック周波数をデフォルトの100kHzから400kHzに変更しています。

#include <Wire.h>
#include "SO2002A_I2C.h"

#define SDA 21
#define SCL 22

SO2002A_I2C oled(0x3d);

void initDisplay() {
  oled.begin(20, 2);
  oled.clear();
  oled.setCursor(3,0);
  oled.print("AYM DAP SYSTEM");
  oled.setCursor(4,1);
  oled.print("by LINUXCOM");
}

void setup() {
  // put your setup code here, to run once:
  delay(1000);
  Serial.begin(115200);
  Wire.begin(SDA,SCL);
  Wire.setClock(400000);
  initDisplay();
}

void loop() {
  // put your main code here, to run repeatedly:

}

I2C接続確認

起動時に一度だけ「AYM DAP SYSTEM」「by LINUXCOM」を表示するプログラムですがちゃんと表示されていますのでI2Cの接続が確認できました。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする