Ciao a tutti,
ho 2 Arduino connessi nella rete domestica.
Arduino 1 client = legge dei sensori e manda i valori letti al Arduino 2 server
Arduino 2 server = alternativamente, legge i sensori Arduino 1 client e gestisce il webserver su cui stampa i valori e da cui riceve dei comandi.
Nessun problema se la comunicazione tra i 2 Arduino é unidirezionale ovvero A1 client > A2 server ma a me servirebbe bidirezionale in modo che anche A2 server possa inviare informazioni a A1 client
Ho fatto diversi tentativi ma tutti senza successo.
Come deve essere strutturato il flusso dati affinché possa essere bidirezionale?
Qui l'estratto del codice del client
if (client.connect(server, 23)){ // Verifica conn. Client-To-Server
Serial.println("Connesso ON"); // Stampa su COM Connesso ON
client.write('A'); // Inizio stringa
client.print (a); //primo valore
client.write('B');
client.print (b);
client.write('C');
client.print (c);
client.write('D');
client.print (d);
client.write('E');
client.print (e);
client.write('F');
client.print (f);
client.print ('Z'); //fine stringa
client.print ('\0');
client.flush();
client.stop(); // Chiudi connessione
}
else{
Serial.println("Connessione ON fallita");
client.stop(); // Chiudi connessione
}
.............................................................
E questo é il codice che uso per ricevere i dati
EthernetServer server(23); // apre server porta 23
client = server.available();
Serial.println ("Server available ");
if (client){ //se si è connesso qualcuno
Serial.println ("Client connected ");
while ( client.connected() ) { // da fare quando client connesso
//aspetta senza far nulla che il client si disconnetta o invii almeno 1 lettera
char post = client.read();
if(bufferSize < bufferMax)
buffer[bufferSize++] = post; // salva nel buffer ed incrementa la dimensione
delay (1);
}
Serial.print ("Buffer ricevuto : "); Serial.println(buffer); // stampa buffer ricevuto
for (int i=0 ; i<bufferSize; i++) {
x = buffer[i] ; //estrae tutti caratteri dal buffer uno alla volta
relay() ; //routine per decodificare ed interpretare i singoli caratteri del buffer
}
estrazione_valori_sensori(); //routine di estrazione dei valori dal messaggio ricevuto
}
client.flush();
client.stop(); Serial.println ("Client stop ");
.......................................
Ovviamente il codice é artigianale e dopo essere stato scopiazzato é stato riadattato.
Comunque funziona bene.
P.S. uso 2 Arduino mega con W5100