Datenübertragung zwischen PC und Arduino mittels Ethernet-Shield

Hallo zusammen,

nach sehr langer Suche habe ich irgendwie nicht das gefunden, was ich gesucht habe, oder ich habe noch zu wenig davon verstanden. Deswegen mag ich mich jetzt an euch wenden und hoffe, dass ihr mir helfen könnt.

Für ein Projekt muss ich einen Arduino als Peripherie-Steuerung einsetzen.
Bisher ging von einem PC ein Kabelpaket mit vielen Einzeladern auf ein Bauteil. Über diese Einzeladern wurde anschließend alles gesteuert, also Eingänge ausgelesen, Ausgänge gesteuert etc.
Dieses Kabelpaket soll nun durch einen Arduino ersetzt werden...

Über einen PC (Master) soll ein Befehl gesendet werden und anschließend vom Arduino (Slave), je nachdem was es für ein Befehl war, eine Aktion ausgeführt werden. z.b. Die Eingänge auslesen und an den PC übertragen, den Status der Ausgänge an den PC übertragen, die Werte von einem Gyrosensor alle 100ms an den PC übertragen bis er einen Befehl zum beenden ausgibt, oder auf Befehl des PC's bestimmte Ausgänge ansteuern.
Letztendlich soll der Arduino beim Bauteil montiert werden und nur noch eine Datenleitung und eine Spannungsversorgung zum Arduino/Bauteil führen.

Ich habe einen Handbetrieb soweit programmiert in dem ich alle Umfänge händisch über den seriellen Monitor steuern kann, also bestimmte Ausgänge zum Ansteuern auswählen, die Eingänge abfragen, oder die Werte des Gyrosensors einmalig oder dauerhaft übermitteln.
Jedoch alles über den seriellen Port und USB auf den seriellen Monitor.

Nun muss ich für das Projekt jedoch ein Ethernet-Kabel zur Übertragung verwenden, da die Leitungslängen >15m sind, und das über USB nicht mehr funktioniert.

Nun zu meinem eigentlichen Problem.. :sweat_smile:
Dadurch dass ich blutiger Anfänger bin, habe ich keine Ahnung wie ich die Verbindung zwischen PC und Arduino mittels Ethernet herstellen soll. Ich mag mit der Ethernet-Verbindung auch gar nicht ins Internet, ich mag legedlich die Daten an den PC übertragen.

Nun habe ich folgende Fragen:
Was muss ich tun (Verkabelung, Sketch, am PC?) damit ich die Daten an den PC übertragen kann?
Wie kann ich die empfangenen Daten anschließend auf dem PC speichern? in ein .txt oder .csv Format? ich würde gerne die Daten in Echtzeit betrachten wo mir vom Arduino übermittelt werden.
Wie lässt sich das dann realisieren, dass ich nicht nur Daten empfangen kann, sondern auch Daten an den Arduino senden kann?
Gibt es alternative Bussysteme die weitaus weniger umständlich sind wie das Ethernet? Für Anregungen bin ich offen!

Meine Verwendete Hardware:
Arduino Mega 2560 (A000067)
Gyrosensor GY-521 mit SEN-MPU6050 (2136256 von Joy-it)
Arduino Ethernet Shield 2 (A000024)
Die Eingänge habe ich mit einem Breadboard und Taster simuliert, die Ausgänge mit LED's.

Bei jedem Beitrag den ich lese geht es hauptsächlich um die Internetanbindung mittels dem Shield, ich mag jedoch nur die Daten übertragen, mittels Ethernet anstelle vom USB.

Den Einzigen Forumsbeitrag den ich annähernd zu dem Thema gefunden hab ist dieser hier:
https://forum.arduino.cc/?topic=467678#msg3204732

Wirklich weiterhelfen tut mir das aber irgendwie auch nicht.

Ich Danke allen recht Herzlich die sich meinem Problem ein Stück weit annehmen und mir versuchen wollen, zu helfen.

LG, Alex

Vergiss Ethernet und nimm Serial/USB. Wenn das läuft, lernen Ethernet.

Moin Alex,
wenn Du nicht ins Internet (das könnte auch der private Netzabschnitt hinter Deinem Router sein) willst, brauchtest Du im PC eine zweite Netzwerkkarte. Damit kannst Du dann ein auch physikalisch vor der Welt verborgenes Netz herstellen.

alex_99w:
Leitungslängen >15m…
Gibt es alternative Bussysteme die weitaus weniger umständlich sind wie das Ethernet? Für Anregungen bin ich offen!

Ja, natürlich. Ich würde CAN bevorzugen, andere vielleicht RS485. “weitaus weniger umständlich” ist Geschmackssache.

Dann brauchtest Du aber entweder eine CAN-Karte oder CAN-USB-Dongle am PC oder noch einen zweiten Arduino, angeschlossen an der USB-Schnittstelle des PC, der von CAN auf Serial umsetzt.

Wie kann ich die empfangenen Daten anschließend auf dem PC speichern?

Kommt darauf, wie Du die Daten weiter verarbeiten willst und vielleicht auch wie lange jeweils eine Aufnahmesession dauert (wie viele Datenpunkte es werden).

Gyrosensor alle 100ms…ich würde gerne die Daten in Echtzeit betrachten

Dann musst Du schon online die Daten mit einem PC-Programm aufnehmen und grafisch aufbereiten. Ich jedenfalls kann 10 Textzeilen pro Sekunde nicht mehr sinnvoll erfassen (was aber auch an meinem Alter liegen mag).

also so krass würde ich das nicht ausdrücken.

Ich denke du sollst dir erst mal Gedanken machen was du übertragen willst, wer der Initiator eine Kommunikation ist.

Ich lese raus du willst du vom PC aus (=Client) an den Arduino was schicken (=Server).
Was läuft auf dem PC an Client Software?
Willst du vieleicht das ohne externes Programm im Browser machen - dann kannst du am Arduino einen HTTP Server programmieren, und anschließend von jedem PC im LAN mit dem Browser deine Relais schalten.

Wenn du vieleicht mal schematisch darstellst, was du alles machen willst, dann kann man dir vermutlich besser helfen.

wno158:
"Ja, natürlich. Ich würde CAN bevorzugen, andere vielleicht RS485. "weitaus weniger umständlich" ist Geschmackssache."

CAN sieht jetzt auch sehr interessant aus.. Im Grunde geht es mir nur um eine Datenübertragung vom Arduino zum PC und wieder zurück. Anschließend sollen die Daten am PC in nahezu Echtzeit einsehbar sein und ich muss über Kommandos den Arduino steuern können.

Wir haben uns im erstem Moment halt Ethernet überlegt, da es schnell ist und man lange Leitungslängen überbrücken kann. Wenn es aber ein anderes System gibt, womit das deutlich einfacher geht, bin ich auch nicht abgeneigt. CAN schaue ich mir auf jedenfall mal an.....

wno158:
"Dann brauchtest Du aber entweder eine CAN-Karte oder CAN-USB-Dongle am PC oder noch einen zweiten Arduino, angeschlossen an der USB-Schnittstelle des PC, der von CAN auf Serial umsetzt."

Danke, das schau ich mir mal an.

wno158:
"Kommt darauf, wie Du die Daten weiter verarbeiten willst und vielleicht auch wie lange jeweils eine Aufnahmesession dauert (wie viele Datenpunkte es werden)."

Eingänge sind es 15 Stück die jeweils gleichzeitig abgefragt werden, der Gyrosensor schickt 7 Pakete, also 3x Gyro, 3x Acc und 1 Temp..
Ausgänge sind es vorerst ca. 7 die einzeln angesteuert werden.

wno158:
"Dann musst Du schon online die Daten mit einem PC-Programm aufnehmen und grafisch aufbereiten. "

Der Arduino soll mir auf den PC im Grunde nur die Rohdaten schicken, das Weiterverarbeiten würde dann der PC machen.

wno158:
"Ich jedenfalls kann 10 Textzeilen pro Sekunde nicht mehr sinnvoll erfassen (was aber auch an meinem Alter liegen mag)."

in dem Fall ging es mir bei der Echtzeit eher um das, dass ich die Daten sofort anschauen möchte, nachdem sie eingetroffen sind, und nicht erst wenn die Datei voll ist und fertig abgespeichert wurde. :smiley:

noiasca:
Ich denke du sollst dir erst mal Gedanken machen was du übertragen willst, wer der Initiator eine Kommunikation ist.

Ich lese raus du willst du vom PC aus (=Client) an den Arduino was schicken (=Server).
Was läuft auf dem PC an Client Software?

Willst du vieleicht das ohne externes Programm im Browser machen - dann kannst du am Arduino einen HTTP Server programmieren, und anschließend von jedem PC im LAN mit dem Browser deine Relais schalten.

Naja der Initiator der Kommunikation wäre der PC als Master. Er sollte mir auf den Arduino einen Befehl schicken und der Arduino arbeitet den ab und gibt eine Rückmeldung. zb. Eingänge einlesen, Gyrosensor Werte übermitteln, Ausgänge ansteuern
Am Pc läuft aktuell noch gar keine client software, da ich keine Ahnung davon habe :frowning:

Ob ich das mit dem Browser realisieren kann weiß ich aktuell noch nicht, da muss ich erst einen kollegen Fragen, ob dies erlaubt wäre

noiasca:
Wenn du vieleicht mal schematisch darstellst, was du alles machen willst, dann kann man dir vermutlich besser helfen.

Hab mal versucht auf die schnelle was zusammen zu kritzeln. Hoffe sowas meintest du...

noiasca:
Willst du vieleicht das ohne externes Programm im Browser machen - dann kannst du am Arduino einen HTTP Server programmieren, und anschließend von jedem PC im LAN mit dem Browser deine Relais schalten.

Also der Kollege meinte, dass wir das vielleicht über TCP/IP umsetzen können.
Ich weiß ungefähr was das ist, hilft mir jetzt aber auch nicht wirklich weiter ::slight_smile:

Okay, Grundprinzip habe ich hoffentlich verstanden.

Es gibt da ein paar Probleme - davon nur ein technisches: Die Spannungsversorgung sollte nicht über die ">15m Leitungslänge" laufen, sondern dicht am Arduino/Bauteil angesiedelt werden. Mit PoE willst Du ja (bei dem von mir vermuteten Erfahrungsstand) nicht auch noch anfangen.

PC-Software: Das wird m.E. der größere/schwierigere Teil der beiden Softwaren; der Arduino-Teil wird zwar umfangreich, ist aber machbar.

Projektarbeit: Wann soll's denn fertig sein?

TCP/IP: Dann solltest Du mal über Sockets lesen...

wno158:
Es gibt da ein paar Probleme - davon nur ein technisches: Die Spannungsversorgung sollte nicht über die ">15m Leitungslänge" laufen, sondern dicht am Arduino/Bauteil angesiedelt werden.

Spannungsversorgung haben wir 7,2-18V, da das Bauteil ein KFZ-Teil ist. eventuell nehmen wir die Spannung für den Arduino auch wo anders her. Problem ist nur, dass wir die Versorgung nicht direkt am Arduino montieren können, da dieser auch in eine Klimakammer muss. :smiley:

Projektarbeit: Wann soll's denn fertig sein?

Abgabetermin ist der 01.03.2021... fertig wäre ich gerne schon in den nächsten 2-3 Wochen, da ich auch noch Dokumentation schreiben muss :smiley: :frowning:

Ich informiere mich mal über TCP/IP..... wird das beste sein, bevor ich noch mehr Fragen stelle :confused: Wenn ich schlauer bin melde ich mich nochmal und stelle dann die aufgekommenen Fragen :smiley:

Ich Danke euch soweit! Guten Rutsch

Zumindest für die Entwicklung auf Arduinoseite könnte Dir dieser Sender/Empfänger am PC helfen. Ob Du ihn auch im Betrieb nutzen darfst, musst Du klären.

Gruß Tommy

Also der Kollege meinte, dass wir das vielleicht über TCP/IP

ja ne ist klar.
Fein wenn der Kollege weiß was TCP ist.
Warum hat man dir sonst wohl ein Ethernet Kabel und ein Ethernet Shield in die Hand gedrückt.

Bitte jetzt nicht ganz falsch verstehen:

Die Frage ist was DU kannst.

Dass es für dieses Projekt etwas mehr als nur DigitalRead/DigitalWrite und die Anbindung einer Gyrosensor-Lib braucht ist klar?
Grundzüge von HTML soweit bekannt, dass das für eine einfache Weboberfläche reichen wird?
Wenn nein - scheidet eine Weboberfläche aus, womit schreibst du den Client für den PC?

Guten Abend...

Ich habe tatsächlich diesen Thread mehrfach versucht aufzudröseln.

Wenn man das Fragepost ausblendet, wäre nach all dem was sich danach ergibt, ein einfacher Verweis auf

Das das nicht zieht, ergib sich aus:

alex_99w:
z.b. Die Eingänge auslesen und an den PC übertragen, den Status der Ausgänge an den PC übertragen, die Werte von einem Gyrosensor alle 100ms an den PC übertragen bis er einen Befehl zum beenden ausgibt, oder auf Befehl des PC's bestimmte Ausgänge ansteuern.
Letztendlich soll der Arduino beim Bauteil montiert werden und nur noch eine Datenleitung und eine Spannungsversorgung zum Arduino/Bauteil führen.

Ich habe einen Handbetrieb soweit programmiert in dem ich alle Umfänge händisch über den seriellen Monitor steuern kann, also bestimmte Ausgänge zum Ansteuern auswählen, die Eingänge abfragen, oder die Werte des Gyrosensors einmalig oder dauerhaft übermitteln.
Jedoch alles über den seriellen Port und USB auf den seriellen Monitor.

Nun muss ich für das Projekt jedoch ein Ethernet-Kabel zur Übertragung verwenden, da die Leitungslängen >15m sind, und das über USB nicht mehr funktioniert.

Also wären 100ms unterste Grenze für das Timing.
Ich halte dafür den HTML-Weg für einen falschen. Das sowohl für POST als auch für GET.

Das Ausschlusskriterium USB über 15mtr ist bei Vorhandensein eines CAT5-Ethernetkabel nicht gegeben. USB 1.1 geht in einer mir bekannten Produktivumgebung seit wenigstens 7 Jahren über 35 Meter!
Störungsfrei
Mittlerweile geht das über sehr viel längere Wege. Auch über die Grenzen der Kabellängen von Ethernet (Ethernet – Wikipedia) hinweg.

Dadurch dass ich blutiger Anfänger bin, habe ich keine Ahnung wie ich die Verbindung zwischen PC und Arduino mittels Ethernet herstellen soll.

Dann hier der Suchvorschlag - Und Du kannst alles genauso verwenden wie in Deiner Entwicklungsumgebung.

Nichts umbauen, nichts neues testen, nichts zusätzlich programmieren.
Reine Hardwarelösung.

https://www.google.com/search?channel=fs&q=usb+extender+cat

Tommy56:
Zumindest für die Entwicklung auf Arduinoseite könnte Dir dieser Sender/Empfänger am PC helfen. Ob Du ihn auch im Betrieb nutzen darfst, musst Du klären.

Gruß Tommy

Hallo Tommy, Danke! kläre ich ab.

noiasca:
Dass es für dieses Projekt etwas mehr als nur DigitalRead/DigitalWrite und die Anbindung einer Gyrosensor-Lib braucht ist klar?
Grundzüge von HTML soweit bekannt, dass das für eine einfache Weboberfläche reichen wird?
Wenn nein - scheidet eine Weboberfläche aus, womit schreibst du den Client für den PC?

Ja das ist mir klar. Deswegen bin ich hier im Forum gelandet, weil ich davon keine Ahnung habe. Ebenso wenig von dem HTML-Sachen. Da ich das bisher nie gebraucht habe.
Habe für die Ausgabe am PC mal das Processing überlegt, weiß nur nicht ob ich das nutzen kann mit dem Ethernet.
Wenn ich es nicht hinbekomme dann reicht für das Projekt vorerst einmal die USB Verbindung. Später muss es aber sicher auf Ethernet geändert werden.

Hallo
auch ich habe es versucht zu verstehnen wer hier mit wem redet und warum. Und danach Daten sendet.
Wie groß sind die Datenpakete und welche Wiederholrate haben diese?

my_xy_projekt:
Also wären 100ms unterste Grenze für das Timing.
Ich halte dafür den HTML-Weg für einen falschen. Das sowohl für POST als auch für GET.

naja die Übertragung sollte in Echtzeit erfolgen. Ich muss ja am PC dann je nach dem, was mir der Arduino sendet, entscheiden können, was ich als nächstes tue.
Ich möchte dann nicht erst 5min warten müssen, bis das eine Dokument fertig ist, um dann anschließend nachzuschauen, Was der Arduino in welcher Position des Bauteils mir übermittelt hat.

my_xy_projekt:
Dann hier der Suchvorschlag - Und Du kannst alles genauso verwenden wie in Deiner Entwicklungsumgebung.

**Nichts umbauen, nichts neues testen, nichts zusätzlich programmieren. **
Reine Hardwarelösung.

usb extender cat - Google Search

Danke, das schaue ich mir mal näher an.

paulpaulson:
Hallo
auch ich habe es versucht zu verstehnen wer hier mit wem redet und warum. Und danach Daten sendet.
Wie groß sind die Datenpakete und welche Wiederholrate haben diese?

Hallo, Ich finde dass man es sehr gut versteht in dem ersten Posting...
Der PC soll mir als Master eine Anfrage auf den Arduino (Slave) senden, dieser Antwortet dann mit den entsprechenden Infos oder der Bestätigung, dass er die Ausgänge angesteuert hat. Je nachdem halt, was ich dem Arduino zusende.
also 100ms sind eigentlich das mindeste was ich schaffen muss. Länger dürfen wir für die Übermittlung der Daten vom Gyrosensor nicht brauchen.
Wie groß die Datenpakete sind kann ich nicht genau sagen... Variiert vermutlich je nach Aufgabe...
naja ich hab dann gesehen dass das Ethernet für meinen Wissensstand noch nicht praktikabel ist. Werde es erstmal über USB zum laufen bringen und dann vielleicht nochmal versuchen.
Ich Danke euch!

Ich halte dafür den HTML-Weg für einen falschen. Das sowohl für POST als auch für GET.

Bei mir dauert ein HTTP Request zwischen PC ->UNO/MEGA und die Antwort retour zum PC im LAN zwischen 20 und 40 ms. Dabei wird ein JSON mit etwa 200 Byte /170Byte Payload übertragen.
ein etwa 2KB großes Datei pendelt um 50ms.

Es gibt zwar immer wieder Schwankungen aber über 100ms dann musst du schon Datenmengen mit mehreren Kilobyte übertragen.

ich hab dann gesehen dass das Ethernet für meinen Wissensstand noch nicht praktikabel ist.

ich glaube das ist aktuell dein größtes Problem, das dir im Weg steht.

noiasca:
ich glaube das ist aktuell dein größtes Problem, das dir im Weg steht.

Ja das glaube ich leider auch. Und so einfach und so schnell wird sich das nicht beheben lassen :confused: :sweat_smile:

Ich programmiere jetzt erstmal über den USB und Serial. Wenn die Leitungslängen zu groß werden versuche ich es einmal mit einem Extender.
Wenn ich dann noch zu viel Zeit habe, schaue ich mir die Processing-Themen an. Ist für mich aktuell leichter zu verstehen.

Die Zeit, dass ich jetzt auf 4 Wochen das ganze Ethernet Thema lerne, habe ich leider nicht. Muss auch neben der Projektarbeit mich noch auf Prüfungen vorbereiten und Arbeiten :smiley:

Irgendwie habe ich gehofft, dass das ganze Thema ganz easy ist und ich mich nur zu dumm stelle, allerdings ist es wohl wirklich so ein harter Brocken wenn man keine Ahnung hat :smiley:

In dem Sinn danke ich euch recht Herzlich und wünsche euch ein erfolgreiches und gesundes Jahr 2021. :slight_smile: