mikrocontroller.net

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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Ingo S. (ingo_s460)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Pullups eingebaut?
Wie schnell läuft der Bus?

von Ingo S. (ingo_s460)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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:
  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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.