NEWS
ESP32-GPIO0 -- I2C-Bus Problem [gelöst]
-
Hallo,
ich wollte Euch hier nur meine Erfahrungen mitteilen, bevor jemand anderes auch einen ganzen Tag einen Fehler sucht.
Ich habe einen D1-Mini, an dem ich u.a. einen Helligkeitssensor TSL2561 per I2C-Bus angeschlossen habe.
SCL an D4 = GPIO2 mit Pullup Widerstand 3K9 gegen +3V3
SDA an D3 = GPIO0 mit Pullup Widerstand 3K9 gegen +3V3.
So lief die Schaltung jetzt etwa ein Jahr.
Jetzt wollte ich die Sache um einen BME280 (Temperatur- Luftfeuchtigkeits- und Luftdrucksensor) erweitern.
Den BME280 habe ich parallel zu dem TSL2561 angelötet.
Aber der BME280 wurde in der Tasmota-Oberfläche nicht erkannt bzw. die Werte nicht angezeigt.
Die Eingabe I2CSCAN in der Konsole ergab: stat/tasmota_XXXX/RESULT = {"I2CScan":"Device(s) found at 0x39"}
0x39 ist nur der TSL2561 Helligkeitssensor, 0x76 oder 0x77 wäre der BME280 gewesen.
Die Eingabe I2CDRIVER in der Konsole ergab: stat/tasmota_XXXX/RESULT = {"I2CDriver":"8,9,10,11,12,15,16,17,...}
=> Für TSL2561 muss der Treiber Nr. 16 vorhanden sein.
=> Für BME280 muss der Treiber Nr. 10 vorhanden sein.
(für den TSL2561 und dem BME280 wird eine spezielle Firmware benötigt, die ich mit dem Tasmocompiler erzeugt habe)
Dann habe ich den BME280 an einen anderen D1-Mini angelötet, gleiche Firmware, gleiche Einstellungen (ohne TSL2561) und der BME280 wurde nicht erkannt. An einem ESP01S lief der BME280.
Mit einem Oszilloskop konnte ich sehen, dass das SDA-Signal zwischen ca. 0,5V und 3V wechselte.
Das SCL-Signal wechselte aber nur zwischen ca. 1,8V und 3V, 1,8V sind zu wenig als L-Pegel (TSL2561 nicht angeschlossen)
Für mich war es unlogisch, warum der TSL2561 funktionierte, der BME280 nicht, trotz des Pegels.
Am nächsten Morgen fiel mir ein, dass der SCL am D3 des D1-Minis angeschlossen ist. Der D3 ist der GPIO0. Und der GPIO0 hat eine Sonderstellung beim Flashen des ESP32.
Also SCL an D4 (GPIO2) angelötet, Einstellung angepasst, Reboot und es funktioniert!!!!!
Dass der SCL am GPIO0 ist, ist dem TSL2561 anscheinend egal, aber der BME280 hat in dieser Kombination Schwierigkeiten.
Vermutlich gibt es noch andere I2C-Chips die so funktionieren oder Schwierigkeiten haben.
Bei einem Blick in die Schaltung des D1-Mini sieht man, dass der GPIO0 über den Transistor U2 geschaltet wird. Vermutlich macht dieser Transistor die Verwendung des Pins etwas unbrauchbar, je nach Signalpegel von DTR und RTS.
Soweit meine Erfahrungen.