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の接続が確認できました。

