0.96インチ単色OLED(128×64,SSD1306,I2C)が載っているESP32マイコンボードで表示を試してみた。
ESP32マイコンはArduino IDEで開発ができて、Arduino用のライブラリがほとんどを使うことができるので、ソフト的にはArduino Uno互換機でOLEDモジュールを動かした時と一緒だ。
ただし、I2CのSDA,SCLのピンが標準的な割り当ての場所と違うピンに配線されていた。
このマイコンボード(Wemos Lolin ESP32 OLED Module)の場合には、pin4とpin5にOLEDのI2Cの配線が結線されていた。
ピンを変更できるSSD1306用のライブラリと、変更ができないライブラリとがあるので注意が必要だ。
ライブラリ本体のソースコードを変更せずに、ピンの変更ができたライブラリでexampleの3つを動作確認できた。
簡単に変更できたのは次の2つだ。
・ACROBOTIC_SSD1306.h
・HelloOLED
これらのライブラリはI2C用のWireライブラリの初期化を外でやるようになっているので、
Wire.begin();
という部分で、使用するピンを明示的に指定して次のようにすればよい。
Wire.begin(5,4);
あるいは、
・SSD1306SimpleDemo
の場合には、初期化の処理で次のようにピンを指定すればよい。
SSD1306Wire display(0x3c, 5, 4); // ADDRESS, SDA, SCL – SDA and SCL usually populate automatically based on your board’s pins_arduino.h
無事、表示させることができた。
—
TTGO T-cameraも同様で、ピンの指定を変更すればよい。
ただし、こちらは参考用のソースコードがあるので、そもそも自前で作らなくても、WiFiとカメラとOLEDの処理が書かれており、そのまま使うだけだ。
—
あと、Lora用のESP32マイコンボードというのも買ってみている。
このボードの場合、OLED用のI2CのSDA,SCLを変更するだけでは駄目だった。
OLEDのリセット信号がESP32マイコンのGPIOに結線されている。
なので、自前でリセットの処理をしなくてはならない。
・HelloOLED
を弄ってみた。
まず、I2Cのピンを変更した。
Wire.begin(4,15); //SDA,SCL
そして、RESETについて自前でGPIOを叩くようにしてみた。
pinMode(16, OUTPUT);
digitalWrite(16, LOW);
delay(100);
digitalWrite(16, HIGH);
delay(100);
結果、無事にOLEDに表示ができるようになった。
ちなみにLoraの機能については試していない。(Lora用のICを叩くコードを動かしていない。)