
Hi, hattest du auch schon mal Probleme mit dem OLED HW-364A am ESP8266?
Dann willkommen im Club – ich hab mir stundenlang den Kopf zerbrutzelt, bis ich das geschnallt hab. Damit du dir das sparst: Hier mein Erfahrungsbericht, kurz und schmerzlos. 😅
TL;DR
Beim ESP8266 0.96″ OLED HW-364A ist das OLED fest auf I²C an D6/D5 (GPIO14/12) verdrahtet – nicht auf den üblichen D2/D1!
Wenn du andere I²C-Geräte auf denselben Bus quetschst oder alles auf D2/D1 umlenkst, hängt oder bootet der ESP nicht sauber.
Lösung: OLED auf seinem festen Bus lassen, für alle weiteren I²C-Geräte (Sensoren, Keypad usw.) einfach einen zweiten I²C-Bus anlegen – per Laufzeitumschaltung von Wire, ganz ohne Extra-Bibliothek.
Verkabelung (getrennte Busse = stabiles Leben)
Bus 1 – OLED (nicht anfassen!)
- SDA → D6 (GPIO14)
- SCL → D5 (GPIO12)
- Adresse: 0x3C
📌 Pullups sind meistens auf dem OLED-Modul schon drauf.
Wire.begin(14, 12);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
Bus 2 – Externer I²C (für PCF8574, Sensoren etc.)
- SDA → D7 (GPIO13)
- SCL → D4 (GPIO2)
❗ WICHTIG: GPIO2 (D4) muss beim Boot HIGH sein. Also bitte keine Last auf GND dort.
Beispiel: PCF8574 Keypad
- Adressen: 0x20–0x27 (PCF8574), 0x38–0x3F (PCF8574A)
- INT-Pin: unbenutzt lassen (einfach offen)
- Keypad-Matrix:
1 2 3 A
4 5 6 B
7 8 9 C
* 0 # D
📌 Mapping:
Columns = P4–P7
Rows = P0–P3
(Beim Lesen: Row-Bit maskieren, sonst kommt Quatsch raus.)
Warum das alles nötig ist
- Das HW-364A hat festverdrahtetes OLED
– auf GPIO14/12. Andere Beispiele mit D2/D1? Leider falsch für dieses Board. - Zweiter I²C-Bus ist Pflicht
– sonst knallt’s bei Pullups, Pegeln und Reset. Wire.begin()ist dein Freund
– ESP8266 macht I²C eh softwarebasiert. Einfach Bus umschalten, keinSoftwareWire-Murks nötig.- Keypad will sauber gescannt werden
– Nur eine Row auf LOW, dann Spalten einlesen, Row-Bit rausfiltern.
Minimaler Bus-Switch-Code:
inline void selectBusOLED() { Wire.begin(14, 12); Wire.setClock(100000); }
inline void selectBusPCF() { Wire.begin(13, 2); Wire.setClock(100000); }
void setup() {
selectBusOLED();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
selectBusPCF();
// pcf8574.begin(…); oder Adressen scannen
}
char readKey() {
selectBusPCF();
char k = // Taste lesen…
selectBusOLED();
return k;
}
Troubleshooting
| Problem | Lösung |
|---|---|
| PCF wird nicht erkannt | Ist’s vielleicht ein PCF8574A? → andere Adressen! |
| Immer Taste „1“ gedrückt? | Rows/Cols vertauscht? Richtig: C = P4–P7, R = P0–P3 + Bitmaske setzen! |
| ESP bootet nicht mehr | Achtung: GPIO2 (D4) muss beim Start HIGH sein! |
Merksatz:
„OLED bleibt auf D6/D5. Alles andere bekommt eigene Leitungen. Wire-Bus beim Zugriff kurz umschalten.“
Viel Spaß beim Basteln und Fehler vermeiden! 😎


