Visual-Studio-Programm ->Wifi (ethernet) Shield ->Arduino

Liebe Leser,

ich wende mich mal wieder mit einer Frage an euch und Danke schon jetzt für eure Antworten.

Zum Projekt:

Ich habe nen kleinen Modellbagger, denn ich im Moment über USB (Serielle Schnittstelle) und ein Visual Studio Programm betreibe (Das Programm habe ich irgenwo aus dem Netz und meinen Bedürfnissen angepasst). Das Arduino Programm ist von mir, da bin ich recht fit.

Das funktioniert auch wunderbar. Der Bagger macht was er soll und gibt Sensorwerte zurück.

Jetzt möchte ich das ganze ohne Kabel realisieren und das WiFi Shild einsetzten. Der Bagger soll als Client im Netz sein. (Später sollen es mehrere sein)

Was habe ich bisher:

Ich kann das Shild im Netz einbinden, ich kann über Telnet Daten hin und her schicken (Und somit auch den Bagger steuern, wenn auch etwas mühsam) ... Soweit so gut. An dem Punkt juckt es ja PC seitig eh nicht mehr, ob der Client jetzt über Funk oder Ethernet mit dem Access Point verbunden ist.

Leider habe ich nicht ganz so viel Plan, wie ich da nun weiter ran gehen soll.

Meine Fragen:

Ist MS Visual Studio überhaupt das geeignete Programm, (da kenn ich mich halt ein wenig aus, lerne mich aber auch in was Neues ein)

Welches ist ein geeigente Protokoll? Vermutlich TPC...

Somit müsste ich jetzt mein Serial Protokoll durch ein Netzwerkprotokoll ersetzten (Ethernet)?

Weiß jemand, wie die das bei den Drohnen funktioniert?

Kennt jemand Beispiele, reicht ein mega einfaches, ein Knopf in nem VB Programm der irgendwas auf dem Arduino macht, via Ethernet/Wifi.

Mir geht hier erstmal nur um die generelle herangehensweise... Nach 2 Tagen googel im Netz bin ich etwas verwirrt... :frowning:

Vielen Dank schon mal!
Gruß Michl

Es gibt genug Beispiele im Internet wie man TCP mit .NET implementiert.

Es gibt auch eine einfache Möglichkeit, wie man in .NET beliebig Serial und TCP oder UDP austauschen kann:

1.) lagere deinen gesamten Serial Code in eine eigene Klasse aus
2.) mache aus dem Ethernet Code ebenfalls eine eigene Klasse

Der Trick dabei ist dass die Klassen soweit wie möglich die gleichen Methoden enthalten sollten. Das ist bei manchen Dingen wie SetBaudRate() oder SetComPort() natürlich nicht möglich, aber Connect(), Disconnect(), Write(), Write(), etc. sind gleich

3.) Lege eine Oberklasse an, die nur virtuelle Methoden und leere oder Default Implementierungen enthält:

   class Communicator
   {
      public Communicator(){}

      public virtual void Connect() {}
      public virtual void Disconnect() {}
      public virtual void Write(string text) {}
      public virtual void WriteLine(string text) {}
      public virtual void WriteLine() {}
      public virtual bool IsConnected() { return false; }

      public virtual void SetBaudrate(int baudrate) {}
      public virtual void SetComPort(string comport) {}
   }

4.) Leite deine beiden Kommunikations-Klassen von dieser Klasse ab und gebe bei den Implementierungen der Methoden "override" an, damit die Methode der Basis-Klasse überschrieben wird. z.B.:

class SerialCommunicator : Communicator
{
      ....

      public override bool IsConnected()
      {
         return _serialPort != null && _serialPort.IsOpen;
      }

      ....
}

Jetzt kannst du je nachdem mit was du dich verbinden willst, eines davon machen:

Communicator communicator = new SerialCommunicator(this);

//oder

Communicator communicator = new EthernetCommunicator(this);

Und wenn ein Button communicator.Write() aufruft wird das entweder auf Serial oder Ethernet ausgeführt, je nachdem von welcher Klasse das Objekt ist.

Vielen Danke für Deine Antwort.

Irgendwie bist Du mit Deiner Antwort schon viel weiter, wie ich mit dem, was ich checke.. :o

Ja, das stimmt, Beispiele wie man TPC mit .net implementiert schon, aber wie das dann arduino seitig aussieht, leider nicht. (oder ich bin zu dumm, zum suchen)

Das hier habe ich gefunden:

http://www.novicius.ch/index.php/mikroprozessor/6-ethernet-kommunikation-mit-mikroprozessor

Was ja schon mal sehr in meine Richtung geht. Ist aber UDP.

Btw. eine Frage am Rande:

Wenn ich das Beispiel Programm Chatserver (Telnet) benutze funktioniert das alles. (Ausser SSID und Password musste ich da nichts ändern) Er verbindet, ich kann Daten hin und her senden.

Wenn ich aber das Bsp. WiFiUdpSendReceiveString (unverändert) verwende (was ich ja für das Bsp im Link verwenden muss, verbindet er sich einfach nicht mit dem WLAN (auch hier muss ich doch nur SSID angeben und dasPW).... (Firmware des Wifishilds hab ich upgedatet) Irgendeine Idee?

Also wenn jemand genau so ein Bsp, wie im Link oben kennt, nur mit TCP, dann wäre das Perfekt. Oder wäre UDp eh besser?

Danke und Gruß Michl

Wie das auf dem PC aussieht und wie das auf dem Arduino aussieht hat nichts miteinander zu tun. Der Arduino weiß doch gar nicht wo die Daten herkommen. Entsprechend reichen da die absoluten Standard-Beispiele wie man Text empfängt und verschickt. Die hast du schon gefunden :slight_smile:

UDP geht hier theoretisch genauso. Der Unterschied ist dass es unsicherer ist. UDP sendet einfach und kümmert sich nicht darum ob die Daten korrekt übermittelt wurden. Je nach Anwendung kann das Ausreichen.