Daten über ein Ethernet-Shield in eine txt auf dem laptop speichern

Guten Tag liebes Forum,
ich besitze einen Arduino Mega mit einem Ethernet-Shield.Nun möchte ich eine Zahl über Ethernet
in eine txt auf meinem Laptop speichern :slight_smile:
kann mir dabei vielleicht jemand einen Tip geben ?

Dazu wird auf deinem Läppi ein Server Prozess laufen müssen!

Also ein Web Server ? Ich habe am ende eine Access Datenbank wo die Daten landen sollen.
hast du einen Sofware tipp?

Also ein Web Server ?

"Web" habe ich nicht gesagt.
Wäre aber eine der vielen Möglichkeiten.

Ein einfacher Webserver ist z.B.im PHP Interpreter eingebaut.

Gibt es denn die Möglichkeit per udp oder generell Daten in eine txt auf dem Laptop zu schreiben ?

Nein. Nicht ohne combies Lösung mit einem Dienst.
Stell Dir vor jeder im Netzwerk kann Dir einfach so Dateien auf Dein Notebook schreiben.

Du musst etwas haben, das für das Ethernet-Shield einen Endpunkt darstellt. Das kann ein Dienst auf dem Laptop sein (WCF, IIS-Server, Sockets, uvm.) oder Du verwendest einen Online-Dienst. Dann musst Du allerdings von dort die Daten auf Deinen Rechner bekommen.

Daher tendiere ich zu einem eigenen Dienst.

Ist auch kein Hexenwerk. Für den Anfang kannst Du Dir einen einfachen TCPClient bauen:
Creating Simple TCP Client
Vielleicht nicht das beste Tutorial, aber kurz und knapp. Und inkl. Datei :slight_smile:

ThePhil:
Gibt es denn die Möglichkeit per udp oder generell Daten in eine txt auf dem Laptop zu schreiben ?

Du könntest mit z.B. einem Arduino Due oder Leonardo die Tastertur ansteuern und wenn du vorher eine txt-Datei geöffnet hast, landet der Text eben in der txt. Aber der Mega kann das nicht und was besseres fällt mir nicht auf die Schnelle ein.

Könnte ich von diesem Dienst auch Daten zum Beispiel in eine Access Datenbank bekommen ?

Ja klar!
Sobald Du einen Empfänger hast (Dienst* oder Anwendung), kannst Du dort jedwede Schnittstelle ansprechen. Also auch in so veraltete und unzeitgemäße Datenbanken wie Access :wink:

*Ein Dienst hat den Charme, dass dieser automatisch mit dem Betriebssystem startet und im Hintergrund läuft.
Dafür darf er nicht auf die GUI, die Oberfläche von Deinem Betriebssystem zugreifen. Ist aber auch nicht nötig.

Danke dein Tipp hat mir schon sehr weiter geholfen :slight_smile:
habe mich jetzt etwas informiert und in Visual Studio so einen WCF Dienst geöffnet.
Nur wie kann ich dem Arduino jetzt sagen welchen Dienst er benutzen soll um dort seine Daten rein zu schreiben ? :slight_smile:
Und ist das dann in Access eine Sharpoint Liste die ich da einpflegen muss ?

Du gibst dem WCF Dienst einen Port mit. Dann ist er über Deine IP Adresse des Rechners + diesem Port erreichbar.
In dem Beispiel auf der MSDN geht nicht hervor, dass Du diesen in der app.config anpassen kannst.

Hier habe ich ein besseres Beispiel gefunden, welches auch gleich noch einen Installer für den Dienst mitbringt.
Dort geht auch hervor, wie sich die Adresse (localhost)+Port zusammensetzt.

Für Access kommst Du offenbar an OleDB nicht vorbei. Das scheint die einzige Option zu sein, Daten nach Access zu bekommen. Dann kann man aber mit klassischen SQL-Statements arbeiten.
In Access gibt es Tabellen. Mal ganz vereinfacht gesagt, wie mehrerer Reiter in Excel. Diese kannst Du dann befüllen oder auslesen.
Sharepoint ist schon wieder etwas ganz anderes! Dabei handelt es sich um (noch einfacher ausgedrückt) eine Webseite mit einer Datenbank im Hintergrund. Diese umfasst schon Grundfunktionen wie Benutzerverwaltungen, usw. Sowas verwendet man in Unternehmen für das Intranet.

Hey also deine Antwort hat mir schon sehr geholfen. :slight_smile:
Ich verwende eine 2016 Access DB besteht hier nicht auch die Möglichkeit das ganze über einen ODBC Import zu machen ?
habe gelesen das eine OLE DB sehr komplex sein soll und ich bin leider kein Profi in dem Bereich:)

Ja, das sollte auch funktionieren. Ob das nun weniger Aufwändig ist, wage ich aber zu bezweifeln.
Du musst die ODBC Schnittstelle auf dem PC ggf. installieren und dann Einrichten. Das geht imho nicht aus dem Programm heraus, sondern nur über das Betriebssystem. Dann benötigst Du eine ODBC Komponente* in Deiner Dienstanwendung.
Bei OLE DB benötigst Du nur die Komponente* für den Dienst und kannst mit SQL-Befehlen arbeiten.

*Mit der Komponente meine ich eine Klassenbibliothek aka DLL, die Dir die Schnittstellenfunktionalitäten bereitstellt. Man erfindet das Rad ja nicht neu, sondern verwendet Lösungen, die andere mit mehr Ahnung gebaut und getestet haben :smiley:

OK dann nehme ich mal den weg mit der OLE DB :slight_smile:

nochmal eine frage zum Verständnis: Ich schicke jetzt daten über UDP an die IP
Adresse meines Dienstes indem die IP des Arduinos als Endpoint festgelegt ist ?dann lese ich von dort die daten über eine OLE DB in meine Access DB :slight_smile: diese kann dann auch daten an die IP Adresse des Dienstes schicken von wo ich diese dann mit dem Arduino auslesen kann ? :slight_smile:

Momentan besteht halt leider das Problem das mir als Anfänger der weitere Ablauf fehlt und ich nicht weißß wo ich am besten anfange... :slight_smile:

ThePhil:
Momentan besteht halt leider das Problem das mir als Anfänger der weitere Ablauf fehlt und ich nicht weißß wo ich am besten anfange... :slight_smile:

Das ist ganz normal....
Geht jedem Anfänger so.

A: Was will ich "wirklich" erreichen?
(keine Schritte benennen, welche man einem Weg zuordnen könnte)

B: Welche Wege gibt es, das zu erreichen, was ich erreichen will?

C: Entscheidung treffen.

D: Entscheidung durchsetzen.


Ohne A beantwortet zu haben, ist B nicht fest zu legen.

Ohne die Antworten auf B zu kennen kann C nur falsch werden.
Ohne Ahnung zu haben auch.

D: ist das einfachste.. eine reine Fleißübung.
Das gelernte Wissen anwenden.

--
Was der springende Punkt ist, ist doch klar: "Das gelernte Wissen"
Und, das ist exakt deine Baustelle.
Lerne.
Das ist der einzige Weg, welcher aus dem Anfängertum heraus führt.
Aber auch einer, den wir dir nicht abnehmen können.
Denn: "Selber lernen, macht selber schlau."

Nimm doch erst mal den WCF-Dienst und lasse den Arduino konstante Daten dahin senden. Diese gibst Du dort dann erst mal aus (Konsole,Textdate, was auch immer).

Wenn das sicher funktioniert, kannst Du Access anbinden und die Daten einspeisen.

Als letztes sollte dann die Datenerzeugung auf dem Arduino angehen.

Dabei überall erst mal viele Debugausgaben einbauen.

So würde ich vorgehen, wenn ich so etwas bauen wöllte, was ich zum Glück nicht muss. Ich hätte auch kein Access.

Das wird nur mit viel Lernen deinerseits realisierbar sein. Copy & Paste ist da nicht mehr drin.

Gruß Tommy

ThePhil:
diese kann dann auch daten an die IP Adresse des Dienstes schicken von wo ich diese dann mit dem Arduino auslesen kann ? :slight_smile:

Nein.
Wenn Du den Weg mit dem WCF-Dienst gehst, stellst Du vereinfacht gesagt, ein Formular bereit. Aber eins für Maschinen, keines was Du siehst :wink:
Dort hast Du ein paar Eingabefelder, z.B. Temperatur, Uhrzeit & Luftdruck (Oder was auch immer Du so speichern möchtest).
Dein Arduino kann nun exakt diese 3 im WCF-Dienst definierten Werte entgegen nehmen und verarbeiten.

Möchtest Du nun Daten zurück übermitteln, kannst Du direkt auf diese Anfrage antworten. Vergleichbar mit einer Funktion mit Rückgabewert:

string SaveValues(decimal temp, datetime currTime, int pressure)
{
  ObdConnector.Save(temp, currTime, pressure);
  return "Alles prächtig";
}

Das klappt dann aber nur im Zuge der Datenübermittlung vom Arduino.

Möchtest Du am PC/Dienst entscheiden, wann Du etwas an den Arduino übermitteln möchtest, so musst Du genau den Weg andersherum gehen:
Einen Server auf dem Arduino aufbauen und diesen vom PC ansprechen.

Aber da muss ich mich nun den Anderen anschließen und so langsam intervenieren.
Beginn mit dem kleinsten Teil und bring das erstmal zum laufen. Das dauert beim ersten Mal einfach lange. Das ist so und kann man nicht ändern. Einen WCF Service aufzusetzen und diesen vom Arduino anzusprechen um irgendwelche Dummy-Daten zu übertragen, halte ich ebenfalls für die beste Idee.
Dann kann man sich Stück für Stück weiter vorkämpfen. Es klappt nicht von Anfang an alles durch zu planen, ohne die Bestandteile zu kennen.

Also ich habe eine Access Datenbank die meinem Arduino eine Zahl schickt 1,2 oder drei mit der ich dem Arduino sagen möchte welchen Spielmodus ich ausgewählt habe. Wenn dann das Spiel beendet ist möchte ich das der Arduino mir den erspielten Punktestand zurück gibt und ich diesen dann in der Datenbank auswerten kann. Meine Kenntnisse im Umgang mit Access sind dabei die Grundkenntnisse welche ich durch das Projekt jetzt schon ein wenig erweitern konnte.

und Danke für die vielen antworten :slight_smile:

Dabei muss man vielleicht noch sagen das ich Access gewählt habe weil man dort eine Benutzeroberfläche gut gestalten kann und ich gedacht habe das ich nicht mehr benötigen würde wie Access mir bereitstellt.