Forum: Mikrocontroller und Digitale Elektronik ESP32 - SPS30 & anderen Sensoren an I²C verliert ab und zu die Verbindung


von Stefan (kopernikus82)


Lesenswert?

Hallo liebe Foren-Gemeinde,

ich versuche eine Wetterstation zu bauen (der Weg ist das Ziel. Das ein 
oder andere Problem habe ich schon gelöst, bei folgendem stehe ich auf 
dem Schlauch:

Verbaut habe ich:
- ESP 32
- Sensirion SPS30
- SHT31D (Adafruit)
- DPS310 (Adafruit)
- LTC4311 I2C Extender / Active Terminator (Adafruit)

Die Verkabelung ist so erfolgt, dass ich die qwiic Kabel mit Stecker 
benutzt habe. Bzw. eins durchgeschnitten, an das eine Ende den ESP 
angelötet, am anderen Ende den SPS.

Dann ist die SDA und SDL jeweils mit einem 10K an 5V verbunden.

Der Sketch kommt mit Arduino IDE auf dem Controller. Der verbindet zum 
WiFi, MQTT und fragt dann der Reihe nach die Sensoren ab und verschickt 
die Daten per MQTT und geht dann für 5min schlafen. So, soweit läuft das 
alles.
Vielleicht mal als Hinweis. Ich habe mich da mühevoll reingearbeitet und 
natürlich sehr oft aus den Beispielsketchen kopiert. Vermutlich geht das 
alles besser und sauberer, aber ich weiß es halt nicht besser.

So, wie geschrieben eigentlich gehts. Aber eigentlich und scheiße sind 
nah beieinander, manchmal bleibt der Sketch hier hängen:
1
  while (sps30_probe() != 0) {
2
    Serial.print("SPS sensor probing failed\n");
3
    delay(500);
4
  }

Das tut er aber für mich nicht nachvollziehbar. Das passiert manchmal 
nach 1h, manchmal nach 5 Tagen, auch schon mal nach 2 Wochen.... Einmal 
kurz den Stecker ziehen (ESP) und neu starten behebt das Problem und 
alles läuft wieder. (Ist natürlich lästig und das eigene Ego will 
natürlich das es läuft).

Ich habe jetzt sehr viele Foren durchsucht, finde aber weder (ich gehe 
davon aus das ich falsch suche weil ich es nicht besser weiß) ähnliche 
Probleme noch eine herangehensweise das Problem zu beheben.

Hat zufällig da draußen jemand eine Idee wo/was man da mal nachgucken 
oder ausprobieren kann?

Grüße
Stefan

von Michael D. (nospam2000)


Lesenswert?

Hi Stefan,

Bei den Informationen hilft nur raten.

Mit welcher Clock-Speed betreibst du den i2c bus? Hast du es mal mit 100 
kHz versucht?

schau auch mal hier:
https://github.com/paulvha/sps30/issues/5#issuecomment-501467602

  Michael

Beitrag #7409345 wurde vom Autor gelöscht.
von Klaus R. (klara)


Lesenswert?

Michael D. schrieb:
> Mit welcher Clock-Speed betreibst du den i2c bus? Hast du es mal mit 100
> kHz versucht?

Selbst 100 kHz müssen nicht sein.
mfg Klaus

von Michael D. (nospam2000)


Lesenswert?

Vielleicht noch eine Idee:

Wenn der i2c bus hängt, dann trenne nacheinander die anderen 
Bus-Teilnehmer ab, vielleicht fängt sich der SPS30. Wenn du den 
Störenfried identifiziert hast, dann lass ihn mal weg.

Clock-Stretching ist eine beliebte Fehlerursache. Der SPS30 verwendet 
das wohl nicht, aber vielleicht andere Bus-Teilnehmer.

 Michael

von Stefan (kopernikus82)


Lesenswert?

Erstmal schon mal herzlichen Dank an alle die geantwortet haben nach so 
kurzer Zeit.

@nospam2000
Ich teile gerne weitere Informationen wenn ich weiß welche.
Am Clock Speed vom I²C habe ich nichts geändert, werde aber gleich mal 
gucken wie das geht und dann auf max. 100kHz runter gehen

Müsste das mit dem Clock Streching dann nicht als Problem regelmäßig und 
nachvollziehbar auftreten ? Denn die Intervalle in denen das passiert 
würde ich als "willkürlich" beschreiben.

@klara
Was würdest Du denn sagen das als Clock-Speed reicht?

von Michael D. (nospam2000)


Lesenswert?

Stefan schrieb:
> Ich teile gerne weitere Informationen wenn ich weiß welche.

Ein Bild sagt mehr als tausend Worte :-)

Das würde z.B. zeigen, wie die Komponenten miteinander verbunden sind 
(in Linie oder Stern), wie lange sind die Kabel, wo sitzen die Pullup 
Widerstände, etc..

Der ESP32 ist eine 3,3V MCU, du solltest daher alles mit 3,3V betreiben 
oder  ggf. "Levelshifter" verwenden. Eine Pullup-Spannung von 5V passt 
da nicht dazu.

Die Adafruit DPS310 und SHT31-D Boards unterstützen wohl beide 
Spannungen,
der SDS30 auch, d.h. du solltest den Pullup mit 3,3V verbinden.

Wozu ist der LTC4311 drin? Jedes Bauelement macht die Schaltung 
komplizierter.

 > Was würdest Du denn sagen das als Clock-Speed reicht?

So langsam wie nötig, solange man Probleme hat. Du kannst mal bis 20 kHz 
oder sogar weiter runtergehen.

 Michael

von Klaus R. (klara)


Lesenswert?

Stefan schrieb:
> @klara
> Was würdest Du denn sagen das als Clock-Speed reicht?

Bei einem D1 Mini konnte ich bis auf 10 kHz heruntergehen. Prinzipiell 
kannst Du noch tiefere Frequenzen verwenden. Das macht aber wohl der 
Treiber nicht mit. Der Treiber unterstützt auch Clock-Stretching und 
dadurch wird wohl eine mindest Frequenz nötig sein. Für den Progammierer 
war es eben einfacher.

Eine Halbierung der Taktfrequenz verdoppelt die Reichweite. Ich konnte 
einen PCF8754 über 100 m 4x0,6 Telefonkabel betreiben. Aber frag mich 
nicht nach der Frequenz. Das ist schon länger her. Es könnte 1 kHz 
gewesen sein.
mfg klaus

von Stefan (kopernikus82)


Lesenswert?

Dann werde ich den LTC4311 mal rausnehmen und die Pull-Ups an 3,3V 
klemmen und den Clock Speed reduzieren :-D
Wird allerdings ein paar Tage dauern da ich beruflich gerade unterwegs 
bin. Und ein Foto kann ich auch nachreichen. Wobei ich sagen muss das es 
durch das ganze "gebastel" mit den Widerständen eher wie kraut und rüben 
am ESP aussieht....

von Pete K. (pete77)


Lesenswert?

Stefan schrieb:
> Das tut er aber für mich nicht nachvollziehbar. Das passiert manchmal
> nach 1h, manchmal nach 5 Tagen, auch schon mal nach 2 Wochen.... Einmal
> kurz den Stecker ziehen (ESP) und neu starten behebt das Problem und
> alles läuft wieder. (Ist natürlich lästig und das eigene Ego will
> natürlich das es läuft).

Du könntest Die Fehlerbehandlung so umschreiben, dass es ein Reset gibt, 
wenn z.B. nach 100 Fehlern es immer noch kein Erfolg gibt. So ist es ja 
nur eine Endlosschleife.

Und schau auch mal nach den Pullup-Widerständen auf den beteiligten 
Sensor-Modulen (falls Du solche benutzt). Oft bringt jedes Modul seine 
eigenen Pullups mit.

Also: Schaltplan und Aufbau sowie Software zeigen :-)

von Wastl (hartundweichware)


Lesenswert?

Stefan schrieb:
> Hat zufällig da draußen jemand eine Idee wo/was man da mal nachgucken
> oder ausprobieren kann?

Ohne den Schaltplan und ein Bild vom Aufbau gesehen zu haben rate
ich mal: Die Verkabelung ist zu lang und nicht vor Einstreuung von
Störungen geschützt. Der I2C Bus ist hochohmig und daher sehr
empfindlich auf alle Arten von Leitungsbeeinflussungen.

"Unbedarfte" User sind der Meinung mit I2C könnte man alles
machen, so wie es die vielen Maker-Seiten auch vormachen. Dabei
reicht z.B. ein einfacher Klacks eines Relais um alles mögliche
an Fehlern zu verursachen.

Dann noch die übliche Geschichte mit den Abblock-Kondensatoren,
von denen viele Anfänger und Maker-Seiten-Betreiber nichts
wissen (wollen).

von Stefan (kopernikus82)


Lesenswert?

So, eine erste Rückmeldung.

Nachdem ich im Sketch eingebaut habe, dass der I²C Bus "nur" noch mit 
20kHz
läuft und nicht mehr mit 100kHz (Standard), ist das Problem nicht mehr 
aufgetreten.

Lange Kabel habe ich versucht zu vermeiden, wobei ich im zusammen 
gebauten Zustand auf unter 50cm komme (geschätzt), dass dürften aber 
eher deutlich weniger sein.
Ich bin aber ganz bei Dir, dass ich keine Ahnung habe, wie ich das Ding 
vor der beeinflußung durch Störungen schützen kann.

Ich bin mir auch relativ sicher, dass man mit I²C nicht alles machen 
kann, aber es war für meine herangehensweise erst mal das einfachste. 
Das hat also nicht den anspruch, eine gute Lösung zu sein.
Abblockkondensatoren habe ich auch noch nie gehört, weiß aber jetzt 
zumindest mal, dass es sowas gibt und kann zumindest versuchen mir das 
anzulesen.

Bei den Makerseiten bin ich auch ganz bei Dir. Ich versuche auch, den 
kompletten Bauplan, Sketch usw. online zu stellen:
https://nothnagel.org/wetterstation/
Mein Anspruch ist jedoch, dass das auch später anstandslos klappt. Daher 
gibts auch unten einen Punkt "Fails" bei dem man dann zumindest die 
Change hat auch mal zu lesen, wie sich das alles entwickelt hat.

Fotos und Schaltplan werde ich nachreichen damit das dann hier auch 
komplett ist.

Ich kann also nur noch herzlich Danke sagen und hoffe, dass es wirklich 
an der Frequenz vom Bus lag.

von Harry L. (mysth)


Lesenswert?

Stefan schrieb:
> jeweils mit einem 10K an 5V verbunden.

10k ist zu hochohmig!
Nimm mal ~3,3k!

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.