ESP32-CAMはESP32-WROOMのGPIOをほぼ使い尽くしていて、空きピンはGPIO-16の1本のみしかない。
GPIO-0はFirmwareの書き込みモードにするときに使うので使用できない。
U0TXDとU0RXDを流用した。
このピンはシリアルコンソールとしてデバッグに使用する以外に、Firmwareを書き込むためのピンにも使われている。
Firmware書き込み時以外は自由に使えるので、シリアルコンソールをあきらめれば2本解放できる。
ESP32はI2Cピンを任意のピンに再アサインできるので、シリアルポートにI2Cを割り当てた。
OLEDのライブラリはこちらを使用した。
https://github.com/ThingPulse/esp8266-oled-ssd1306
このライブラリは使い勝手が良いが、スクロール機能を持っていないのが唯一の難点。
OLEDの焼き付き防止については、一定時間表示したら消すのと、ノーマル&リバースを切り替える方法がある。寿命的には前者が良いが、とりあえずノーマル&リバース切り替えで使ってみよう。
OLED | ESP32 |
VCC | VCC(3.3V) |
GND | GND |
SCL | GPIO-1(U0TXD) |
SDA | GPIO-3(U0RXD) |
#include <Wire.h> #include <SSD1306Wire.h> SSD1306Wire display(0x3c, 3, 1, GEOMETRY_128_64); Wire.begin();
デバッグ時にUARTケーブルを抜き差しするのはめんどくさい。
USB-SERIALのTXDラインにダイオードを入れておけばつないだままでFirmwareの書き込みが可能になる。
PC側がカソード、ESP32側がアノードになるようにTXDラインに挟み込む。