Ich würde gerne an einem ESP32 mit Arduino IDE mehrere I2C Temperatur- und Luftfeuchtesensoren anschließen. Um die Zahl der ESPs (Verlustleistung, Netzteile, ...) zu reduzieren sollen dabei möglichst mehrere Sensoren an einem betrieben werden was Leitungslängen bis zu ca. 10m erfordert. Dazu würde ich ein J-Y(ST)Y 4x2x0,6 Telefon-Installationskabel so verwenden dass von jedem Aderpaar eine Leitung direkt oder per Stütz-C auf Masse liegt. Mit 1kOhm Pull-Up sehen die Signale auf dem Oszi zwar sauber aus, durch die relativ langsamen Flanken und vermutlich Eingänge ohne Schmitt Trigger kommt es jedoch immer wieder zu Störungen (fehlendes ACK, ...). Eine Möglichkeit wäre den P82B715 zu verwenden. Der kostet aktuell aber z.B. bei Digikey 6€ pro Stück. Und das Erkennen der Richtung anhand eines angehobenen Low-Pegels gefällt mir auch nicht so richtig gut. ALternativ einen kleinen Controller zum Sensor zu setzen und diesen über RS232 oder RS485 anzubinden gefällt mir vom Aufwand her auch nicht wirklich. Jetzt kam mir die naive Idee einfach die I2C Open-Collector-Ausgänge des Controllers auf die Sensorseite zu verlagern und für die Verbindung zum Controller 4 Signalleitungen zu verwenden (2x Ausgang, 2x Eingang) zusammen mit Software-I2C-Emulation. Beim Sensor hätte ich einen invertierend arbeitenden Komparator (z.B. LM393LV) mit Filter und großer eingestellter Hysterese vorgesehen. Für die Rückrichtung hätte ich ein einfaches Gatter zwischen I2C und die lange Leitung zum Controller geschaltet. Dann wäre der eigentliche I2C-Bus nur noch beim Sensor auf einem kleinen Leiterplättchen. Der Controller könnte dann durch einen High-Pegel an einem der beiden Ausgänge über den Komparator SCL oder SDA am Sensor sauber auf Low ziehen. Und er könnte die Antwort (nach angemessener Wartezeit und ggf. auch mit Filter und Schnmitt Trigger) sehen ohne die I2C-Signalform am Sensor zu beeinflussen. Mit einer SW-I2C-Library die Funktionspointer für das I/O-Handling unterstützt müsste das eigentlich ohne weitere Anpassungen ziemlich robust funktionieren. Und zur Erweiterung auf mehrere Interfaces (u.a. erforderlich wg. kollidierender Adressen) wären einfache digitale Gatter oder Multiplexer verwendbar da jetzt alle Signale (bis auf den kleinen I2C-Bus direkt am Sensor) unidirektional sind. Gibt es da evtl. schon etwas fertiges (HW und/oder SW)?
Für solche Distanzen z.B. CAN, aber ganz sicher nicht I²C!
Mit weniger Speed sind 10m kein Problem. Die Sensoren müssen ja nicht mit 400khz antworten? Wie wärs mit 100 oder 40khz?
:
Bearbeitet durch User
Ich würde es auch mit CAN machen, wenn es digital sein muß.
Frank S. schrieb: > mehrere I2C Temperatur- > und Luftfeuchtesensoren warum die Festlegung auf I2C bei diesen Kabellängen? Nimm Sensoren die mit großen Kabellängen zurecht kommen. Für draußen aber Wettergeschützt: AM2305: https://s.click.aliexpress.com/e/_DmfnSAF Wenns nur billig sein soll: AM2301: https://s.click.aliexpress.com/e/_DkenxT1
Ich hatte mal mit einem Industrieprojekt zu tun, da wurde ein digitaler Poti über I2C über 100m im Industrieumfeld angesteuert. Es geht. Und es ist einfacher, als man denkt, wenn man weiß was man tut. 3,3V I2C Pegel sollten auch auf 10m reichen. GGf. kann man einfache Pegelwandler nutzen und auf 5V I2C Bus gehen. Ist aber nicht zwingend. Und wenn die I2C Software was taugt, reagiert sie auch nicht auf jeden Pups gleich allergisch. Falk, der Schlaflose
Danke für die Antworten. Beim angedachten Sensor handelt es sich um einen Original Sensirion SHT31 der mir relativ zuverlässig erscheint und bei >5 Stck. für unter 5€/Stck. zu bekommen ist. Und der hat nunmal I2C. Zuverlässige Temperatur- und Feuchtesensoren mit CAN-Bus-Interface habe ich noch nicht gesehen. Mit einer PTFE-Membran sollte der SHT31 auch draußen relativ unempfindlich sein da man ja eh ein Thermometergehäuse als Sonnen- und Wetterschutz braucht. Da ich draußen, im Keller und in der Wohnung mehrere verteilen möchte (nicht alle an einem Controller) scheint mir der SHT31 eben ein guter Kompromiss zu sein. Der AM2305 hat lt. Datenblatt von Aosong z.B. bis zu 1% Drift/Jahr, beim Sensirion sind nur 0,25% angegeben. Letzterem Wert glaube ich auch erst mal mehr als den 1%. Und bei Aliexpress ist auch nicht explizit Aosong als Hersteller angegeben... Die Geschwindigkeit habe ich ja schon mit 1k Pull-Ups auf 10 kBit/s reduziert und die Signale sehen im Großen und Ganzen im Rahen der Bandbreite des Oszilloskops (<100MHz) auch gut aus mit relativ langsamen steigenden Flanken. Leider kommt es selbst unter Laborbedingungen trotz korrekter Adressierung immer wieder zu fehlenden ACKs (zeitweise bis zu 100%). Die fallende Flanke kann ich mit diesem Oszi nicht zuverlässig beurteilen, da könnte es zu Über- und Unterschwingern kommen die ich nicht sehen kann. Und natürlich gibt es eine Fehlerbehandlung und allergisch reagiert da auch nichts, auch wenn ein Allergietest noch aussteht. Aber wenn ich irgendwo eine Fehlerkorrektur einbaue dann werte ich auch aus wie oft die zum Tragen kommt. Ohne externe Störungen bei einem sauberen Laboraufbau erwarte ich einen fehlerfreien Betrieb über Tage bis Wochen, ansonsten taugt die Verbindung nix und ich suche nach einer Alternative. Wer weiß ob sonst bei extremen Temperaturen oder ungünstigem Mondstand die Verbindung den Betrieb nicht doch noch ganz einstellt. Der PCA9616 sieht - bis auf den Preis - zunächst relativ gut aus, durch die begrenzten Adressierungsmöglichkeiten (nur 1 Bit wählbar) des Sensors habe ich dann aber leider das Problem dass ich für einen Sensor 2 PCA9616 und für 2 Sensoren 3 PCA9616 brauche und bei mehr Sensoren weitere I2C-Busse. So richtig schön ist das leider auch nicht. Eine weitere Unschönheit wäre die Notwendigkeit einer Linienverdrahtung mit kurzen Stichleitungen, aber bei max. 2 Sensoren wäre das sogar noch hinzubekommen. Insgesamt haben solche Probleme ja genau zur Überlegung geführt eine einfache Sternverteilung mit unidirektionalen Signalen mit superbilligen Standard-CMOS-Treibern und sauberer Signalfilterung mit großer Hysterese zu realisieren. Und die Komparatoren hätten gleich die passenden open Collector Ausgänge. Auf der Leitung wäre dann ja auch gar kein echter I2C-Bus mehr sondern nur etwas aus dem man für wenige Cent wieder I2C machen kann.
:
Bearbeitet durch User
Moin, Was mich betrifft rate ich zu zwei billigen MC74HC4051B zum Umschalten von bis zu acht SHT31ern. Da sie Analog sind, funktioniert auch die beidseitige SDA Datenübermittlung. Ich würde allerdings zuerst mit LTSpice grob simulieren inwieweit die Pullups zur Kabelkapazität passen müssen um einigermassen günstige Anstiegszeiten zu haben. Auch könnte man, falls notwendig, aktive Pullups verwenden. Und dann würde ich die Baudrate so weit erhöhen bis es Ärger gibt. Dann hat man einen Anhaltspunkt wie hoch man gehen darf. Ich habe früher viel mit den SH15-25 gearbeitet und fand sie ziemlich gutmütig. Jedenfalls rate ich mit dem Oszi Bussignale auf Herz und Nieren zu prüfen um praktische Anhaltspunkte zu bekommen. Also, mach schon:-) Gruß, Gerhard
Frank S. schrieb: > sehen die Signale auf dem Oszi zwar sauber aus, Nur zur Sicherheit: Hast Du Dir die Signale auch an beiden Enden Deines 10m Kabels betrachtet? > durch die relativ langsamen Flanken Wenn Du mit langsam hier flach meinst, dann stellt sich die Frage, inwieweit die noch wirklich sauber - im Sinne der I2C Specs - sind? Frank S. schrieb: > von jedem Aderpaar eine > Leitung direkt oder per Stütz-C auf Masse liegt. Hätt ich vermutlich auch als ersten Ansatz probiert; allerdings ergibt das bei 10m halt auch einiges an Leitungskapazität, darum wärs wohl einen Versuch wert es bei den I2C Busleitungen mal ohne Masse-Partner zu probieren.
Frank S. schrieb: > Die Geschwindigkeit habe ich ja schon mit 1k Pull-Ups auf 10 kBit/s > reduziert und die Signale sehen im Großen und Ganzen im Rahen der > Bandbreite des Oszilloskops (<100MHz) auch gut aus mit relativ langsamen > steigenden Flanken. Zeige uns ein paar sinnvolle Screenshots. > Leider kommt es selbst unter Laborbedingungen trotz > korrekter Adressierung immer wieder zu fehlenden ACKs (zeitweise bis zu > 100%). Klingt nach einem verschluckten Sensor. Hast du einen Entkoppelkondensator am Sensor? https://www.mikrocontroller.net/articles/Kondensator#Entkoppelkondensator > Die fallende Flanke kann ich mit diesem Oszi nicht zuverlässig > beurteilen, Warum? Du hast doch ein gutes Oszi. > da könnte es zu Über- und Unterschwingern kommen die ich > nicht sehen kann. ??? > die zum Tragen kommt. Ohne externe Störungen bei einem sauberen > Laboraufbau erwarte ich einen fehlerfreien Betrieb über Tage bis Wochen, > ansonsten taugt die Verbindung nix und ich suche nach einer Alternative. Such erstmal nach Fehlern. Wenn so ein einfacher Aufbau im Labor nicht stabil läuft, stimmt was nicht. > Wer weiß ob sonst bei extremen Temperaturen oder ungünstigem Mondstand > die Verbindung den Betrieb nicht doch noch ganz einstellt. Jaja. Mach erstmal deine Hausaufgaben.
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.