ESP-IDFを使ってみる

OLED付きの開発ボード


OLED付きのESP32開発ボードにはいくつかの種類が有ります。
今回TTGOブランドの開発ボードを入手しました。




TTGOはLilyGOという会社のブランドで、こちらがオフィシャルストアに なっています。
OrangePiやLoLinなど、最近はAli上にオフィシャルストアを開設するメーカが多くなってきました。
このブランドは、ESP32+RoRa、ESP32+EPaper、ESP8266+OLEDなど、ユニークなボードを開発・販売しています。
VGA+PS2ポート付きのESP32開発ボードにはスペースインベータが組み込まれていて、モニターとキーボードを繋げると、そのままゲームマ シンになります。
OrangePiを販売しているXunlong Softwareと同様に、送料が掛かりますが、まとめて買うと送料がディスカウントされます。

ボードの裏側にESP32のコアチップ、Winbondの25Q128が直付けされていて、SSD1306のOLEDとはi2cで以下の様に接続 されています。
SSD1306 ESP32
SCL GPIO15
SDA GPIO4
RST GPIO16

このボードは、RSTピンのリセット動作(GPIOのOFF/ON)を組み込まないと、OLEDを正しく認識できません。

このボードのRTC_CLOCKのクリスタルは他のESP32開発ボードと違って、26MHzの物が使われています。
ロギング機能を使うと、表示される文字が以下の様に文字化けします。


menuconfigの以下のメニューで、クリスタルの周波数を26MHzに変更する必要が有ります。


変更すれば文字化けはなくなりますが、他のESP32開発ボードを使うときには、元に戻さないといけないので、結構面倒です。




ESP32+OLEDの開発ボードも入手しました。
このボードはESP-WROOM-32が使われています。


TTGOブランドのボードと比べると、一回り大きなボードです。


SSD1306のOLEDとはi2cで以下の様に接続されています。
RESETがどこに繋がっているのか分かりませんが、RESET動作がなくても動きました。
SSD1306 ESP32
SCL GPIO4
SDA GPIO5



Arduino-IDEではSSD1306のライブラリは沢山有りますが、esp-idf環境では限られたライブラリしかありません。
また、RESETピンに対するリセット動作を行ってくれるライブラリを見つけることができませんでした。

SSD1306モジュールには128x64のモジュールと、128x32のモジュールの2種類が有り、
両方のモジュールをサポートするライブラリとして、こ ちらのライブラリが有りますが、
RESET動作をメイン側に組み込む必要が有ります。

そこで、こちらのラ イブラリを参考にして、以下の条件でライブラリを作りました。
  • esp-idf環境で動くこと
  • i2cモジュールと、SPIモジュールの両方に対応する事
  • 128x64と、128x32の両方の解像度に対応する事
  • TTGOモジュールに対応する事(RSTピンのリセット機能)
  • 天地が正しく表示されること

  • ソースはこちらで 公開しています。

    i2c 128x32



    i2c 128x64



    128x64 TTGO


    128x64 ESP-WROOM-32


    SPI 128x64





    SSD1306のOLEDのライブラリはいくつか公開されています。

    https://github.com/TaraHoleInIt/tarablessd1306_examples

    このライブラリはi2cだけではなくSPIも正しく動きます。
    SPIドライバーとi2cドライバーの使い方に関しては、このライブラリが一番参考になりました。
    以下の手順でインストールできます。
    $ git clone --recursive https://github.com/TaraHoleInIt/tarablessd1306_examples

    $ cd tarablessd1306_examples/

    $ cd HelloWorld/

    $ rm sdkconfig
    設定する項目が増えているので、一旦消した方がいいです。

    $ make menuconfig
    ここでComponent configのメニューでTarableSSD1306を選んで、以下の項目を有効にする必要が有ります。

    Enable default i2c master interface code
    Enable default SPI interface

    $ make

    $ make flash






    SPI接続を行う場合、以下の接続となります。
    SSD1306(SPI) ESP32
    CS GPIO15
    DC GPIO33
    RES GPIO5
    D1(MOSI) GPIO13
    D0(SCLK) GPIO14
    VCC 3.3V
    GND GND

    残念ながら天地が逆さまになります。


    続く....