refresh pagina html in tempo reale!!

Buona sera a tutti! Il mio piccolo progetto sta lentamente avanzando(quanta pazienza), dopo tante prove sono riuscito a connettermi da remoto e inviare dati su arduino ethernet e visualizzarli su una pagina web a cui viene fatto un continuo refresh per tenere i dati del sensore acs712 sempre aggiornati in "real time". Ora vi chiederete qual è il problema,funziona tutto bene ma non i va giù il fatto che il refresh faccia aggiornare tutta la pagina html quindi brutto da vedere l' effetto del tasto del browser che e in continuo aggiornamento, e poi anche che le scritte e i numeri lampeggiano appunto come quando si ricarica una pagina web. io ho cercato su google qualche informazione e mi sono cimentato nel web socket. ho seguito questa guida(What Is Visual Programming and How Does It Work? | AppMaster) ma quando poi arrivo alla fine non riesco a vedere i dati del sensore e dopo tante prove mi sono arreso, spero in un vostro aiuto.

QESTO è LO SKETCH ATTUALE:NON BADATE AI COMMENTI :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes:

#include <SPI.h>
#include <Ethernet.h>
#include "EmonLib.h"                   // Include Emon Library
EnergyMonitor emon1; 
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 1, 60);

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(8080);

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  emon1.current(0, 17);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }


  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}


void loop() {
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // the connection will be closed after completion of the response
          client.println("Refresh: 0");  // refresh the page automatically every 5 sec
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          // output the value of each analog input pin
          for (int i = 0;i < 1; i++) {
            double amp = emon1.calcIrms(1480);
            double watt=amp*230.0;
            client.print("<h1><u>");
            if(amp<0.05)
            {
              amp=0;
              watt=0;
             client.print("Amp: ");
             client.print(amp);
             client.print("
");
             client.print("Watt: ");
             client.print(watt);
           }
          else
          {
             client.print("Amp: ");
             client.print(amp);
             client.print("
");
             client.print("Watt: ");
             client.print(watt);}
            
          }
          client.print("<h1></u>");
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disconnected");
  }
}

GRAZIE A TUTTI IN ANTICIPO! :):slight_smile:

La tecnica di aggiornare solo una parte della pagina Web si chiama AJAX. Ci sono sistemi pronti o puoi farlo con javascript.
Ciao Uwe

Quel link che hai postato non fa uso di un websocket, semplicemente arduino è un client che invia un dato a un server esterno con metodo GET in polling e nemmeno in tuo sketch.

Beh ajax l'ho solo sentito nominare, e ho cercato su internet ma non ci ho capito molto e poi con il javascript non ho pochissima esperienza. Quindi ora aspetto un vostro aiuto, cosa mi consigliate sia meglio?

guarda avevo scritto un poema ma poi ho cancellato.
se ti interessa aprire un sito su altervista.org e abbassare le difese con un sms di 30 centesimi, mi pare...
ti posso dare uno spunto di come faccio io con il mio arduino YUN ad inviare dati e comandare arduinop da altervista in real time senza refresh..
real time... dipende da connessione e quanti byte si vuole consumare :stuck_out_tongue_closed_eyes:
ripeto con lo YUN quindi per arduino e ethernet è solo uno spunto.