problema di comunicazione bidirezionale

salve a tutti,
dopo anni di cassetto o ripreso lo studio di arduino con un classico progetto di comunicazione HTTP per modificare lo stato di alcune porte e visualizzare alcuni ingressi.
il tutto funziona correttamente, poi mi è venuta l'idea di creare una seconda postazione identica (chiaramente con altro indirizzo ip), ora la mia domanda è come posso fare a passare i dati di input tra una scheda e altra?
per comandare le uscite basta gesttire correttamente i link di uscita ma il passaggio degli stati tra un dispositivo e l'altro?

spero di essere stato chiaro sul dubbio, posto anche porzione del codice per essere più chiaro.

 // Creo una connessione al client
    EthernetClient client = server.available();
    if (client) {
      while (client.connected()) {   
        if (client.available()) {
          char c = client.read();
          //Leggo i caratteri da HTTP
            if (readString.length() < 100) {
              //Inserisco i caratteri nella stringa 
              readString += c;
              //Serial.print(c);
            }
         //Se la richiesta HTTP è andata a buon fine
         if (c == '\n') {          
            statoluce ();
            client.println(F("HTTP/1.1 200 OK")); //Invio nuova pagina
            client.println(F("Content-Type: text/html"));
            client.println();         
            client.println(F("<HTML>"));
            client.println(F("<HEAD>"));
            client.println(F("<meta http-equiv=\"refresh\" content=\"40; url=http://192.168.1.89\">"));
            client.println(F("<style type=\"text/css\">"));
            client.println(F("body{ background: rgb(197,222,234); background: -moz-linear-gradient(top, rgba(197,222,234,1) 0%, rgba(138,187,215,1) 34%, rgba(6,109,171,1) 100%); background: -webkit-linear-gradient(top, rgba(197,222,234,1) 0%,rgba(138,187,215,1) 34%,rgba(6,109,171,1) 100%); background: linear-gradient(to bottom, rgba(197,222,234,1) 0%,rgba(138,187,215,1) 34%,rgba(6,109,171,1) 100%) fixed; filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#c5deea', endColorstr='#066dab',GradientType=0 ); text-align:center;}"));
            client.println(F("h1{ text-align: center; font-family:Arial, \"Trebuchet MS\", Helvetica, sans-serif;}"));
            client.println(F("</style>"));
            client.println(F("<TITLE>Primo piano</TITLE>"));
            client.println(F("</HEAD>"));
            client.println(F("<BODY>"));
            client.println(F("<H1>Primo piano</H1>"));
            client.println(F(" <hr /> 
  "));
            client.println(F("<table align=\"center\" >"));
            if(stato0==1){
                client.println(F("<tr valign=\"center\" align=\"center\"><td><H2>Corridoio: </h2></td><td><a href=\"/?button0\"\"><img src=\"https://3.bp.blogspot.com/-_mYr87VMrbE/W9qufv60QKI/AAAAAAAAPpQ/SvcLrJFGXCgGaFuCkVgdzMRWVTdiLEvYwCLcBGAs/s1600/off_1.gif\"/></a> </td></tr>"));
             }
             else{
                client.println(F("<tr valign=\"center\" align=\"center\"><td><H2>Corridoio: </h2></td><td><a href=\"/?button0\"\"><img src=\"https://1.bp.blogspot.com/-rvc19NYOYC8/W9qugtajNaI/AAAAAAAAPpY/iwXFBs2DNQgjvt4fIRbXjFGlJRTYNjFdACLcBGAs/s1600/on_1.gif\"/></a> </td></tr>"));
             }
            
            client.println(F("</table>"));
            client.println(F(" </BODY>"));
            client.println(F("</HTML>"));
            delay(1);
            client.stop();
            //Controlli su Arduino: Se è stato premuto il pulsante sul webserver
            if (readString.indexOf("?button0") >0){
               attivaluce(led1);
            }
            //Cancella la stringa una volta letta
            readString="";  
         }
       }
    }
  }

E' possibile ma la cosa si complica :slight_smile:

Io ho un dispositivo server e dei dispositivi client, per comunicare i dispositivi client devono passare per il server.

Io voglio delle informazioni, a una certa condizione o passato un intervallo di tempo interrogo il server passandogli una stringa di comando, e il server mi risponderà con una stringa di risposta.

Perché un informazione sia condivisa tra più client, deve avvenire questo.

1)Un client ha un dato o informazione, la trasmette al server sotto forma di stringa
2) il server la riceve e memorizza
3) I vari client al verificarsi di una condizione o trascorso un intervallo di tempo, inviano una stringa di comando al server

  1. Il server riceve la stringa di comando e per risposta invia dati sotto forma di stringa che il client riceve

Questo è il meccanismo che si usa comunemente nelle pagine web. Adesso implementarlo, realizzarlo col codice potrebbe risultare impegnativo, è qualcosa di più elaborato degli esempi base di arduino.

Tra l'altro secondo me la comunicazione server-unità potrebbe avvenire direttamente in UDP eliminando la necessità di analizzare/comporre HTML e di avviare/chiudere ogni volta connessioni TCP. Nel caso in questione una delle due unità potrebbe essere il server.

grazie per la risposta, provo un po a studiare la situazione, forse hai ragione e la cosa diventa molto più semplice gestendo un master e più client e non una soluzione multi master.