greiman / SSD1306Ascii

Text only Arduino Library for SSD1306 OLED displays
MIT License
490 stars 120 forks source link

Software i2c #93

Open GigiG62 opened 1 year ago

GigiG62 commented 1 year ago

Hi, is it possible to initiate the oled.begin on pins different from the hardware i2c pins? I'm trying to use the library on a ESP32-Cam

greiman commented 1 year ago

Looks like the default I2C pins are used internally on ESP32-Cam. You can select alternate pins with bool begin(int sda=-1, int scl=-1, uint32_t frequency=0); .

Try changing this:

SSD1306AsciiWire oled;

void setup() {
  Wire.begin();
  Wire.setClock(400000L);

To:

SSD1306AsciiWire oled;

// select your pin choice here
#define I2C_SDA 14
#define I2C_SCL 15

void setup() {
  Wire.begin(I2C_SDA , I2C_SCL , 400000L);

The ESP32 has two I2C ports.

You can use the second port like this

SSD1306AsciiWire oled(Wire1);

// select your pin choice here
#define I2C_SDA 14
#define I2C_SCL 15

void setup() {
  Wire1.begin(I2C_SDA , I2C_SCL , 400000L);

I compiled the above but didn't test them on an ESP32. Let me know if this works. Its been years since I used an alternate port.

GigiG62 commented 1 year ago

It works just fine! Thanks Bill. For my project, the ESP32-Cam pins are all used (Camera, SD and two external sensors) so I set the only two remaining free pins, RX and TX (1 and 3 on ESP32), as SDA and SCL. After uploading the firmware to the board, they can be used as I2C pins. Thanks again.

GigiG62 commented 1 year ago

Is it possible to use a 128x128 OLED like this?

greiman commented 1 year ago

No the SD1306 controller only supports up to 128x64.