Comunicazione tra due Arduino Ethernet

:slight_smile: ciao ragazzi, sono nuovo del forum ma lo seguo con molto interesse...
mi sto appassionando sempre di più al mondo di Arduino, ho un progetto in mente che cerco di realizzare da oltre una settimana.
Non riuscendoci chiedo il vostro aiuto a riguardo...

Avrei la necessità di far comunicare tra loro due schede Arduino Ethernet.
Le schede sono connesse tra loro tramite cavo cross, e dovrebbero scambiare tra loro informazioni del tipo:

  • serie numeriche
  • parole
  • dati da sensori
  • semplici caratteri

Leggendo il libro " Arduino uno programmazione avanzata" mi sembra di aver capito che posso impostare le due schede Arduino come server, come client, oppure come trasferimenti di tipo UDP. Nonostante tutto non riesco a configurare in maniera corretta gli sketch. Preciso che i due arduino sono collegati a due pc differenti tramite usb, e connesse tra loro tramite cavo cross.
:sweat_smile: Quì sotto vi allego i due sketch che abbiamo caricato sulle schede, uno per la scheda Tx e l'altro per quella Rx. (ovviamente questa era solo una prova, infatti noi dovremmo realizzare un sistema di scambio dati bidirezionale) :slight_smile: :slight_smile: :slight_smile:

GRAZIE IN ANTICIPO!!!

Scheda Tx:------------------------------------------------------------------------------------

#include <SPI.h>         
#include <Ethernet.h>
#include <EthernetUdp.h>         

byte mac[] = {0x90, 0xA2, 0xDA, 0x0D, 0x8D, 0x52};
byte ipMattia[] = {192, 168, 1, 100};
unsigned int localPort = 8888;  

byte ipMaury[] = {192, 168, 1, 200};
unsigned int portMaury = 8080;

EthernetUDP MattiaUdp;

void setup() {
  Ethernet.begin(mac,ipMattia);
  MattiaUdp.begin(localPort);
}

void loop() {
  MattiaUdp.beginPacket (ipMaury, portMaury);
  MattiaUdp.write ("ciao");
  delay(50);
  MattiaUdp.endPacket();
  delay(1000);
    
}

Scheda Rx:-----------------------------------------------------------------------------------------

#include <SPI.h>         
#include <Ethernet.h>
#include <EthernetUdp.h>         

byte mac[] = {0x90, 0xA2, 0xDA, 0x0D, 0x8D, 0x2B};
byte ipMaury[] = {192, 168, 1, 200};
byte localPort = 8080;  

byte ipMattia[] = {192, 168, 1, 100};
unsigned int portMattia = 8888;

EthernetUDP MauryUdp;

void setup() {
  Ethernet.begin(mac,ipMaury);
  MauryUdp.begin(localPort);
  Serial.begin(9600);
}

void loop() {
  byte datiRx = MauryUdp.read();
  Serial.println (datiRx);
  delay(3000);
  
}

ciao,
ti consiglio di inserire in entrambi gli Arduino un codice nel setup() per la verifica degli indirizzi IP e della subnetmask di entrambi.
Un semplice serial.print dopo l'inizializzazione va più che bene.

Poi dai uno sguardo qui --> Arduino Forum
E' un protocollo P2P per lo scambio dei dati.

il codice lo puoi racchiudere dentro i tag CODE, tasto # dell'editor (sopra le faccine)

ciao paolo! grazie per la tempestiva risposta...
ti ringrazio per il consiglio che ci hai dato... il nostro problema principale però, resta far dialogare le due schede collegate tra loro tramite cavo di rete... avevamo pensato all' I2C, ma dobbiamo lavorare su distanze notevoli e interagire con più schede collegate ad una rete LAN...

Allora... sono riuscito a far comunicare le 2 schede, ed anche ad avere una verifica dello stato della connessione sul display seriale...
sono riuscito a scambiare dei valori, ma quello che non capisco è come fare a inviare tipo un "ciao"... riesco solo ad inviare valori da 1 a 255.... qualche consiglio?

scheda server--------------------------------------

// la scheda è stata configurata come Server e deve 
// rispondere ad una scheda configurata come client
// sono connesse tra loro attraverso un cavo cross.

#include <SPI.h>
#include <Ethernet.h>

char A=100;
char B=200;



byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x8D, 0x2B };
IPAddress ip(192,168,1, 150);

int cicciobello;
EthernetServer MauryServer(80);



void setup() 
 {
  
  Serial.begin(9600);
  Ethernet.begin(mac,ip);
    MauryServer.begin();
    MauryServer.available();
    
    
    
 } 
  
 
void loop() 
{
  MauryServer.available();
  Serial.println(MauryServer.available());
  MauryServer.print(311, HEX);
  
  delay(1000);  
}

scheda Client--------------------------------------------------------------------------------------------------------------------------------

// la scheda è impostata come client ed è connessa ad un altra scheda arduino 
// mediante cavo cross.
// il server mi invia dei dati che posso visualizzare sul monitor seriale.
// mediante il monitor seriale posso anche vedere lo stato della
// connessione se "ok" o "no".



#include <SPI.h>;
#include <Ethernet.h>;

byte mac[] = {0x90, 0xA2, 0xDA, 0x0D, 0x8D, 0x52};
IPAddress ipMattia (192, 168, 1, 100);

EthernetClient MattyClient;

IPAddress ipMaury (192, 168, 1, 150);



void setup()
{
  Serial.begin (9600);
  Ethernet.begin (mac, ipMattia);
}
  

void loop()
{
  MattyClient.connect (ipMaury, 80);
  if (MattyClient.connected() == true) {
    Serial.print ("");
    
  }
  else {
    Serial.print ("no");
  }
  Serial.println (MattyClient.read());
  delay(1000);
  
}

Devi inventarti un protocollo di trasmissione o implementarne uno già esistente, tipo il Modbus TCP.
--> http://highfieldtales.wordpress.com/2012/03/31/modbus-tcp-library-for-netduino/
--> siamect.com » Process control based on free resources …
--> Google Code Archive - Long-term storage for Google Code Project Hosting.