Oled Display SSD1306 Display Clear

Hola, estoy usando un panel Oled SSD1306 de 64x48 conectado a una Wemos D1.
Empecé cargando un ejemplo típico de "Hola Mundo", funcionó de una.
Cuando reinicio me aparece una pantalla llena de puntos y algo del "Hola Mundo".
Es como que no se refresca.
Va foto de la pantalla.
Agradezco su atención.
Este es el código q uso:

#define __DEBUG__

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

// Definir constantes
#define ANCHO_PANTALLA 64 // ancho pantalla OLED
#define ALTO_PANTALLA 48 // alto pantalla OLED

// Objeto de la clase Adafruit_SSD1306
  Adafruit_SSD1306 display(ANCHO_PANTALLA, ALTO_PANTALLA, &Wire, -1);
 

   
void setup() {
#ifdef __DEBUG__
  Serial.begin(9600);
  delay(100);
  Serial.println("Iniciando pantalla OLED");
#endif

  // Iniciar pantalla OLED en la dirección 0x3C
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
#ifdef __DEBUG__
    Serial.println("No se encuentra la pantalla OLED");
#endif
    while (true);
  }

  // Limpiar buffer
  display.clearDisplay();
  // Tamaño del texto
  display.setTextSize(1
  );
  // Color del texto
  display.setTextColor(SSD1306_WHITE);
  // Posición del texto
  display.setCursor(0, 0);
  // Escribir texto
 display.println("¡¡Hola mundo!!");
  // Enviar a pantalla
  display.display();

}

void loop() {}

¿Y esos caracteres de exclamación no anglosajones? -> ¡¡

Esta información la tienes en los mismos artículos con los ejemplos de hola mundo.

  //Activar página de código 437
  display.cp437(true);
  // Escribir el carácter ¡ dos veces
  display.write(173);
  display.write(173);
  // Escribir texto
  display.println("Hola mundo!!");

ssd1306-pantalla-oled

Recuerden leer los tutoriales no sólo ir al copy and paste. Saludos.

Ya los eliminé. De hecho el artículo q sugerís es de donde copié el sketch.
Me parece q hay un error en el funcionamiento del display...

O hay algo que no estamos viendo pues sólo has aportado código y no un diagrama de cómo está conectado todo pero también hay que tener en cuenta y Cito:

ANCHO_PANTALLA: es la constante donde se almacena el ancho de la pantalla.
ALTO_PANTALLA: es la constante donde se almacena el alto de la pantalla.
&Wire: el un puntero a la clase estática Wire.
-1: es el pin de Arduino o ESP8266 que se utiliza para resetear la pantalla.

El último parámetro (-1) sólo se utiliza con pantallas que tienen un pin para resetear. Se debe conectar ese pin normalmente serigrafiado con RST al pin de Arduino o ESP8266 y luego poner en el constructor el número de pin utilizado.

¿Tu pantalla tiene pin para resetear? ¿Está conectado donde debe?

Gracias x tu respuesta. Te paso el link de dónde compré el display, es mas sencillo que explicarte y subir fotos del mismo.
https://articulo.mercadolibre.com.ar/MLA-1127928733-display-oled-shield-wemos-d1-mini-066-64x48-esp8266-ptec-_JM
No tengo ni idea lo que mencionas sobre el Pin de reset. Hay que asignarle al Wemos D1 mini un pin para eso? En ningún lado se menciona que el Display tenga un pin de reset.
Al no usar el Display "encima" del Wemos, cableo los pines necesarios: D1 SCL,
D2 SDA, 3.3V y masa.
Gracias por tu atención.

Hola @danielfelix te paso el pdf que adjunta un vendedor Europeo para esa pantalla veamos si te vale.
0,66 Oled Display Shield_EN.pdf (1.4 MB)
Saludos.
PD: no le hagas caso al harware solo al codigo de ejemplo difiere un poco del tuyo.

Nop, no funciona, muestra la misma imagen de puntos aleatorios.
Lo devuelvo, cuando reciba otro nuevo lo comento.
Muchas gracias!!!

image

Yo pude tomar la imagen y arriba a la derecha tiene un pin RST o sea lo que te dijo @cuantron

No , esta usando comunicacion i2c y no le hace falta reset y ya se lo esta diciendo en el constructor con el (-1), que indica que no lleva reset o que va conectado con el reset de la placa controladora. No importa si se conecta o no ese pin.

Me baso en lo investigado por @cuantron. Usa I2C y el ultimo dato lo que es.
Ok si no va no va.

Gracias a todos!

yo no distingo nada en la foto con la claridad, enserio, por eso yo pregunto, pero resulta extraño este comportamiento:

Si inicialmente se vió bien (o más o menos) porque los caracteres "¡" no se pudieron ver tal cual el código y luego al resetear todo sale mal, yo entiendo que o hay algo mal conectado o hubo algo mal conectado llegando a estropear la TFT... o bien hay algo mal definido...

¿Cuál de las opciones? Pues nos falta info para saber.

La única posibilidad de dañar el display es conectando a 5V en lugar de a 3.3V y eso no sucedió.
Cuando tenga un display nuevo, vuelvo a comentar. Gracias x su atención.

Me parece que es eso @cuantron .
Estimado @danielfelix , ¿ seguro que probaste el codigo del vendedor Europeo que te subi en el post #6 ?.
Lo pregunto porque aparte de los textos a imprimir que no tiene importancia lo unico que cambia es la definicion del objeto "display". Pues he hecho unas pruebas con mis pantallitas:
Si defino display como haces tu:

Adafruit_SSD1306 display(ANCHO_PANTALLA, ALTO_PANTALLA, &Wire, -1);

Obtengo un error parecido al tuyo
1
En cambio si defino el display como lo hacen ellos:

Adafruit_SSD1306 display(OLED_RESET)

Que como ves no definen ni ancho ni alto ni tipo de comunicacion obtengo el siguiente resultado con tu codigo:
2
Pruebalo porque creo que no le estas definiendo una comunicacion I2C y estas mareando a la pantalla.

confiemos en que el autor de la duda te lea antes de comprar otro display porque se ve que has dado en el clavo :slight_smile:

1 Like

Tengo un lío en el mate! Pasame por favor exactamente el scketh q usaste.

#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

// Objeto de la clase Adafruit_SSD1306
  Adafruit_SSD1306 display(-1);
   
void setup() {
#ifdef __DEBUG__
  Serial.begin(9600);
  delay(100);
  Serial.println("Iniciando pantalla OLED");
#endif

  // Iniciar pantalla OLED en la dirección 0x3C
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
#ifdef __DEBUG__
    Serial.println("No se encuentra la pantalla OLED");
#endif
    while (true);
  }

  // Limpiar buffer
  display.clearDisplay();
  // Tamaño del texto
  display.setTextSize(1
  );
  // Color del texto
  display.setTextColor(SSD1306_WHITE);
  // Posición del texto
  display.setCursor(0, 0);
  // Escribir texto
 display.println("!!---Hola mundo---!!");
  // Enviar a pantalla
  display.display();
}
void loop() {}


No hay modo... lo doy por perdido?

¿La estas conectando bien? Veo que al menos le falta un cable.

Reset? tengo 3.3, gdn, D1 SCL, D2 SDA