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