Il sito dedicato all'informatica ideato da Iasparra Francesco

Shield Ethernet, comunicazione tra Arduino e PC

  • Semplice esempio client/server TCP/IP tra Arduino e il Computer

  • Data: 06/08/2008 Autore: Iasparra Francesco 


In questo esempio vi dimostrero' come sia facile far comunicare una scheda Shield Ethernet di Arduino UNO con il Computer su protocollo TCP/IP con un semplicissimo programma.

La scheda Arduino e' il nostro Client TCP, mentre per il Server TCP sul PC utilizzaremo un semplice progamma Java che utilizza le API nativer per il protocollo TCP/IP.

Lo Shield Ethernet di Arduino permette ad una scheda Arduino di connettersi ad Internet.

Esso si basa sul Wiznet W5100. Anche se esistono diversi modelli, noi ci baseremo sul Chip ufficiale e sul quale e' disponibilie molta documentazione.

L'ultima versione della Ethernet Shield basata su chip Wiznet W5100 dispone anche di uno slot per micro (ovvero quella in mio possesso).

Il Chip dispone di uno stack di rete (IP) che supporta sia TCP che UDP.

La prima cosa da fare e' installare il modulo ethernet shield sulla scheda Arduino UNO, collegare il dispositivo alla porta USB del Computer e lanciare il programma Arduino IDE per la programmazione.

Arduino shield ethernet

Scriviamo, ora, il codice per il client Arduino:

//Librerie impiegate per il progetto
#include 
#include 
 
//Creao un array di byte per specificare il mac address
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
//creo un array di byte per specificare l'indirizzo ip
byte ip[] = {192, 168, 1, 99};
 
//creo una variabile char per memorizzare i byte letti dal client
char Data_RX;

int count=0;
EthernetClient client;
IPAddress server(192,168,1,14);
 
void setup()
{
    //inizializza lo shield con il mac e l'ip
    Ethernet.begin(mac, ip);
    //inizializza l'oggetto server
    //ArduinoServer.begin();
}
 
void loop()
{
    count+=1;
    
    if (client.available()) {
      char c = client.read();
      Serial.print(c);
    }
    
    if (!client.connected()) {
      Serial.println();
      Serial.println("disconnecting.");
      client.stop();
    }
    
    
    sendData(count);
  
    delay(1000);
}

void sendData(int data) {

  if (client.connect(server, 6789)) {
    Serial.println("connecting...");
    client.println(count);
  }else{
    // if you couldn't make a connection:
    Serial.println("connection failed");
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
  }
}    

Allora, il codice non fa altro che inviare ad intervalli di 1 secondo (delay 1000) un cifra numerica che corrisponde al numero di esecuzioni eseguite. L'indirizzo del client e': 192.168.1.99 (lo si vede dalla riga di codice: byte ip[] = {192, 168, 1, 99};), mentre il server da invocare si trovera' all'indirizzo ip: 192.168.1.14 (chiamata della funzione: IPAddress server(192,168,1,14). Le librerie da importare per il corretto funzionamento del programma sono solo due: SPI.h e Ethernet.h

Il Server in Java sara' il seguente:

import java.io.*;
import java.net.*;

class Server
{
   public static void main(String argv[]) throws Exception
      {
         String clientSentence;
         String capitalizedSentence;
         ServerSocket welcomeSocket = new ServerSocket(6789);

         while(true)
         {
            Socket connectionSocket = welcomeSocket.accept();
            BufferedReader inFromClient =
               new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
            DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
            clientSentence = inFromClient.readLine();
            System.out.println("Received: " + clientSentence);
            //capitalizedSentence = clientSentence.toUpperCase() + '\n';
            //outToClient.writeBytes(capitalizedSentence);
         }
      }
}

La porta di ascolto del server e' stata impostata su 6789, verificate che un eventuale Firewall non blocchi l'accesso alla porta indicata. Quando viene lanciato il progamma java sul PC esso scrivera' a video de informazioni trasmesse dal modulo Shield Ethernet di Arduino, che nel nostro caso sara una seguenza di numeri del tipo 1...2...3...4...5...


  • Java

  • Php

  • Mysql

  • Apache ant

  • Eclipse

  • Spring

  • Hibernate

  • Netbeans

  • Debian

  • Linux

  • Maven