Mega 2560 steuern über VB Windows Oberfläche

Hallo,

als Newbie bin ich schon den ganzen Tag am Suchen, ob es ein Tutorial gibt, das beschreibt wie man den Arduino über eine Ethernet Verbindung, mittels einer Oberfläche, steuern kann. Seriell findet man schon mehr darüber.

Ich habe mir ein Projekt zur Aufgabe gemacht einen Stellmotor (Links - Rechts mit analoger Postitionsrückmeldung) über den Arduino zu Steuern. Anfangs sollte ein reines Steuern reichen mit Anzeige der aktuellen Position, später soll er jedoch auf verschiedene festgelegte Positionen nach Eingabe automatisch fahren. Die Verwendung der vorhanden Netzwerk Infrastruktur soll verwendet werden, damit keine zusätzlichen Leitungen gezogen werden müssen.

Über ein Webinterface hatte ich bereits die Funktion, jedoch ist das Aussehen meiner Meinung etwas begrenzt. So kam ich auf die Idee einer VB Windows Anwendung.

Vielleicht hat ja jemand hier im Forum schon mal so was gesehen...

Danke und Gruß

Mark

hi,

ich würde die idee mit dem webinterface nicht verwerfen. es ist einfach cooler, etwas über's handy oder tablet zu steuern. wenn's Dich wirklich nur wegen des aussehens nicht angesprochen hat, schau mal im internet nach jQuery, jQuery mobile und jQuery UI. damit kann man webseiten bauen, die absolut wie eine iphone- oder android-app aussehen. setz' auch noch ajax ein, ist auch in jQuery implementiert, dann wird die seite nach dem senden der befehle nicht immer neu geladen, und die anwendung ist wie ein programm (app).

gruß stefan

Hallo Stefan, werde mir mal Gedanken darüber machen ich denke nur, dass ich dann die SD Karte mit einbinden muß.

Danke und Gruß

Mark

hi,

Die Verwendung der vorhanden Netzwerk Infrastruktur soll verwendet werden, damit keine zusätzlichen Leitungen gezogen werden müssen.

^^^^deshalb hab’ ich vorausgesetzt, daß da WLAN und LAN mit internetanbindung vorhanden sind. dann brauchst Du dafür keine SD-karte, sondern bindest die jQuery-dateien einfach ein:

"<link rel=\"stylesheet\"href=\"http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.css\" />\n"
"<script src=\"http://code.jquery.com/jquery-1.6.4.min.js\"></script>\n"
"<script src=\"http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.js\"></script>\n"

gruß stefan

Hi Stefan,

danke nochmals für Deine Hilfe! Jetzt verstehe ich was Du meinst. Wie sähe es denn aus, wenn ich dennoch unabhängig vom www sein möchte und wie schon gesagt die Files lokal von der SD Karte holen würde, die ich bereits habe.

Abhängigkeiten stören mich immer und sollte das www weg oder sich der Pfad ändern geht alles nicht mehr...

Gruß Mark

hi,

Abhängigkeiten stören mich immer und sollte das www weg oder sich der Pfad ändern geht alles nicht mehr...

naja, meine internetverbindung ist stabil, und daß sich der pfad nicht ändert, ist gewährleistet. aber ich verstehe schon, was Du meinst. also entweder von SD-karte oder, was dann bald meine lösung sein wird, ein raspberry pi als webserver im heimnetzwerk.

gruß stefan

Mit welcher Sprache Du am Ende den Mega über Ethernet steuers ist eigentlich egal. Was Du Dir zunächst überlegen solltest ist ein für Deinen Anwendungsfall sinnvolles Protokoll. HTTP z.B. ist ungeeignet, weil es viel zu viele Informationen enthält und es damit schwer macht, Daten gezielt zu übertragen. Wenn Du das Ethernet-Shield mit dem WIZnet5100 Chip hast, kannst Du Dir mal den Thread http://arduino.cc/forum/index.php/topic,102817.0.html ansehen. Dort wird der Arduino zwar mit PHP angesteuert, aber das Prinzip ist ja das Gleiche. Also direkt TCP mit dem Arduino sprechen (Socketverbindung) und einzelne, simple String-Befehle senden z.B. "S30" für "setze Pin 3 auf LOW/0) oder "R5" für liefere digitalRead(5) zurück. Was Du dann noch brauchst ist ein Tutorial für VB , das erklärt wie man direkt TCP mit einem Server (in Deinem Fall dann der Arduino) spricht. Z.B. sowas hier:

            Imports System
Imports System.IO
Imports System.Net
Imports System.Net.Sockets



Class MyTcpListener

  Sub Main()

    Console.WriteLine("Bitte geben sie die IP des Servers ein: ")
    Dim temp As String = Console.ReadLine
    Console.WriteLine("Bitte die Nachricht eingeben: ")
    Connect(temp, Console.ReadLine)

  End Sub



  Sub Connect(ByVal server As [String], ByVal message As [String])
    Try
      ' Create a TcpClient.
      ' Note, for this client to work you need to have a TcpServer 
      ' connected to the same address as specified by the server, port
      ' combination.
      Dim port As Int32 = 1234
      Dim client As New TcpClient(server, port)

      ' Translate the passed message into ASCII and store it as a Byte array.
      Dim data As [Byte]() = System.Text.Encoding.ASCII.GetBytes(message)

      ' Get a client stream for reading and writing.
      '  Stream stream = client.GetStream();
      Dim stream As NetworkStream = client.GetStream()

      ' Send the message to the connected TcpServer. 
      stream.Write(data, 0, data.Length)

      Console.WriteLine("Sent: {0}", message)

      ' Receive the TcpServer.response.
      ' Buffer to store the response bytes.
      data = New [Byte](256) {}

      ' String to store the response ASCII representation.
      Dim responseData As [String] = [String].Empty

      ' Read the first batch of the TcpServer response bytes.
      Dim bytes As Int32 = stream.Read(data, 0, data.Length)
      responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes)
      Console.WriteLine("Received: {0}", responseData)

      ' Close everything.
      stream.Close()
      client.Close()
    Catch e As ArgumentNullException
      Console.WriteLine("ArgumentNullException: {0}", e)
    Catch e As SocketException
      Console.WriteLine("SocketException: {0}", e)
    End Try

    Console.WriteLine(ControlChars.Cr + " Press Enter to continue...")
    Console.Read()
  End Sub 'Connect


End Class 'MyTcpListener

Gefunden hier: http://www.vb-paradise.de/allgemeines/sourcecode-austausch/12968-nochmal-fuer-alle-tcp-beispiel/

Edit: Hier gibt's das Tutorial noch ein wenig ausführlicher: http://www.vb-paradise.de/allgemeines/tipps-tricks-und-tutorials/internet-lan/16242-ausfuehrliches-tcp-und-udp-tutorial/#post94565

hi,

wenn Du ajax verwendest, sind die unnötigen datenmengen vernachlässigbar. sollte Dich der sketch interessieren, ich hab' ihn grade in einen anderen thread angehängt.

http://arduino.cc/forum/index.php/topic,141549.0.html

gruß stefan

Hallo Ihr,

finde es echt klasse wie hilfsbereit ihr euch meiner Frage annehmt! Sehr großen Dank, denn das finde ich nicht selbstverständlich in einem Forum!!!

Ich werde jetzt Eure Posts analysieren und mich dann entsprechend ausrichten, was für mich als Newbie die einfachste und beste Lösung ist.

Danke Euch!

Mark

Hallo,

nachdem ich jetzt verschiedene Sachen versucht habe,
wollte ich es mal mit JavaScript versuchen. Keine Ahnung,
ob es so funktionieren könnte, jedenfalls bekomme ich im Browser nichts zurück…

//-------------------------- HTML Teil ------------------------
client.println(“HTTP/1.1 200 OK”);
client.println(“Content-Type: text/html”);
client.println();
client.print("");
client.print(“Rotorsteuerung von DL6IMU”);
client.println("");
client.println("");
client.println("");
client.println("");
client.println(""); //Tabelle erstellen
client.println("");

Danke !

Mark

hi,

als erstes fällt mir auf, daß Deine javascript-zeilen ohne strichpunkt enden. versuch doch den code erst ohne arduino lokal in einer html-seite, wenn's dort geht, dann übertragen...

gruß stefan

Hi Stefan,

das habe ich soweit gemacht, bevor ich den Code auf den Arduino genommen habe. Das Problem bei mir ist die Umsetzung auf Arduino. Lasse ich den Strichpunkt im JavaScript, wo er hingehört kommt beim Kompilieren ein Fehler.

Also wie gesagt hängt es bei mir nur am Verständnis das Script umzusetzen, finde aber auch keine Besispiele...

Gruß Mark

hi,

seltsam, wenn der strichpunkt innerhalb der anführungszeichen ist. vielleicht muß man ihn mit \ maskieren, also \; aber dazu gibt's sicher kompetentere hier, ich arbeite mit der webserver-library und verwende das, ich glaube, P-makro. seit arduino 1.irgendwas gibt es sowas auch im arduino selbst, heißt da F-makro oder so, damit schreibst Du den code nicht ins ram, das spart speicher. aber dazu bitte wissende...

gruß stefan