Forum: Mikrocontroller und Digitale Elektronik ESP32 und OLED Display


von Michael M. (lernender)


Lesenswert?

Hallo zusammen,

ich habe an meinem ESP32 Dev Kit C von AZ ein Oled 1,3" angeschlossen 
mit 128x64. Programmieren tue ich per PlatformIO und bekomme zwar eine 
Verbindung zum Display, kann aber ein einfaches Hello World nicht 
darstellen. Das Display bleibt dunkel. Wenn ich den i2c scanne, sehe ich 
die Adresse 3c. Ich kann auch den Cursor setzten und zurück lesen.

Hat jemand einen Tipp??
1
#include <Arduino.h>
2
#include <Wire.h>
3
#include <Adafruit_SSD1306.h>
4
5
#define SCREEN_WIDTH 128
6
#define SCREEN_HEIGHT 64
7
#define OLED_RESET -1
8
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
9
void scan_wire(TwoWire *wire);
10
11
    void setup()
12
{
13
  delay(100);
14
  Serial.begin(115200);
15
  Wire.begin(-1,-1,100000);
16
  scan_wire(&Wire);
17
  display.begin(SSD1306_SWITCHCAPVCC,0x3c);
18
19
  display.clearDisplay();
20
  display.setTextColor(SSD1306_WHITE);
21
  display.print("Hello World");
22
 // display.display();
23
  
24
  // put your setup code here, to run once:
25
}
26
27
void loop(){
28
    // put your main code here, to run repeatedly:
29
} 
30
31
    void scan_wire(TwoWire *wire)
32
{
33
  uint8_t device_count = 0;
34
  for (uint8_t i = 0; i <= 128; i++)
35
  {
36
    wire->beginTransmission(i);
37
    uint8_t res = wire->endTransmission();
38
    if (res == 0)
39
    {
40
      Serial.print("0x");
41
      if (i < 16)
42
      {
43
        Serial.print('0');
44
      }
45
      Serial.print(i, HEX);
46
      device_count++;
47
    }
48
    else
49
    {
50
      Serial.print("..");
51
    }
52
  }
53
  Serial.println("");
54
  Serial.print("devicecount: ");
55
  Serial.println(device_count);
56
}
Die Ausgabe des Scans auf dem I2C liefert folgende Ergebnisse:
........................................................................ 
................................................0x3C.................... 
..0x48.................................................................. 
........................0x76..................0x80
devicecount: 4

Vielen Dank vorab!

von Michael M. (lernender)


Lesenswert?

Kleiner Nachtrag,
das Problem besteht wohl nur mit der Adafruit Lib. Wenn ich die U8G2 
verwende, lauft das Beispiel sofort. Kennt jemand den Unterschied?

von Johannes S. (Gast)


Lesenswert?

das alte Standard Adressproblem? (0x3C << 1) verwenden?

von Stefan (Gast)


Lesenswert?

Manche der OLEDS brauchen einen Reset. Leitung sollte rausgeführt sein,
je nach Typ kurz auf GND, dann 3v3 dauerhaft, oder anders rum oder oder 
oder... Mir hat das immer geholfen.

von Michael M. (lernender)


Lesenswert?

Johannes S. schrieb:
> das alte Standard Adressproblem? (0x3C << 1) verwenden?

Sieht leider nciht danach aus, habe es getestet und Ergebnis ist 
Bildschirm dunkel.

von Joachim B. (jar)


Lesenswert?

Johannes S. schrieb:
> das alte Standard Adressproblem? (0x3C << 1) verwenden?

bin auch gerade wieder darauf reingefallen, beim Scan der PCF8574A der 
hat ja 3 Adressbits ist folgendes möglich:
        case 0x70:
        case 0x72:
        case 0x74:
        case 0x76:
        case 0x78:
          #pragma message"I2C SCAN: 0x78 -> I2C_OLED || 
I2C_TASTATUR_8574A"
        case 0x7A:
        case 0x7C:
        case 0x7E:
       #ifdef I2C_TASTATUR_8574A
          //i2c_test_flags|=(1<<I2C_TASTATUR);
          i2c_test_flags|=(1<<I2C_TASTATUR_8574A);

von Stefan F. (Gast)


Lesenswert?

Du musst die Funktion
1
display.display();
benutzen, um die erzeugte Grafik an das Display zu senden.

display.print("Hello World") erzuegt nur eine Grafik im Pufferspeicher, 
ohne sie an das Display zu senden.

von Michael M. (lernender)


Lesenswert?

Stefan ⛄ F. schrieb:
> Du musst die Funktion
>
1
> display.display();
2
>
> benutzen, um die erzeugte Grafik an das Display zu senden.
>
> display.print("Hello World") erzuegt nur eine Grafik im Pufferspeicher,
> ohne sie an das Display zu senden.

Das habe ich versucht, keine Reaktion.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.