Computer Talking To Arduino Via Ethernet

hey guys

i need to have a computer sketch (written probably in ether Processing or Visual Basic) to communicate with a Arduino UNO via an Ethernet Shield, all i need is to send to the Arduino data like "1AG"

how would i do this? can anyone point me in the right direction?

The first step is deciding which side is the "client" and which side is the "server". The "server" listens for connections on a specific port and protocol. The "client" then makes a connection to that server.

The second step is to decide if you want fast or reliable.

UDP (User Datagram Protocol) messages are fast but can possibly get lost.

TCP (Transaction Control Protocol) messages always arrive at the destination in the order they were sent. If a packet gets lost it will be re-sent. Until packet N arrives successfully you can't get packet N+1.

well the arduino will be the "server" and i think reliability will be useful for this as it is better to have a system work slow then not at all

So the next step is to look at the examples where the Arduino is the server and TCP is the protocol.

Looks like File->Examples->Ethernet->DhcpChatServer is your best bet. It creates a server on Port 23, accepts a connection, and echos everything it receives to both the client and Serial.

One thing to watch out for: The client always has to send first. The "server.available()" function returns the first connected client that has data ready to read. If the client has not sent any data the server will not consider the client as an active connection. :frowning:

thanks mate, ill see what i can find out and post any other issues i have :slight_smile:

I'd think the simplest thing to do is use a web page like in the code below to send the desired info to the arduino.

//zoomkat 4-1-12
//simple button GET for servo and pin 5
//for use with IDE 1.0
//open serial monitor to see what the arduino receives
//use the \ slash to escape the " in the html, or use ' instead of " 
//address will look like http://192.168.1.102:84 when submited
//for use with W5100 based ethernet shields

#include <SPI.h>
#include <Ethernet.h>
#include <Servo.h> 
Servo myservo;  // create servo object to control a servo 

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
byte ip[] = { 192, 168, 1, 102 }; // ip in lan
byte gateway[] = { 192, 168, 1, 1 }; // internet access via router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
EthernetServer server(84); //server port

String readString; 

//////////////////////

void setup(){

  pinMode(5, OUTPUT); //pin selected to control
  //start Ethernet
  Ethernet.begin(mac, ip, gateway, gateway, subnet);
  server.begin();

  myservo.write(90); //set initial servo position if desired
  myservo.attach(7);  //the pin for the servo control
  //enable serial data print 
  Serial.begin(9600); 
  Serial.println("server servo/pin 5 test 1.0"); // so I can keep track of what is loaded
}

void loop(){
  // Create a client connection
  EthernetClient client = server.available();
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();

        //read char by char HTTP request
        if (readString.length() < 100) {

          //store characters to string 
          readString += c; 
          //Serial.print(c);
        } 

        //if HTTP request has ended
        if (c == '\n') {

          ///////////////
          Serial.println(readString); //print to serial monitor for debuging 

          client.println("HTTP/1.1 200 OK"); //send new page
          client.println("Content-Type: text/html");
          client.println();

          client.println("<HTML>");
          client.println("<HEAD>");
          client.println("<TITLE>Arduino GET test page</TITLE>");
          client.println("</HEAD>");
          client.println("<BODY>");

          client.println("<H1>Zoomkat's simple Arduino button</H1>");
          
          client.println("<a href=\"/?on\">ON</a>"); 
          client.println("<a href=\"/?off\">OFF</a>"); 

          client.println("</BODY>");
          client.println("</HTML>");
 
          delay(1);
          //stopping client
          client.stop();

          ///////////////////// control arduino pin
          if(readString.indexOf("on") >0)//checks for on
          {
            myservo.write(40);
            digitalWrite(5, HIGH);    // set pin 5 high
            Serial.println("Led On");
          }
          if(readString.indexOf("off") >0)//checks for off
          {
            myservo.write(140);
            digitalWrite(5, LOW);    // set pin 5 low
            Serial.println("Led Off");
          }
          //clearing string for next read
          readString="";

        }
      }
    }
  }
}