¿Cómo hacer que funcione esta pantalla OLED I2C? (probablemente SH1106)

Acabo de recibir esta pantalla: enlace , pero desafortunadamente es diferente a otras que se muestran en las revisiones. Ese es el enlace de mi versión

Probablemente esté basado en SH1106, pero no puedo hacerlo funcionar. He probado algunas bibliotecas populares de Arduino, pero no puedo obtener la dirección de esta pantalla del escáner I2C; no responde.

Alguien sabe como programarlo?

Respuestas (3)

Creo que su pantalla OLED podría ser una basada en SSD1306, y no una SH1106 como cree.

Si ese fuera el caso, creo que te alegrará saber que hay una biblioteca para ello (hecha por Adafruit):

https://learn.adafruit.com/monochrome-oled-breakouts/arduino-library-and-examples

Por lo que he leído, también debe hacer una pequeña modificación de código para que su pantalla OLED funcione. Es simple y lo puedes encontrar aquí:

http://www.modlog.net/?p=887

Espero que esto te ayude.

Gracias por su respuesta, pero probé ambas bibliotecas: Adafruit y U8glib. También he probado ambos controladores. Estoy conectando SCL a PIN3, SDA a PIN2 de mi Leonardo. RST a 5V y D/C a GND. Y, por supuesto, he probado diferentes configuraciones y combinaciones. A veces, sin conectar uno de los cables de datos, la pantalla muestra un ruido aleatorio, pero después de reiniciar, vuelve a estar en negro.
Hmmm, eso es extraño. Muchos resultados de Google señalaron que su pantalla debería ser SSD1306. No ha proporcionado un esquema o una guía que muestre sus conexiones. ¿Puede proporcionarnos un enlace o una imagen que los muestre? Está utilizando resistencias pull-up en las líneas I2C, ¿verdad? (más sobre este asunto: dsscircuits.com/index.php/articles/… )
Disculpe este dibujo a mano débil, ahora solo estoy en iPad: esquema
El Arduino Leonardo está (supongo) funcionando a un nivel de 5V (y creo que alimenta la pantalla OLED desde el riel de 5V del Arduino). Si bien la información técnica en la página del producto indica que puede alimentarse entre 3 V y 5 V, debería funcionar a niveles lógicos de 3,3 V, mientras lo eleva a 5 V. Es posible que el controlador OLED no esté satisfecho con eso y se niegue a funcionar o, en el peor de los casos, ya esté dañado. (al menos la hoja de datos SSD1306 establece que su lógica funciona entre 1,65 V y 3,3 V y no menciona que sea tolerante a 5 V. adafruit.com/datasheets/SSD1306.pdf )
Intentaré con el cambiador de voltaje cuando llegue (o haré uno), ¡gracias por todas las respuestas! Y sí, probablemente ya esté dañado...
Probablemente esto esté un poco fuera de tema, pero ellos fueron los que le enviaron el módulo equivocado. Por supuesto, aún podría haber dañado su pantalla OLED incluso si le hubieran enviado la correcta, pero al final puede argumentar que tiene la pieza incorrecta que no se ajusta y le reembolsarán (compro en ese sitio web, parecen para ser sincero). Te aconsejo que pruebes eso. Si desea construir un cambiador de nivel, le sugiero este enlace husstechlabs.com/support/tutorials/bi-direction-level-shifter Si no tiene un MOSFET 2N7000, probablemente pueda reemplazarlo.

Podría hacer que la pantalla funcione con la biblioteca Adafruit, según la configuración de la siguiente manera:

// If using software SPI (the default case):
#define OLED_MOSI   11       //SDA in the OLED display
#define OLED_CLK   13        //SCL in the OLED display
#define OLED_DC    9         //D/C in the OLED display
#define OLED_CS    10        //Its not connected
#define OLED_RESET 2         //RST in the OLED display
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

Recuerde: use el ejemplo con la comunicación SPI, ¡todo funciona GENIAL!

¿Parece que tal vez debería ser una edición de su otra respuesta? Puede editar sus respuestas en cualquier etapa para agregar información adicional y, normalmente, el único momento para publicar varias respuestas en los sitios de Stack Exchange es si son dos formas diferentes de resolver el mismo problema.

Acabo de comprar una pantalla exactamente como la tuya y también tuve el mismo problema... y tratando de encontrar una solución, llegué con tu pregunta, ¡y luego encontré la solución!:

http://forum.arduino.cc/index.php?topic=217290.0

Siga los pasos del usuario: Caltoa, -Utilice U8glib, tome el ejemplo 'Hello World' para Arduino y elimine los comentarios de la sección:

U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9);   // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9

Y agregue un '2' al final, así:

U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9, 2);    // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9

Luego conéctate así:

U8GLIB_SSD1306_128X64 u8g( SCL, SDA, 'cs no connected', D/C, RST);

Totalmente trabajando!!

ps No es una pantalla I2C, utiliza una comunicación SPI, ¡las etiquetas en la pantalla son incorrectas! Por eso en la biblioteca hay que usar el 'Software SPI Communication'.

¡Espero que funcione contigo y con todos los que tengan el mismo problema!

Primero, pones un ejemplo con una cadena como char (comillas simples en lugar de comillas dobles) y un error de compilación: 'D' no se declaró en este ámbito. "¡Totalmente trabajando!" ..... no, lo siento.