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
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
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.
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.
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
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...
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.
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?
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.
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;
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.
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...
> 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
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.
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!
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.