ich kenne mich leider mit Netzwerk-Programmierung nicht aus, weshalb ich hier um eine Einstiegshilfe bitten möchte.
Kurze Erläuterung:
Bisher kommuniziere ich mit meinem Arduino Mega2560 auf die herkömmliche Weise per USB am COM Port.
Nun habe ich mir ein Ethernet-Shield zugelegt und würde gerne auf LAN umstellen.
Aber um da reinzukommen wäre ein Beispiel sehr hilfreich.
Leider gibt es genau zu diesem Thema im Netz so gut wie nichts zu finden.
Man findet zwar hunderte Beispiele und auch Videos auf YouTube, wie man vom Arduino aus z.B. mit einem Webserver kommuniziert, Daten von einer http-Website zum Arduino schickt und Daten vom Arduino auf einer http-Website wieder ausgibt.
Ich möchte jedoch von meiner eigenen Windows-App aus mit dem Arduino kommunizieren können,
die ich in Delphi programmiert habe.
Soweit ich weiß geht das in Delphi mit Sockets.
Habe aber keine Ahnung wie das Arduino-seitig aussehen muss.
Hat vielleicht jemand so etwas schon mal gemacht ?
Dann schaue Dir mal in den Beispielen zur Ethernet-Lib das UDP-Beispiel an. UDP kann Delphi auch.
Damit Du den Fehler nicht gleichzeitig in 2 Baustellen suchen musst, kannst Du auf dem PC auch erst mal den Packet Sender benutzen.
ich glaub du sollst dir erst mal klar Gedanken machen ob du UDP oder TCP machen willst.
Was jeweils die Vor und Nachteile sind.
Und wenn du dich dann für TCP entscheidest, dann würde ich HTTP nicht ganz ausschließen (besonders wenn man damit anfängt...)
Wer initiert die Verbindung? Ist es immer die App oder hast du auch Usecases dass der Mega von sich aus sich bei der App melden soll (ohne vorhergehenden Request von der App)
Was heißt "kommunizieren" für dich?
Fließen die Daten nur von der App zum MEGA, nur vom MEGA zur App oder werden Daten in beiden Richtungen fließen?
Beispiel:
Ich schicke z.B. den Befehl "GetTemperature" an den Arduino und möchte den Temperaturwert z.B. "25,7" zurück bekommen.
Oder ich schicke den Befehl "AUX 1" und Arduino schaltet ein. "AUX 0" und Arduino schaltet aus.
Also eigentlich wenig anspruchsvoll.
Da es hier eher auf Geschwindigkeit als auf Datensicherheit ankommt, scheint mir das UDP-Protokoll das geeignetere zu sein.
Wie Du richtig erkannt hast, geht es bei UDP um Geschwindigkeit, deshalb sind Übertragungen wie getTemperature zu lang. 'T' genügt auch.
Hast Du Dir das UDP-Beispiel angeschaut? Hast Du es in Verbindung mit dem Packet Sender getestet?
ich habe das UDP-Beispiel in Zusammenhang mit dem Packet-Sender getestet.
Es funktioniert wunderbar. In beiden Richtungen.
Vielen Dank für den Tipp !
Somit hätte ich mein Problem Arduino-Seitig schon mal im Griff.
Als nächstes muss ich das "Senden" und "Empfangen" von UDP-Paketen nur noch in meine Windows-Anwendung einbauen. Mal schauen ob mir das in Delphi gelingt.
Da wäre ich auch noch für einen Tipp dankbar.
nach etwas Recherche im Netz habe ich tatsächlich ein kleines Demoprogramm in Delphi entdeckt welches die Indy-Komponenten verwendet. Das macht genau das, was ich benötige.
Vielen Dank für die guten Tipps