Forum: Haus & Smart Home I2c und esp8266 ((sonoff / tasmota)


von Ingo S. (ingo_s460)


Lesenswert?

Hallo zusammen, ich habe mal eine Frage zu i2c mit einem esp8266. Ich 
versuche gerade einen BH1750 und einen BME280 an einem sonoff 4ch mit 
der Firmware von tasmota zu betreiben. Leider sind meine Elektronik 
Kenntnis begrenzt. Ich muss mich mehr oder weniger in alles reinlesen.
Wie auch immer.
Wenn ich diese beiden, genannten Sensoren unmittelbar in der Nähe der 
GPIOs platziere, denn läuft die Datenübertragung ohne Probleme. Wenn ich 
aber einen der beiden Sensoren mit einem längeren Kabel verbinde (mein 
letzeter Versuch etwa 1m), dann bekomme ich nach einiger Zeit keine 
Signale mehr von diesem Sensor.
Ich habe aktuell normales Telefonkabel benutzt. 8adrig, immer zwei 
Drähte verdrillt. Sdl und sda miteinander verdrillt, und GND und VCC 
miteinander verdrillt. Habe ich eventuell noch die falsche verdrillung?
Oder wo könnte das Problem bei mir liegen?
Wie gesagt, ich habe nur begrenztes Wissen über diese Materie. Über 
hilfreiche Antworten würde ich mich sehr freuen.
Gruß Ingo

von Jens M. (schuchkleisser)


Lesenswert?

Pullups eingebaut?
Wie schnell läuft der Bus?

von Ingo S. (ingo_s460)


Lesenswert?

Hi Jens, Pullups habe ich nicht drin.
Müsste ich je einen Widerstand zwischen SDL/ VCC und SDA / VCC machen? 
So 2k / 3k ?
Die Busgeschwindigkeit weiß ich leider nicht. Kann man die in der 
Console von tasmota abfragen?

Vielleicht müsste ich den Sensor mit der Kabelverlängerung mit einer 
externen Spannung versorgen?
Wie gesagt einige Zeit läuft es, vielleicht bricht die Spannung 
irgendwann zusammen.

Gruß Ingo

von Jens M. (schuchkleisser)


Lesenswert?

Wenn die Pullups fehlen ist das kein Wunder, eher eins das es überhaupt 
geht.
Ja, SDA und SCL müssen an VCC, so 3k3 oder 4k7 sollten schon gehen.
Kann aber sein, das deine Module schon was an bord haben, das magst du 
wohl erst nachsehen. Vielleicht kann man via Lötbrücke was aktivieren.

von Ingo S. (ingo_s460)


Lesenswert?

Vielen Danke für die Hilfe,
erstmal läuft das System nun mit zwei 4k7 Widerständen.
Nun muss ich abwarten. Ich denke spätestens morgen früh kann ich 
feststellen ob es geholfen hat. In der Regel war der BH1750 (der Sensor 
am Kabel) nach 3-4 Stunden weg.
Ich melde mich dann nochmal ob ich Erfolg hatte oder nicht.

von Ingo S. (ingo_s460)


Lesenswert?

Es hat leider (oder zum Glück) nicht sehr lange gedauert bis der BH1750 
wieder weg war. Vielleicht eine halbe Stunde.

Dann habe ich den anderen Sensor (BME280) erstmal entfernt. Somit sollte 
ein vermeintliches Spannungsproblem weg sein. Leider auch ohne Erfolg. 
Nach einer weiteren Zeit war der am längeren Kabel hängenden BH1750 (nun 
allein am I2C Bus) wieder weg.

Nun hatte ich auf Github in einem tasmota-Thread gelesen, man sollte den 
Serial-log ausschalten. Ich habe es mal gemacht.
Hat leider auch nichts gebracht, das Signal war nach einiger Zeit wieder 
weg. Wenn ich denn Sonoff über die tasmota Firmware neu starte ist der 
Sensor wieder verfügbar, aber eben nur für eine gewisse Zeit.

Die beiden 4k7 Widerstände hängen immer noch mit dran. Sollte ich die 
Werte eventuell ändern?

Welche Fehler- Möglichkeiten gibt es denn noch? Ich weiß so langsam 
nicht mehr weiter.

: Bearbeitet durch User
von ... (Gast)


Lesenswert?

welche Messgeräte stehen dir zur Verfügung?
reagiert immer nur ein Sensor nicht mehr? und lässt sich das Problem 
durch einen PowerCycle des betroffenen Sensors beheben?
wie anfällig ist dein Aufbau auf ESD/EMI (mit Kaminanzünder und Handy 
testen)
ist dein Software fehlerfrei bzw, läuft dein esp noch korrekt wenn die 
Sensoren verloren gehen?
nutzt du die Sensoren auf fertigen BoB oder hast da da selber etwas 
zusammengenagelt? -> Bufferkondensator, ESD-Protetcion, ev. 
Serienterminierung der Leitungen...

von Ingo S. (ingo_s460)


Lesenswert?

Also an Messgeräten habe ich leider nur ein Multimeter für Spannung und 
Strom. Die Software scheint stabil zu laufen. Die Probleme traten ja 
erst auf als ich das Kabel des Licht Sensors verlängert habe.
Esd oder emi habe ich nicht getestet, muss ich erst lesen wie man das 
macht bzw. was das ist. Sorry.
Den Sonoff (esp) scheint es egal zu sein ob die Sensoren da sind. Ich 
kann die Relais weiterhin schalten. Die Ausgabe in der Console ist auch 
ganz normal, nur das die Werte der Sensoren eben fehlen.
Kondensatoren habe ich da nicht drin. Und die Sensoren hängen, bzw 
aktuell hängt nur einer an diesen beiden GPIOs, an denen nichts weiter 
dran ist.

von Pete K. (pete77)


Lesenswert?

Du gibst sehr wenig Infos über die Hardware und deren Verschaltung. Was 
sind das für Module?
Bei einem Restart des ESP8266 wird auch mitgegeben, warum der restartet 
wurde.

Was ist sonst noch bei Dir über Tasmota konfiguriert? Screenshots?

von Markus -. (mrmccrash)


Lesenswert?

Probiere mal, ob es besser wird, wenn du SDA und SCL jeweils mit GND in 
ein Paar auf der Leitung legst. Nicht dass die sich gegenseitig stören.

von ... (Gast)


Lesenswert?

https://www.nxp.com/docs/en/application-note/AN10658.pdf
https://www.i2c-bus.org/i2c-primer/common-problems/
https://www.i2c-bus.org/i2c-primer/analysing-obscure-problems/blocked-bus/

wenn der µC noch läuft, programmier dir ein paar Statusausgaben um zu 
sehen, wo es am I2C klemmt.
am einfachsten einmal die den Bus neu initalisieren...

Pull-Up Widerstände so niederohmig wie möcglich wählen, Stichleitungen 
vermeiden bzw. Serienterminierung einfügen;

von Ingo S. (ingo_s460)


Lesenswert?

Hallo und vielen Danke für eure Hilfe,
leider blieben meine Versuche ohne Erfolg. Wie es aussieht ist das 
einzige Problem wirklich die Kabellänge. Mit einem Meter Kabel und 4k7 
Widerstand lief der BH1750 zumindest schon mal einen halben Tag, aber 
dann war er wieder weg. Der ESP macht dann keinen Neustart. Der Sensor 
ist einfach weg.
Wieder kürzeres Kabel (ca. 10cm) genommen, alles läuft bestens. Ich 
hatte ebenfalls versucht die SDA und SCL Leitungen jeweils mit GND 
verdrillt zu betreiben. Leider auch ohne erkennbaren Erfolg.
Mit einem noch längeren Kabel (ca. 5m) bekomme ich vom Sensor kein 
Signal mehr. Ich habe zwei verschiedene Sensoren ausprobiert (BH1750 
GY30 und BH1750 GY302) beide mit dem gleichen Ergebnis.
Leider kann ich da nichts programmieren und meine Messmöglichkeiten sind 
auch begrenzt.

von Jan L. (ranzcopter)


Lesenswert?

Ingo S. schrieb:
> Hallo und vielen Danke für eure Hilfe,
> leider blieben meine Versuche ohne Erfolg. Wie es aussieht ist das
> einzige Problem wirklich die Kabellänge.

Ich hatte ein ganz ähnliches Problem - schau‘ dir doch mal den bereits 
erwähnten P82B715D an. Mit dem auf beiden Seiten war das Problem sofort 
gelöst, und die dafür nötige Schaltungsänderung simpel nach DaBla...

von Olaf (Gast)


Lesenswert?

> letzeter Versuch etwa 1m), dann bekomme ich nach einiger Zeit keine
> Signale mehr von diesem Sensor.

Hm..fuer mich liesst sich das so als wenn die Firmware von jemanden 
programmiert wurde der keine Ahnung hatte.

Du hast sicher ein Problem mit der Qualitaet der Verbindung. Da magst du 
einiges ueber richtige Pullups oder bessere Verkabelung  verbessern 
koennen.
Es ist aber vollkommen normal das es bei jeder Art Datenuebertragung 
auch mal zu einem Fehler kommt. Durch eine vernuenftige Hardware sollte 
das selten passieren, aber selbst wenn es nur dreimal im Jahr passiert, 
sowas kann immer mal vorkommen.

Deshalb muss die Firmware solche Fehler erkennen. Sie muss dann die 
uebertragung wiederholen und/oder das I2C Interface im Mastercontroller 
neu aufsetzen.

Jetzt ist es aber auch so das nicht nur der Master haengen kann, auch 
deine I2C-Bausteine koennen sich weghaengen. Wenn da passiert dann 
ziehen sie gerne mal SDA dauerhaft auf Low. In dem Falle ist es 
notwendig das du bei einem Problem in der Software einfach mal ein paar 
clocks rausschickst. Dann erholt sich die Statemachine im Slave 
normalerweise wieder.

Und dann gibt es noch Bausteine die auch noch die SCL leitung auf Low 
ziehen wenn sie sich weghaengen. Wenn das passiert hast du die 
Arschkarte und musst in der Lage sein den slave kurz abzuschalten.
Es gibt neuere I2C-ICs die haben eine minimale Taktrate um dieses 
Problem zu umgehen.

Man sieht da leider sehr deutlich das I2C nur fuer die Verbindung 
innerhalb eines Geraetes und auch nur fuer Consumerzeugs wie TVs oder 
Videorecorder entwickelt wurden. Fuer industrielle Anwendungen und dazu 
gehoert im Prinzip alles was 24/7 im Betrieb ist, ist der Bus leider 
eher kacke.

Wenn ihr mal was lernen wollt dann lest mal verschieden alte 
Datenblaetter des LM75 und staunt was da im laufe der Zeit an neuen 
Features eingebaut wurden. .-)

Olaf

von Εrnst B. (ernst)


Lesenswert?

Olaf schrieb:
> Hm..fuer mich liesst sich das so als wenn die Firmware von jemanden
> programmiert wurde der keine Ahnung hatte.

Naja, vieles davon ist dem verwendeten Arduino-Framework geschuldet.

Olaf schrieb:
> Deshalb muss die Firmware solche Fehler erkennen. Sie muss dann die
> uebertragung wiederholen und/oder das I2C Interface im Mastercontroller
> neu aufsetzen.

Wiederholen macht sie. 5 mal im Sekundenabstand. Nur wenn alle 5 
aufeinanderfolgenden Versuche fehlgeschlagen sind, wird der Sensor 
offline gestellt.
Lässt sich umkonfigurieren:
1
  const uint8_t SENSOR_MAX_MISS = 5; // Max number of missed sensor reads before deciding it's offline

"I²C im Mastercontroller neu aufsetzen" macht bei Software-I²C wenig 
Sinn.

Olaf schrieb:
> In dem Falle ist es
> notwendig das du bei einem Problem in der Software einfach mal ein paar
> clocks rausschickst.

Das wäre möglich, wenn das ganze halt nicht so schön tief hinter der 
"Wire" / "twi.h"-Abstraktion versteckt wäre. Um das ganze konzeptionell 
sauber hinzubekommen, bräuchte man ein "Wire.reset()" o.Ä., was die für 
die jeweilige Hardware möglichen Rücksetzoptionen, inkl. das von dir 
vorgeschlagene raustasten "leerer" SCKs implementiert.

von Helmut -. (dc3yc)


Lesenswert?

Wenn ich lese, dass zwischen ESP und Sensor 1m Kabel beim I2C-Bus sind, 
dann ist das m.M. von vorne herein zum Scheitern verurteilt. I2C oder 
IIC bedeutet Inter-Ic-Bus. Das bedeutet, dass er für eine Verbindung 
zwischen IC's auf einer Leiterplatte spezifiziert wurde. Da ist keine 
Fehlerüberwachung oder Treiber für lange Leitungen vorgesehen. Wenn du 
längere Abstände zwischen Sensor und µC hast, sind andere Bussysteme 
vorzuziehen. Das Lesen des entsprechenden Artikels bei Wikipedia hilft 
auch!

von Olaf (Gast)


Lesenswert?

> Wenn ich lese, dass zwischen ESP und Sensor 1m Kabel beim I2C-Bus sind,
> dann ist das m.M. von vorne herein zum Scheitern verurteilt. I2C oder
> IIC bedeutet Inter-Ic-Bus. Das bedeutet, dass er für eine Verbindung
> zwischen IC's auf einer Leiterplatte spezifiziert wurde.

Naja, das ist zwar grundsaetzlich richtig. Ich wuerde auch nicht mit I2C 
meine Wohnung verkabeln. Aber eine der ersten Anwendungen wo ich I2C 
gesehen habe war damals in den Video2000 Recordern und wenn man bedenkt 
was da fuer ein Berg an Elektronik drin war dann hatten die vermutlich 
auch schon 1m Buslaenge. :)

Also technisch machbar sind 1m sicherlich schon. Zumindest soweit das 
man nur alle paar Wochen mal einen Bushaenger hat. Aber klar, 100% 
Zuverlaessigkeit wird man damit nicht erreichen.

Olaf

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.