Utilizando cualquier pin I2C en display OLED con librería Adafruit_SSD1306.h

Hola! Encontré la solución para poder utilizar cualquier pin de un Arduino como bus I2C para utilizar el Oled.

Lo primero que hay que saber es que Adafruit fabrica sus OLED con una dirección I2C diferente para cada tamaño:
OLED 128x64 ---> 0x3D
OLED 128x32 ---> 0x3C

Sin embargo, si se compran uno genérico, ambos tamaños disponibles utilizan la misma dirección: 0x3C, así que en la línea:

#define SCREEN_ADDRESS 0x3D ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32

debe cambiarse por:

#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32

Luego en la función setup hay que añadir la siguiente línea:

void setup(){
    Serial.begin(115200);
    Wire.begin(D3,D4); // para utilizar, por ejemplo el pin D3 como SDA y el D4 como SCL
}

Si no funciona aún con todo eso, descarguen la librería para mapear pines (I2C_Force_SW). Tenemos librerías como SoftwareWire.h o BitBang_I2C.h.

Ahora bien, si no logran hacer funcionar un arduino cualquiera con todo lo anterior, consideren el uso de una librería que tiene todo y es muy simple de utilizar: OLED_I2C, desarrollada por Rinky-Dink Electronics. Es la que estoy utilizando ahora ya que posee una documentación muy detallada.
Les dejo a continuación esa librería y el manual para que descarguen ambas cosas.
OLED_I2C.zip (514,3 KB)
OLED_I2C.pdf (119,3 KB)

Lamento pincharte el globo porque eso solo es valido en un ESP8266 o un ESP32
Wire.begin(int sda, int scl);
En un Arduino

Los pines esta asignados y son pines Hardware.
En un ESP32 tambien
https://rntlab.com/question/esp32-default-i2c-pins-and-wire-begin/

Se pueden mapear los pines para forzar al software a que trabaje con otros. Creo que se conoce como "bitbanging". Si no quieren renegar nunca más, les aconsejo que consideren utilizar la librería ss-oled. Otra opción es obligar a Wire.h a que tome otros pines, mediante una librería alternativa, como "SoftI2C".

Si esta bien, pero no es lo que pusiste al comienzo de tu hilo.

SoftI2C no es Wire.begin(pin, pin) en los pines que yo decido.
No en Arduino, si en ESP.

Y entiendo tu entusiamo y es buen dato para los que use ESP.
El Softi2C se usa mucho con los ATtinyXX que tienen una versión personalizada.

También está la librería bitbang_i2c, probada con éxito en un Arduino Uno.

Esa te la debo, porque no la conocía.

Es la librería que utiliza ss_oled para obligar a Wire.h a que tome una pareja de pines cualesquiera.

Muevo el hilo a tutoriales, puede servirle a alguien estando ahi mas que en la sección general.

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.