ESP8266 und Oled Display - SPI Verständnisfrage

Hallo Leute,
verwende das Adafruit Oled Display 128*64 mit meinem Nodemcu ESP8266 mittels SPI Verbindung.
Als Sketchbeispiel orientiere ich mich an das Beispiel von Adafruit. mit der Pinbelegung

// Declaration for SSD1306 display connected using software SPI (default case):
#define OLED_MOSI 2
#define OLED_CLK 0
#define OLED_DC 4
#define OLED_CS 5
#define OLED_RESET 16
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,
OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

und funktioniert.

Im Netz habe ich z.B. diese Pinbelegung gefunden. Dabei habe ich gesehen, dass sich die Pins MOSI und SCLK an die Bibliothek vom ESP8266 orientiert. Siehe. Ein Hochladen des Sketches ist nur möglich wenn ich D7 und D8 während dem Hochladen des Sketches abschließe. Wenn ich die beiden Pins nach Abschluss des Hochladen des Sketches wieder einstecke passiert leider nichts. Das Display bleibt schwarz und es findet keine serielle Kommunikation statt.

Kann mir bitte jemand erklären warum das so ist?
An welchen Pins vom Nodemcu hab ihr standardmäßig eure Displays mit der SPI Kommunikation angeschlossen?

Großes Danke bereits im Voraus für eure Infos und Erfahrungen.

Rein von der Logik her:
Wenn nach dem hochladen des Sketch und reboot das Setup durch ist, und das Display nicht initialisiert ist, bleibt das Ding aus.
Auf Dauer.

Hallo @my_xy_projekt .
Danke für deiner Hiflsbereitschaft.
Der Beispielsketch nimmt einige Zeit in Anspruch und daher müsste ich theoretisch beim Einstecken der Pins etwas auf dem Display sichtbar sein, oder nicht? Oder wenn ich ein Reset mache?

Bitte. Gerne.

Tja und da muss ich wirklich passen. Es gibt hier ne Menge ESP-Spezis; Ich gehöre beim Einsatz derer zu den Logikern und nicht zu den Praktikern.
Es gibt einiges zu beachten rund um die Pins beim booten, aber da bin ich wirklich derzeit überfragt.
Ich geb das mal weiter an @agmue und @noiasca

beste Grüße!

Ich denke auch, dass bei diversen Pins (z.B. D7 und D8) beim Booten Achtung zu schenken ist.
Nur verstehe ich nicht warum z.B. mit der Pinbelegung

// Declaration for SSD1306 display connected using software SPI (default case):
#define OLED_MOSI 13
#define OLED_CLK 14
#define OLED_DC 4
#define OLED_CS 15
#define OLED_RESET 0
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,
OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

der Beispielsketch nicht klappt.
Hab ich einen Denkfehler?
Nochmals danke an dich @my_xy_projekt für deiner Mühe.
Bin schon neugierig was die ESP Spezialisten dazu sagen.

Ich beschäftige mich nur mit dem ESP32, sorry. Für mich war der Typ besser.

Dabei hat mir eine vergleichbare Seite wie diese geholfen: ESP8266 Pinout Reference: Which GPIO pins should you use?

1 Like

Sieh dir mal hier in Post 753 die Schaltung an.
Da habe ich ein SPI-Display funktionsfähig an einen ESP8266 Wemos D1 mini angeschlossen.
Zwar kein OLED, aber eben SPI.

Nicht dafür.
Der Tag war aufregend genug - die Restwoche wird bestimmt ruhiger...

Na dann. Danke daste noch draufgeschaut hast um die Zeit.

Der Pin D7 macht bei SPI kein Problem, da er von SPI gebraucht wird. Aber D8 kann Probleme machen.
Sieh auch folgende Anleitung.

Muss D8 nicht über 10k auf Masse gezogen werden?

Der ist auf dem Board verbaut.
Macht aber Probleme, wenn der Sketch was anderes will.
Daher kann CS besser auf einem anderen Pin (z.B. D6) funktionieren.

ich habe ein Nokia Display so angeschlossen:

// pin 4 - LCD reset (RST)                D2
// pin 5 - LCD chip select (CS) bzw. CE   D1
// pin 12 - Data/Command select (D/C)     D6
// pin 14 - Serial clock out (SCLK)       D5
// pin 13 - Serial data out (DIN)         D7

Probleme beim Update habe ich damit keine, wobei ich diese aber überwiegend mit OTA mache.

D8 muss beim wakeup low sein, zu D7 fällt mir nichts besonderes ein.

Lange Zeit mein Bildschirmhintergrund:

Eine funktionierende Beschaltung eines Nokia-SPI-Displays habe ich hier auch noch:

  Pinbelegung:
  Display:      Nodemcu V3:
  GND           GND
  BL            3.3V (Beleuchtung)
  VCC           3.3V
  Clk           D5 (Clock Fix)
  Din           D7 (MOSI Fix)
  DC            D3 (GPIO0)
  CE            D2 (GPIO4) 
  RST           D1 (GPIO5) oder RST gegen VCC

Vieles hängt natürlich auch von der zur Lib gehörigen Definition ab. Das muss zusammen passen.

Grad doch noch ein SPI-OLED gefunden und am Wemos D1 mini getestet.
Folgende Pinbelegung:

  Pinbelegung eines SPI-OLED 128x64:
  Display:      Nodemcu / WemosD1 mini
  GND           GND
  VCC           3.3V
  Clk           D5 (GPIO14 - Clock Fix) 
  Din           D7 (GPIO13 - MOSI Fix) 
  DC            D3 (GPIO0)
  CE            D8 (GPIO15)
  RES           D2 (GPIO4) oder VCC

Leider konnte ich es nur mit der Library U8G2 testen, sollte aber egal sein.

1 Like

Hallo.
Sorry für meiner verspäteten Antwort.
Bedanke mich als erstes bei euch @agmue , @HotSystems @noiasca für eure konstruktiven Beiträge und der sehr raschen professionellen Hilfsbereitschaft aus der Praxis und der Theorie.
Diese Pinbelegung funktioniert bei mir:

Leider hat folgende Pinbelegung bei mir mit dem Beispielsketch von Adafruit nicht funktioniert. Das Hochladen des Sketches funktioniert nur wenn ich D8 nicht mit dem Display verbinde. Nach dem Hochladen, dem Anschluss von D8 und einem Reset bleibt das Display schwarz. Ich vermute es könnte der GPIO15 (D8) schuld sein. Wie gesagt, reine Vermutung. Könnte aber mit der dieser Aussgabe zusammenhängen:

Nochmals ein großes Danke an euch ALLEN!!!

Prima dass es jetzt funktioniert.
Wenn D8 bei dir Probleme macht, ist evtl. etwas am ESP8266 faul oder du hast den Pin anderwertig belegt.
Du kannst aber die Beschaltung so nehmen und für den Pin D8 einen anderen Pin nehmen, musst das nur in der Treiberdefinition angeben.

Für mich nicht verständlich sobald ich gesehen habe, dass es bei euch funktioniert.
Ich habe bei meinem Nodemcu nur die Pins für das Oled Display angeschlossen und als Beispielsketch verwende ich den von Adafruit.

Für mich auch nicht, da bei mir ja D8 funktioniert. Auch wenn ich statt D8, D1 verwende, funktioniert es.

Mit dieser Pinbelegung funktioniert es bei mir auch:

#define OLED_MOSI 13 //D7 (MOSI-Fix)
#define OLED_CLK 14 //D5 (Clock-Fix)
#define OLED_DC 0 //D3
#define OLED_CS 5 //D1
#define OLED_RESET 4 //D2
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,
OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

Wenn ich aber D8 verwende funktioniert es nicht

#define OLED_MOSI 13 //D7 (MOSI-Fix)
#define OLED_CLK 14 //D5 (Clock-Fix)
#define OLED_DC 0 //D3
#define OLED_CS 15 //D8 <-----
#define OLED_RESET 4 //D2
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,
OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

Entweder fehlt der Widerstand auf dem Board für LOW, oder dein Display hat einen Fehler.

Wie bereits mitgeteilt, funktioniert das Display mit diversen Pinbelegungen.
Dass der Widerstand komplett fehlt oder dass er kaputt ist?