Forum: Mikrocontroller und Digitale Elektronik Daten aus I2C zum PC, grosse Distanz


von Harald (Gast)


Lesenswert?

Mein Chef hat einen abenteuerlichen Auftrag "an Land gezogen" (naja, 
noch nicht ganz, aber er möchte dem Auftraggeber, einem Verein, "etwas 
gutes tun").

Es gibt 8 Sensoren, verteilt auf etwa 60x30 Meter, die sollen Daten an 
einen zentralen PC/SBC schicken (alle 15 Sekunden), der stellt sie per 
SMB bzw HTTP anderen Rechnern des Auftragsgebers (die sind nicht unser 
Bier) zur Verfügung.

Projektdauer knapp 1 Jahr, also keine Dauerlösung.

Probleme:

Die Sensoren haben als Schnittstelle I2C, das ist nicht veränderbar. I2C 
geht nicht über diese Distanzen. Zudem muss der "zentrale" PC in einem 
Gebäude an der Schmalseite und nicht im Zentrum stehen. Also lange 
Leitungen.

Das ganze in einer Stadt mit etwa 30-40 WLANs im Umfeld, fällt also aus.

Meine Idee dazu:

Jeder Sensor bekommt einen eigenen SBC, der die Umsetzung von I2C zu 
Ethernet macht und SMB (Samba) und HTTP (Lighttpd) zur Verfügung stellt.

Als SBC habe ich den Orange Pi Zero ausgeguckt, der hat on board die 
Möglichkeit, die Pins 4/5 und 7/8 aus der RJ45-Buchse zum auszuleiten. 
Kostet incl. Einfuhrumsatzsteuer um die 10 Euro, plus Spannungswandler 
unter 1 Euro, plus eine kleine microSD-Karte, plus ein kleines einfaches 
regendichtes Gehäuse.

Zentrale Stromversorgung über PoE; damit die Spannungsverluste über die 
grosse Entfernung nicht zu gross sind, bekommt jeder SBC einen eigenen 
Spannungswandler. Die zentrale Einspeisung der Spannung über ein 
einfaches 8-er Patchfeld: Pins 1,2,3,6 werden auf Ethernet gelegt, Pins 
4,5,7,8 auf die Versorgung.

Ein kleines Python-Programm, das alle 15 Sekunden aus den RAW-Werten 
human-readable macht und zentral abspeichert.

Die Leitungen legt der Auftraggeber, wegen der niedrigen Datenraten 
reicht Telefon 4x2 bzw. Cat5 o.ä. je nach Meter-Preis. Ist zwar 
draussen, aber das wird für 1 Jahr schon halten.

Alternativen:

WLAN fällt aus (s.o.), RS232 etc ebenso. Ein PIC18F97J60 kann zwar 
Ethernet, die Entwicklung und Programmierung eines Boards wäre 
wesentlich aufwändiger und teurer.

Hat jemand von Euch dazu Ideen bzw eine preiswertere Lösung?

von dummbeutel (Gast)


Lesenswert?

> ich den Orange Pi Zero ausgeguckt
Kennst du nichts anderes oder kannst du nichts anderes?

Im Aussenbereich wuerde ich nur LWL benutzen.
Oder wenn der Datendurchsatz so laecherlich gering ist:
433 MHz oder 868 MHz.

von Wolfgang (Gast)


Lesenswert?


von vn nn (Gast)


Lesenswert?

Harald schrieb:
> Ein PIC18F97J60 kann zwar
> Ethernet, die Entwicklung und Programmierung eines Boards wäre
> wesentlich aufwändiger und teurer.

Schwer vorzustellen, schlimmstenfalls halt Arduino oder ähnliches 
nehmen.

Harald schrieb:
> Hat jemand von Euch dazu Ideen bzw eine preiswertere Lösung?

https://www.nxp.com/docs/en/data-sheet/PCA9615.pdf

von Wolfgang R. (wolfgang_r)


Lesenswert?

> I2C geht nicht über diese Distanzen.
...
> Hat jemand von Euch dazu Ideen bzw eine preiswertere Lösung?

Es ist kein Problem den bidirektionalen I2C-Bus mittels des schon 
erwähnten PCA9600 in zwei unidirektionale Übertragungskanäle zu 
konvertieren und diese dann z. B. über CAN-Transceiver (als 
differentielle Signale) zu übertragen.

Je nach Kabelqualität (unshielded/shielded), Länge und Geschwindigkeit 
kann man die Flankensteilheit der Signale gezielt reduzieren um 
Abstrahlung zu vermeiden.

Ich nutze CAN-Tansceiver um I2C Kommunikation über längere Strecken zu
übertragen. 400 kBit/s bei 100 m mit recht primitiven Kabeln gehen ohne
Probleme.

Für deine Anwendung reichen wahrscheinlich 10 kBit/s - da kannst du - 
bei verringerter Flankensteilheit - 2x2 Telefonkabel nehmen (+ ein paar 
Adern als Spannungsversorgung).

An Kosten für diese "I2C-Konvertierer" sollten 20-25 Euro (mit Platine) 
je Gerät reichen. Du brauchst dann 8 Konvertierer für die Sensoren und 
einen an der Zentrale. An der Zentrale hat dein Raspi oder Orange Pi 
Zero oder was auch immer I2C und gut ist.

Aus meiner Sicht eine einfache, robuste Lösung.

von peta (Gast)


Lesenswert?

lorawan?

von Sebastian R. (sebastian_r569)


Lesenswert?

Harald schrieb:
> RS232 etc ebenso

Was spricht gegen die Verwendung von Bussen und Protokollen, die genau 
dafür gemacht wurden?
MODBUS und CAN, oder für Zweidraht (Strom + Kommunikation auf einer 
Leitung) dann HART, KNX oder Power-LAN?

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

peta schrieb:
> lorawan?

Mit einem eigenen Gateway und der dann erforderlichen autarken 
Stromversorgung für die Sensoren, dürfte das deutlich aufwendiger 
werden.

von PittyJ (Gast)


Lesenswert?

Orange Pi Zero:
Also ich hätte etwas bekannteres genommen, wo man auch einfach Software 
und Support (z.B. hier) bekommen kann. Und das ist eigentlich nur eine 
Raspi-Bauform.


Ich habe auch auf einen normalen Arduino ein Wiznet Ethernet Shield. Das 
reicht für UDP Datagramme. Damit könnte dann der Arduino die I2C 
Sensoren lesen und über Ethernet weiter verschicken. Und Ethernet-Kabel 
sollen bis 90 Meter gehen.

von W.Nickel (Gast)


Lesenswert?

Wolfgang schrieb:
> Mit einem eigenen Gateway und der dann erforderlichen autarken
> Stromversorgung für die Sensoren, dürfte das deutlich aufwendiger
> werden.

Wozu Gateway? Wenn man nur LoRa nimmt (ohne WAN/Sigfox/TTT etc.), kann 
man zwei Arduinos miteinander reden lassen. Einer liest die Daten vom 
Sensor, der andere gibt sie über serial an den PC aus.

von Harald (Gast)


Lesenswert?

Radiocrafts RC232, auf PC Seite gibt es den in Form eines USB-Sticks. 
Zahlreiche Frequenzbänder, gibt es auch als selbstorganisierende 
Mesh-Module (einen macht mach als Master, der Rest dockt sich quasi 
„automatisch“ an das Netzwerk an.

von Stefan F. (Gast)


Lesenswert?

Für eine Quick&Dirty Lösung scheint mir dein Ansatz mit dem Orange Pi 
Zero und Python angemessen.

Allerdings könnte die Länger der zu vernetzenden Strecke ein Problem 
werden. War da nicht was mit max. 100 Meter?

Solch lange Strecken sind mit RS422 (auf dem gleichen Kabel) allerdings 
problemlos machbar. CAN würde in die selbe Richtung gehen und bringt 
zudem noch automatische Lösung von Kollisionen mit sich.

Vielleicht nimmst du doch besser einen CAN fähigen Mikrocontroller. Es 
gibt dazu fertige Boards samt Treiber.

von Harald (Gast)


Lesenswert?

Ich habe mir mal die Lösungen mit PCA9600 und CAN angesehen, und auch 
mit den Leuten vom Förderverein bzw dem Institut telefoniert.

Aber: 1. PCA9600 plus CAN etc ist zwar auf den 1. Blick schön (denb 
PCA9600 kannte ich noch nicht), aber alles zu umständlich, da muss ich 
Platinen bauen und testen, das kostet Zeit und damit Geld und 2. der 
fest vorgegebene Sensor hat gleich 2 I2C-Adressen, die nicht 
veränderlich sind. Da ist ein Sensor für "Bodenkapazität" drin (was auch 
immer es ist, ich habe es nicht kapiert) sowie ein Sensor für 
Temperatur, Luftfeuchte und Luftdruck, ich vermute mal ein BME280 weil 
der so klein ist (es wird im Projekt aber nur die Temperatur 
ausgewertet).

Wir machen das nur, weil mein Chef ein Kumpel von dem Vorsitzenden des 
Fördervereins ist und das Angebot einer Spezialfirma für ein "Auswerte- 
und Speichermodul" pro Stück über 1500 + Märchensteuer für jeden 
einzelnen  Sensor ! liegt, insgesamt also knapp 15000 Euro, das Geld hat 
der Verein für dieses kleine Projekt nicht locker. Also Q&D wie stefanus 
schrieb durch uns.

Einen Orange Pi Zero sowie einen passenden Buck-Konverter habe ich 
zuhause, da werde ich mal einen Prototypen zusammenklopfen, das 
Python-Progarmm dürfte um 30-40 Zeilen haben, I2C habe ich damit schon 
mal gemacht, da dürfte schnell erldigt sein. Der Zero hat eben den 
Vorteil, dass man PoE (allerdings nicht normgerecht) machen kann. Sorge 
macht mir wegen der Länge nicht die Ethernet-Verbindung sondern die 
Energieversorgung, da werde ich mal 70m Kabel abrollen den Orange Pi 
dranhängen und den Spannungs-Abfall bzw. -Verlauf messen.

Trotzdem vielen Dank an alle.
Harald

von Guido Körber (Gast)


Lesenswert?

Es gibt Leitungstreiber für I2C die für so was geeignet sind.

Ansonsten gäbe es die Option auf RS422 oder RS485 zu wandeln. Damit kann 
man ein paar 100 m Überbrücken. Bei RS485 könnten sogar alle Sensoren 
auf einen Bus gepackt werden, es wäre also keine Point-to-Point 
Verkabelung notwendig.

von Wolfgang R. (wolfgang_r)


Lesenswert?

Harald schrieb:
> Ich habe mir mal die Lösungen mit PCA9600 und CAN angesehen, und auch
> mit den Leuten vom Förderverein bzw dem Institut telefoniert.
>
> Aber: 1. PCA9600 plus CAN etc ist zwar auf den 1. Blick schön (denb
> PCA9600 kannte ich noch nicht), aber alles zu umständlich, da muss ich
> Platinen bauen und testen, das kostet Zeit und damit Geld...

Falls du doch nochmal über diese Lösung nachdenken willst oder musst:

Platinen bauen brauchst du nicht unbedingt. Ich nutze diesen 
LongRange-I2C (also PCA9600+CAN-Transceiver+Steuerung der 
Flankensteilheit) auf Modulen mit den MCP23017 und 16 Eingängen mit OKs 
bzw. 32 Ausgängen schon seit Jahren - das funktioniert prächtig. Den 
Schaltungsteil, der aus I2C den LongRange-I2C macht, habe ich (zusammen 
mit einem Spannungsregler) jetzt mal separat auf ein kleines Platinchen 
gepackt. Leerplatinen könntest du von mir bekommen - zumindest wenn es 
nicht sehr eilig ist.

Das Thema der I2C-Adressierung deiner Sensoren musst du natürlich davon 
unabhängig lösen. Du weißt, dass es 8-fach I2C Multiplexer gibt? 
TCA9548A - der wird schon mal gerne zusammen mit den BME280-Sensoren 
(eben wegen der Adressierungsproblematik) genommen. Damit hast du 8 
einzelne I2C auf denen du jeweils die gleichen Adressen haben kannst und 
fragst die 8 I2C einen nach dem anderen ab. Da deine Anwendung nicht 
zeitkritisch ist passt das vermutlich ganz gut. Der TCA9548A ist als 
TSSOP-24 recht klein - aber man bekommt ihn auf einem Breakoutboard für 
rund 10 EUR.

: Bearbeitet durch User
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Man muss ja I²C nicht unbedingt mit 100kHz oder mehr betreiben. Das ist 
ja der Witz, das man das so langsam machen kann, wie man möchte.
Gut, statischen Betrieb habe ich noch nicht probiert, aber 10 oder 25kHz 
wie beim SMBus gehen immer. Der Haken bei I2C ist immer, das da null 
Fehlerkorrektur oder -erkennung  stattfindet, da der Bus ja nur 
innerhalb des Philips Fernsehers funktionieren sollte.
Schwierig wird es m.E., einen MC mit so vielen I²C Schnittstellen zu 
finden. Da wird man wohl multiplexen müssen.

von Wolfgang (Gast)


Lesenswert?

Harald schrieb:
> Sorge macht mir wegen der Länge nicht die Ethernet-Verbindung sondern
> die Energieversorgung, da werde ich mal 70m Kabel abrollen den
> Orange Pi dranhängen und den Spannungs-Abfall bzw. -Verlauf messen.

Der Spannungsabfall auf der Leitung kann dir ziemlich Schnuppe sein, 
wenn du mit ausreichend hoher Spannung auf die Leitung gehst und direkt 
beim Orange Pi einen Step-Down DC/DC-Wandler für ein paar Cent hinsetzt, 
der für stabile Spannung sorgt.

von Fitzebutze (Gast)


Lesenswert?

Weitere Stichworte für mögliche IoT-Ansätze dieser Art:

- Linkit Smart Duo (WLAN und auf Kanal 14 funken. Don't ask, don't tell) 
Oder ein Ethernet-Shield ranbacken.
- CC430-Plattformen und sich mit dem TI Simpliciti rumärgern, oder das 
SWAP-Protokoll nutzen
- Mit einem msp430 o. Atmel über RS485 einen einfachen Wandler bauen 
(kann man vom Bus powern).

Gleich mit Linux draufhauen kann ein schnelles Erfolgserlebnis liefern, 
im Feld dann aber gehörige Ausfälle haben.
Wenn der i2c buggy ist wie auf div. Broadcom-Chips, macht das Ganze 
schon mal keinen Spass, wenn man zuverlässig Messwerte braucht und das 
Zeug sich aufhängt.

von Gerd E. (robberknight)


Lesenswert?

Mach Dir unbedingt auch Gedanken über die Gehäuse und die 
Kabeleinführung. Wenn ich das richtig verstehe ist das im Freiland. Das 
heißt Regen, Tau, Hitze,...

So ein Raspi oder ähnliches erzeugt einiges an Temperatur und kann nur 
in einem eng beschränkten Temperaturbereich betrieben werden. Wenn im 
Sommer die Sonne direkt drauf scheint wird das schnell eng.

Auch gegen Wasser in Vergussmasse eingießen etc. dürfte bei Raspi und 
Co. schwierig werden (läuft in Verbindung zur SD-Karte).

Da ist eine Mikrocontroller-Lösung wesentlich robuster machbar.

Auch wenn der Raspi vielleicht auf den ersten Blick schneller aussieht, 
kann Dich das hinterher im Feld ganz schnell beißen.

Ich würde für sowas eine einfache Mikroncontroller-Lösung mit CAN-Bus 
und Stepdown-Spannungsregler an jedem der Sensoren verwenden.

: Bearbeitet durch User
von Joachim B. (jar)


Lesenswert?

Gerd E. schrieb:
> So ein Raspi oder ähnliches erzeugt einiges an Temperatur

alte PI1 bekommt man ja fast nachgeworfen und der Takt kann locker fix 
runtergesetzt werden wenn es nur um I2C geht!

von Larry (Gast)


Lesenswert?

> Ich würde für sowas eine einfache Mikroncontroller-Lösung mit CAN-Bus
> und Stepdown-Spannungsregler an jedem der Sensoren verwenden.

Ja ein kleiner 8 Pinner handelt lokal am Sensor das I2C ab und schickt
seine Ergebnisse ueber einen 2. 8 Pinner namens 75176A die Ergebnisse
auf einen Bus. Das kann dann ein einfaches asynchrones Datenformat sein.

Auf der Empfangsseite braucht man dann nur noch einen 75176A,
um daraus wieder ein unsymmetrisches Signal zu machen und einen
MAX232 um es einer ueblichen COM-Schnittstelle anzudienen.
Dazu evtl. einen kleinen Controller der das ganze arbitriert und
Schrott aus den Daten fischt. Aber die (Mess-)Clients sollten
schon selber den Bus arbitrieren koennen. Den koennen sie
ja immerhin mitlesen.

Ein Spannungsregler per Modul ist sicher auch eine gute Idee.


Das sollte in der Summe deutlich robuster sein als jede
RPI-Frickelloesung.

von Fitzebutze (Gast)


Lesenswert?

Joachim B. schrieb:
> alte PI1 bekommt man ja fast nachgeworfen und der Takt kann locker fix
> runtergesetzt werden wenn es nur um I2C geht!

Bloss Finger weg von sowas. Das hängt sich irgendwann auf, da reicht ein 
Glitch. Der HW-Bug in den BCM* wurde erst in neuern Chip-Steppings 
behoben.
Für robuste Lösungen ist der RPi nix.

von A. S. (Gast)


Lesenswert?

Harald schrieb:
> RS232 etc ebenso.

Ein µC der I2C spricht und RX/TX ist eigentlich recht einfach. Ob das 
ganze dann als Stern, Bus, Ring oder so verdrahtet wird, ob 2 oder 
4-Draht, ist dann schon fast egal, solange man jeweils weiss, was man 
tut.

von Heinz (Gast)


Lesenswert?

Lest euch den Thread nochmal durch. Es ging genau genommen nur um die 
Vorstellung der festgelegten Idee, Alternativen wurden nicht ernsthaft 
in Erwägung gezogen.

von Stefan F. (Gast)


Lesenswert?

Matthias S. schrieb:
> Man muss ja I²C nicht unbedingt mit 100kHz oder mehr betreiben.

Niedrigere Geschwindigekt vereinfacht die Signalaufbereitung. Ohne 
Aufbereitung bringt niedrige Geschwindigkeit auf langen Leitungen nicht 
viel, wie die Taktflanken zu sehr verzerrt werden.

von dummbeutel (Gast)


Lesenswert?

> > ich den Orange Pi Zero ausgeguckt
> Kennst du nichts anderes oder kannst du nichts anderes?

> Alternativen wurden nicht ernsthaft in Erwägung gezogen.

Er kennt nichts anderes und ob er es kann ist noch nicht raus.

Aber die Vorstellung das promovierte Eierköpfe alle paar
Tage fluchend durch den Matsch waten müssen, um den Kram
wieder zum laufen zu bringen, ist irgendwie auch erheiternd.

von M. K. (sylaina)


Lesenswert?

Harald schrieb:
> Die Leitungen legt der Auftraggeber, wegen der niedrigen Datenraten
> reicht Telefon 4x2 bzw. Cat5 o.ä.

Also wenn das gilt, dann frage ich mich warum man katgorisch erstmal

Harald schrieb:
> WLAN fällt aus (s.o.), RS232 etc ebenso.

auschließt. IMO ist doch RS232 bzw. dessen Derivate (nen UART vielleicht 
sogar direkt) bei diesen Strecken schon nahezu ideal. 100 m sind doch 
nix wenn einem ne Datenrate von 1200 BD genügt und mir scheint die würde 
hierbei genügen. Einfacher und preiswerter ists doch kaum umsetzbar.

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.