Arduino Forum

International => Italiano => Software => Topic started by: md_corporation on Sep 13, 2016, 11:00 am

Title: Progetto sonde centrale termica
Post by: md_corporation on Sep 13, 2016, 11:00 am
Ciao a tutti;

Ho un impianto domotico con protocollo KNX ... gestisco il tutto tramite un server web della Schneider "Homelynk" ... sto cercando di creare una pagina dove visualizzo la temperatura stratificata degli accumuli che ho in centrale termica ... questo mi aiuterà a regolarmi come fare fuoco con il termocamino a legna che ho in sala (scalda l'accumulo per il riscaldamento a pavimento ed l'accumulo per i sanitari ... )

Ho acquistato i seguenti componendi secondo consiglio di un mio caro collega appassionato di arduino:

5 Sonde DS18B20
1 scheda ethernet W5100
1 arduino Mega 2560 R3 (sovradimensionato per l'applicazione ... ma probabilmente mi tornerà utile più avanti)

Lo scopo è quello di leggere le 5 sonde e ciclicamente scriverle ognuna su una pagina HTML distinta...
In questo modo creerò una pagina grafica tramite il mio server web "Homelynk" dove posizionerò i 5 campi sui relativi accumuli dove punteranno alle pagine html che arduino terrà in costante aggiornamento...

L'arduino sarà connesso alla rete locale di casa per comunicare con il serverweb "Homelynk".

...............Inizio così la mi avventura con Arduino ... non ho mai fatto alcun progetto se non con lo sterter KIT ... non sono neofita di programmazione .. lo faccio di lavoro .. semplicemente uso altri linguaggi... Chi ha applicazioni simili o gli interessa l'argomento è ben accetto e mi darà una gran mano qualora voglia darmi consigli!

Un saluto a tutti gli appassionati di Arduino!!


Title: Re: Progetto sonde centrale termica
Post by: md_corporation on Sep 13, 2016, 11:10 am
Partendo con una lista di cose da fare credo che la scaletta sia la seguente:

-Impostare l'indirizzo MAC della ethernet Shield
-Dare un IP alla shield ethernet arduino
-Dichiarare gli ingressi digitali da utilizzare per le sonde
-Creare un loop di lettura
-Creare un loop di scrittura per una destinazione non ancora ben chiara ...

.... più facile a dirsi che a fare... ;)
Title: Re: Progetto sonde centrale termica
Post by: md_corporation on Sep 13, 2016, 11:36 am
Iniziamo con un po di codice:

Code: [Select]


#include <String.h> 
#include <SPI.h> 
#include <Ethernet.h> 
 
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };   
byte ip[] = { 192, 168, 1, 3 }; // indirizzo IP della shield 
byte gateway[] = { 192, 168, 1, 1 }; // indirizzo ip del router 
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask 
EthernetServer server(80);   

ecc...........



Ecco .. l'interfaccia di rete è configurata... ora il prossimo passo sarà quello di definire le variabili da utilizzare in setup / loop...

una di queste dovrebbe essere la destinazione di dove vado a scrivere la temperatura che leggo dalla sonda ... ma non ho idea di come scriverlo ...
Title: Re: Progetto sonde centrale termica
Post by: gpb01 on Sep 13, 2016, 11:46 am
>md_corporation: ... ti consiglio una attenta lettura del REGOLAMENTO (http://forum.arduino.cc/index.php?topic=149082.0) ... difatti, in conformità al detto regolamento, punto 7, devi editare il tuo post (in basso a destra del post, bottone More -> Modify) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra).

Grazie.

Guglielmo
Title: Re: Progetto sonde centrale termica
Post by: md_corporation on Sep 13, 2016, 11:54 am
Scusa ti ringrazio .. l'avevo cercato ma non lo trovavo  :o
Title: Re: Progetto sonde centrale termica
Post by: md_corporation on Sep 14, 2016, 01:46 pm
Mi domando se sia possibile visualizzare contemporaneamente da remoto 5 pagine distinte con in ciascuna una sonda differente ...

Il dubbio mi viene dal fatto che da remoto linko ad un IP specifico dove la pagina è sempre e solo una ... 
Title: Re: Progetto sonde centrale termica
Post by: gpb01 on Sep 14, 2016, 02:03 pm
Se vuoi fornire 5 risposte differenti .. devi capire cosa uno ti domanda ... quindi usare i paramentri della HTTP GET.

Esempio:

http://_indirizzo_ip:porta?P1
http://_indirizzo_ip:porta?P2
...
http://_indirizzo_ip:porta?P5

... analizzando cosa ti arriva nella HTTP GET (P1, P2, ... P5) mandi i dati richiesti.

Solo che NON so se su una UNO riesci a farci stare il tutto ... ::)

Guglielmo
Title: Re: Progetto sonde centrale termica
Post by: md_corporation on Sep 14, 2016, 03:27 pm
Ho afferrato il concetto... come processore ho una Mega 2560 ... dici che può starci ?
Title: Re: Progetto sonde centrale termica
Post by: md_corporation on Sep 14, 2016, 03:44 pm
Ho afferrato il concetto... come processore ho una Mega 2560 ... dici che può starci ?

una impostazione del genere è corretta?

Code: [Select]

#include <String.h> 
#include <SPI.h> 
#include <Ethernet.h> 
 
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };   
byte ip[] = { 192, 168, 1, 3 }; // indirizzo IP della shield 
byte gateway[] = { 192, 168, 1, 1 }; // indirizzo ip del router 
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask 
EthernetServer server1(80);
EthernetServer server2(81);
EthernetServer server3(82);
EthernetServer server4(83);
EthernetServer server5(84);   


ed andrò ad abilitare la funzione con:

Code: [Select]
{
EternetClient client1 server1.available(); ..................

EternetClient client2 server2.available(); ..................

ecc.... =
Title: Re: Progetto sonde centrale termica
Post by: gpb01 on Sep 14, 2016, 04:12 pm
No, no, non intendevo quello ...
... inutile avere più server, la richiesta arriva sempre sulla stessa porta, esaminando COSA arriva tu identifichi come rispondere.

Prova a cercare con Google ... ci sono esempi che accendono e spengono più LED o cose del genere ... ed  il tutto semplicemente analizzando il messaggio che arriva nel corpo della HTTP GET ;)

Guglielmo
Title: Re: Progetto sonde centrale termica
Post by: md_corporation on Sep 14, 2016, 04:33 pm
Ok ... da remoto però dovrò linkare a 5 posti differenti .. o comunque con sintassi differente giusto ?

Es:

http://192.168.0.1:80/sonda1
http://192.168.0.1:80/sonda2
http://192.168.0.1:80/sonda3
http://192.168.0.1:80/sonda4
http://192.168.0.1:80/sonda5
Title: Re: Progetto sonde centrale termica
Post by: gpb01 on Sep 14, 2016, 04:50 pm
Si, certo, e quando ricevi la richiesta vai ad esaminare cosa hai ricevuto. Ripeto, se cerchi un po' trovi parecchi esempi già fatti ;)

Guglielmo
Title: Re: Progetto sonde centrale termica
Post by: md_corporation on Sep 14, 2016, 05:09 pm
Grazie ... faccio una ricerca poi casomai posto il codice per analizzarlo ...
Title: Re: Progetto sonde centrale termica
Post by: cam9500 on Sep 15, 2016, 08:52 am
Ciao, non ti conviene mettere le 5 temperature su una pagina sola?
Così hai tutto sott'occhio....
Title: Re: Progetto sonde centrale termica
Post by: md_corporation on Sep 15, 2016, 09:00 am
Il problema è che devo disporle graficamente in posizioni diverse della stessa pagina web dove sono mostrati i vari collettori ed accumuli della centrale termica ...

PS:  non riesco a capire cosa sbaglio:

Code: [Select]
/*
  Web Server

 A simple web server that shows the value of the analog input pins.
 using an Arduino Wiznet Ethernet shield.

 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13
 * Analog inputs attached to pins A0 through A5 (optional)

 created 18 Dec 2009
 by David A. Mellis
 modified 9 Apr 2012
 by Tom Igoe
 modified 02 Sept 2015
 by Arturo Guadalupi

 */

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

// 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, 8);

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

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }


  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("l'indirizzo è il seguente: ");
  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: 5");  // 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 analogChannel = 0; analogChannel < 6; analogChannel++) {
            int sensorReading = analogRead(analogChannel);
            client.print("analog input ");
            client.print(analogChannel);
            client.print(" is ");
            client.print(sensorReading);
            client.println("<br />");
          }
          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");
  }
}


L'indirizzo IP del PC è 192.168.1.1 ... mi collego con un cavo NON cross direttamente alla Shield ... e non riesco a pingarlo .... sia su arduino UNO che l'ATMega.... >:(
Title: Re: Progetto sonde centrale termica
Post by: md_corporation on Sep 15, 2016, 09:55 am
Risolto ... era una porta di rete del mio PG che non funziona più -.-
Title: Re: Progetto sonde centrale termica
Post by: md_corporation on Sep 15, 2016, 11:56 am
Ho trovato una libreria DallasTemperature che da come ho capito mi serve per poter utilizzare il seguente codice:

Code: [Select]
// Includiamo la libreria OneWire e la DallasTemperature
#include <OneWire.h>;
#include <DallasTemperature.h>;
 
// Usiamo il PIN 2 per connettere il bus 1-Wire
#define ONE_WIRE_BUS 2
 
// Impostiamo la precisione della conversione a 9-bit
#define TEMPERATURE_PRECISION 9
 
// Impostiamo la libreria per comunicare sul PIN desiderato
OneWire oneWire(ONE_WIRE_BUS);
 
// Passiamo il riferimento del bus 1-Wire alla libreria Dallas
DallasTemperature sensors(&oneWire);
 
// vettore per contenere gli indirizzi delle noste sonde
DeviceAddress Sonda1, Sonda2;
 
void setup(void)
{
  // avvia la seriale
  Serial.begin(9600);
  Serial.println("Lettura Sensori DS18B20 su unico bus 1-Wire");
  // avvia la libreria
  sensors.begin();
  // Localizza i dispositivi sul bus
  Serial.print("Localizza il numero dei dispositivi sul bus...");
  Serial.print("Trovati ");
  Serial.print(sensors.getDeviceCount(), DEC);
  Serial.println(" Dispositivi.");
  // risponde alla richiesta dell'alimentazione passiva
  Serial.print("Alimentazione Passiva: ");
  if (sensors.isParasitePowerMode()) Serial.println("ON");
  else Serial.println("OFF");
 
  // Assegna l'indirizzo delle sonde manualmente se lo si conosce già.
  // Comunque è possibile scoprire l'indirizzo delle sonde utilizzando il
  // metodo oneWire.search(indirizzo del dispositivo) oppure
  // sensors.getAddress(indirizzo dispositivio, indice)
  Sonda1 = { 0x28, 0x1D, 0x39, 0x31, 0x2, 0x0, 0x0, 0xF0 };
  Sonda2 = { 0x28, 0x3F, 0x1C, 0x31, 0x2, 0x0, 0x0, 0x2 };
 
  // Cerca i dispositivi sul bus e assegnazione attraverso l'indice.
  // Questo è il metodo preferibile per identificare gli indirizzi delle
  // sonde sul bus ed assegnarli poi ad un indice e successivamente assegnarli
  // manualmente con l'indirizzo sopra specificato una volta identificato.
  if (!sensors.getAddress(Sonda1, 0)) Serial.println("impossibile trovare l'indirizzo per il dispositivo 0");
  if (!sensors.getAddress(Sonda2, 1)) Serial.println("impossibile trovare l'indirizzo per il dispositivo 1");
 
  // Visualizza gli indirizzi trovati
  Serial.print("Indirizzo dispositivo 0: ");
  printAddress(Sonda1);
  Serial.println();
 
  Serial.print("Indirizzo dispositivo 1: ");
  printAddress(Sonda2);
  Serial.println();
 
  // imposta la risoluzione per la conversione
  sensors.setResolution(Sonda1, TEMPERATURE_PRECISION);
  sensors.setResolution(Sonda2, TEMPERATURE_PRECISION);
}
 
// Funzione per stampare l'indirizzo delle sonde
void printAddress(DeviceAddress deviceAddress)
{
  for (uint8_t i = 0; i < 8; i++)
  {
    if (deviceAddress[i] < 16) Serial.print("0");
    Serial.print(deviceAddress[i], HEX);
  }
}
 
// Funzione per stampare la temperatura
void printTemperature(DeviceAddress deviceAddress)
{
  float tempC = sensors.getTempC(deviceAddress);
  Serial.print("Temp C: ");
  Serial.print(tempC);
  Serial.print(" Temp F: ");
  Serial.print(DallasTemperature::toFahrenheit(tempC));
}
 
// Funzione per stampare i dati delle sonde
void printData(DeviceAddress deviceAddress)
{
  Serial.print("Indirizzo dispositivo: ");
  printAddress(deviceAddress);
  Serial.print(" ");
  printTemperature(deviceAddress);
  Serial.println();
}
 
/*
 * LOOP
 */
void loop(void)
{
  Serial.print("Richiesta Temperature...");
  sensors.requestTemperatures();
  Serial.println("OK");
 
  printData(Sonda1);
  printData(Sonda2);
}


Il problema è che alla compilazione da il seguente errore:

"No sich file or directory

#include <OneWire.h>"

L'errore scompare SOLO se non includo la libreria DallasTemperature......
Title: Re: Progetto sonde centrale termica
Post by: gpb01 on Sep 15, 2016, 02:17 pm
Guarda che negli #include NON ci va il ";" alla fine !!!!

Guglielmo
Title: Re: Progetto sonde centrale termica
Post by: md_corporation on Sep 15, 2016, 04:19 pm
Grazie Gpb abbi pazienza sono un a gli inizi con questo linguaggio...

...Molto bene son riuscito grazie a Sketch trovati online e modificati qua e la ... a visualizzare la temperatura di UNA sonda collegata ad un canale digitale sia su monitor seriale che su una pagina HTML con il seguente codice:


Code: [Select]
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SPI.h>
#include <Ethernet.h>

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

//impostazioni di rete:::::::::::::::::::::::::::::::::::::::::::::::::
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 8);
EthernetServer server(80);
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

void setup() {

  delay(1000);
  Serial.begin(9600);

  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  Ethernet.begin(mac, ip);
  server.begin();

  Serial.println("Misuro la temperatura con sensore DS18B20");
  Serial.println("continuo la misurazione");
  delay(1000);
  sensors.begin();
}

void loop()
{
  Serial.println();
  sensors.requestTemperatures();
  Serial.print("Temperatura = ");
  Serial.print(sensors.getTempCByIndex(0));
  Serial.println(" gradi C");

  EthernetClient client = server.available();

  if (client) {
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();

        if (c == '\n' && currentLineIsBlank) {

          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println("Refresh: 5");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");

          //______visualizzo temperatura______
          client.println(sensors.getTempCByIndex(0));
          client.print(" Gradi");
          //__________________________________

        }
        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");
    Ethernet.maintain();
  }
  //__________________________________________________________________________________________________

}


Ora vorrei capire come identificare l'ipotetica richiesta da remoto per la lettura di una 2° -3° -4° -5° eventuale sonda ...

Ora da browser per connettermi digito semplicemente l'IP ... abbiamo detto in post dietro che per poter distinguere una differente richiesta la stringa da digitare a browser potrebbe essere una cosa simile:

Code: [Select]
http://192.168.1.8/Sonda_1
http://192.168.1.8/Sonda_2
http://192.168.1.8/Sonda_3
http://192.168.1.8/Sonda_4
http://192.168.1.8/Sonda_5


Nel mio codice lato arduino come identifico queste richieste?

Grazie

Title: Re: Progetto sonde centrale termica
Post by: gpb01 on Sep 15, 2016, 04:32 pm
Come ti ho detto devi cercare esempi che accendono/spengono più LED ... dove c'è un analisi del testo che si riceve dalla HTTP GET e dove si prendono decisioni in base a ciò che si riceve.

Guglielmo
Title: Re: Progetto sonde centrale termica
Post by: md_corporation on Sep 15, 2016, 05:14 pm
Ho provato con questo:

Code: [Select]
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SPI.h>
#include <Ethernet.h>

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

//impostazioni di rete:::::::::::::::::::::::::::::::::::::::::::::::::
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 8);
EthernetServer server(80);
String readString; //<------------------------------------------AGGIUNTO
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

void setup() {

  delay(1000);
  Serial.begin(9600);

  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  Ethernet.begin(mac, ip);
  server.begin();

  Serial.println("Misuro la temperatura con sensore DS18B20");
  Serial.println("continuo la misurazione");
  delay(1000);
  sensors.begin();
}

void loop()
{
  Serial.println();
  sensors.requestTemperatures();
  Serial.print("Temperatura = ");
  Serial.print(sensors.getTempCByIndex(0));
  Serial.println(" gradi C");

  EthernetClient client = server.available();

  if (client) {
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
readString.concat(c); //<------------------------------------------AGGIUNTO
        if (c == '\n' && currentLineIsBlank) {

         
           { if (readString.indexOf("/LOL") > 0 ) client.println("INTERROGATIVO"); } //<------------------------------------------AGGIUNTO
         

          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println("Refresh: 5");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");

          //______visualizzo temperatura______
          client.println(sensors.getTempCByIndex(0));
          client.print(" Gradi");
          //__________________________________

        }
        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");
    Ethernet.maintain();
  }
  //__________________________________________________________________________________________________

}


Ma quando digito da browser 192.168.1.8/LOL

non carica niente...
Title: Re: Progetto sonde centrale termica
Post by: gpb01 on Sep 15, 2016, 05:20 pm
Studiati il codice che trovi in QUESTO (http://forum.arduino.cc/index.php?topic=44646.0) thread ... e poi adattalo alle tue esigenze ;)

Anche QUI (http://arduino.stackexchange.com/questions/13388/arduino-webserver-faster-alternative-to-indexof-for-parsing-get-requests) c'è un bell'esempio di "parsing" :)

Guglielmo
Title: Re: Progetto sonde centrale termica
Post by: md_corporation on Sep 16, 2016, 08:43 am
Dunque... ho analizzato un po il codice del thread che mi hai passato:

Code: [Select]
//zoomkat 5-24-10
// http://www.arduino.cc/en/Tutorial/TextString for WString.h
#include <WString.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
byte ip[] = { 192, 168, 1, 102 }; // ip in lan
byte gateway[] = { 192, 168, 1, 1 }; // internet access via router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
Server server(84); //server port

String readString = String(100); //string for fetching data from address

///////////////////////
String teststring = String(100);
String finalstring = String(100);
String flag = String(2);
int ind1 = 0;
int ind2 = 0;
int pos = 0;
//////////////////////

void setup(){

//start Ethernet
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();

//enable serial data print
Serial.begin(9600); }

void loop(){
// Create a client connection
Client client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();

//read char by char HTTP request
if (readString.length() < 100) {

//store characters to string
readString.append(c);
}

//if HTTP request has ended
if (c == '\n') {

///////////////
//Serial.println(readString);
//readString looks like "GET /?-0p1555-1p500t1000 HTTP/1.1"

 if(readString.contains("-")) { //test for servo control sring
 readString.replace('-', '#');
 pos = readString.length(); //capture string length
 //find start of servo command string (#)
 ind1 = readString.indexOf('#');
 //capture front part of command string
 teststring = readString.substring(ind1, pos);
 //locate the end of the command string
 ind2 = teststring.indexOf(' ');
 //capturing the servo command string from readString
 finalstring = readString.substring(ind1, ind2+ind1);
 //print "finalstring" to com port;
 Serial.println(finalstring); //print string with CR
   }
 ////////////////////////
 //GET /?Slidervalue0=1800&Submit=Sub+0 HTTP/1.1
 if(readString.contains("Slidervalue")) {
 ind1 = readString.indexOf('u');
 ind2 = readString.indexOf('&');
 finalstring = readString.substring(ind1+1, ind2);
 finalstring.replace('e', '#');
 finalstring.replace('=', 'p');
 Serial.println(finalstring);
 }
 ///////////////////
 
 //now output HTML data header
 client.println("HTTP/1.1 204 Zoomkat");
 client.println();
 client.println();
 delay(1);
 //stopping client
client.stop();

/////////////////////
//clearing string for next read
readString="";
teststring="";
finalstring="";
 
}}}}}


vediamo se ho capito... la logica che ha usato se non sbaglio è la seguente:

-Creo degli array di stringhe per memorizzare il link digitato da browser
-Lo analizzo per identificarne la richiesta
-In base alla richiesta rispondo con un println differente... o comunque una azione distinta

Ed il codice dovrebbero essere il seguente:

Code: [Select]


//creo array:
String stringaCompleta = String(100);
String stringaDiFondo = String(100);

//in qualche maniera non ho ben capito come... legge la stringa scritta da browser (dopo aver avviato il server ovviamente..) con questo comando:
if readString.lenght() <100

//Come se leggesse la lunghezza "lenght" e verifica che sia inferiore a 100 .. ma non capisco se 100 caratteri o cosa ...

//poi sembra legga l'ultimo carattere se non sbaglio con questo codice:
readString.append(c);

//dopo di che con le istruzioni if per interrogare la variabile dove conterrà le diverse richieste nel suo caso sostituisce quello che legge con un altro carattere...
if (readString.contains("-")) {
readString.replace('-';'#');

 


Non sono proprio certo di aver capito ... o meglio: ho capito che devo scompattare e leggere la dicitura scritta da browser che se non ho afferrato male è scritta nella "c" ... che però contiene più info ... devo cercare di leggere solo la parte finale ... una volta fatto questo il resto è più semplice ...
In VB.Net sarebbe una passeggiata :P
Title: Re: Progetto sonde centrale termica
Post by: gpb01 on Sep 16, 2016, 09:16 am
T'ho detto che quello era un ESEMPIO per capire come si fa un "parsing" ... NO che lo devi copiare tale e quale ... anche perché tu NON ricevi il # che lui va a cercare (... a meno che non lo metti tu nella richiesta in una specifica posizione).

Purtroppo c'è da imparare a ricevere, carattere a carattere la richiesta che arriva, riconoscere quando questa è finita, fare il "parsing" per cercare le parole chiavi che si usano (es. Sonda_1, Sonda_2, ecc) e qundi agire di conseguenza.

Guglielmo

P.S.: Sai quale è il problema ... voler fare con un microcontrollore fatto per automazione cose che si fanno molto più semplicemente in ambienti "computer like" ... ad esempio una UNO con uno Yún Shield (https://www.arduino.cc/en/Main/ArduinoYunShield) (... annunciato, ma non ancora disponibile. Ci sono comunque alternative) è molto più adatta. Sullo Yún Shield gira Linux (... ovvio che un po' tocca conoscerlo) e fai tutta la parte WEB, sulla UNO invece gira la parte che controlla gli I/O ed i due mondi colloquiano tra di loro.
Title: Re: Progetto sonde centrale termica
Post by: elpapais on Sep 16, 2016, 09:54 am
P.S.: Sai quale è il problema ... voler fare con un microcontrollore fatto per automazione cose che si fanno molto più semplicemente in ambienti "computer like" ... ad esempio una UNO con uno Yún Shield (https://www.arduino.cc/en/Main/ArduinoYunShield) (... annunciato, ma non ancora disponibile. Ci sono comunque alternative) è molto più adatta. Sullo Yún Shield gira Linux (... ovvio che un po' tocca conoscerlo) e fai tutta la parte WEB, sulla UNO invece gira la parte che controlla gli I/O ed i due mondi colloquiano tra di loro.
Secondo me il problema sono le scarse conoscenze specifiche.
un conto è elettronica analogica e gia conoscerla tutta è un'impresa....
poi c'e' l'elettronica digitale abbastanza semplice se si esclude i microcontrollori ma includerli presuppone anche l'informatica...
quindi programmazione....
poi cosa ci vuole mettere un dispositivo in rete????
basta la scheda di rete? oppure bisogna conoscere anche una piccolissima parte dell'informatica ovvero la parte comunicazioni quindi conoscere i protocolli, i linguggi associati...
Vogliamo solo 4 pagine web? basta poco che ce vo? alla fine con un po di ajax, una manciata di java, quattro codici html....

Non basta conoscere a stento i concetti....
Io so che un aereo ha gli alettoni, il timone di coda, un po di motori che se accellero e tiro la cloche sale in aria sping0 la cloche e decellero e atterro??? mi sa che è più probabile che mi schianti perche'  non sono un pilota!!!!!
Studio un pochino e magari conseguo anche il brevetto....

Guglielmo se non erro tu avevi fatto un bellissimo esempio con tinywebserver forse con quello....
Title: Re: Progetto sonde centrale termica
Post by: gpb01 on Sep 16, 2016, 10:04 am
Guglielmo se non erro tu avevi fatto un bellissimo esempio con tinywebserver forse con quello....
No, non ero stato io, però, giustamente, magari potrebbe provare proprio con quella libreria ... QUI (https://github.com/ovidiucp/TinyWebServer) ;)

Prima di usarla ... va studiata bene :)

Guglielmo
Title: Re: Progetto sonde centrale termica
Post by: elpapais on Sep 16, 2016, 10:55 am
queste 18 lezioni spazzolano al 1% quello che bisognerebbe sapere per portare avanti un progetto di acquisizione dati da sensori e pubblicazone su server web in un arduino mega/due da solo.
Da una serie di nozioni che però appunto sono di base 1%.
Io a suo tempo, ne ricavai utili info pur conoscendo la materia diciamo al 10%

https://startingelectronics.org/tutorials/arduino/ethernet-shield-web-server-tutorial/ (https://startingelectronics.org/tutorials/arduino/ethernet-shield-web-server-tutorial/)

Il server e gli esempi di Ovidio Tinywebserver oppure mytinywebserver (fork di quello di Ovidio) di un italiano ma non ricordo chi.. Sono semplici se si conosce la materia altrimenti leggersi almeno le 16 lezioni e poi le ultime due per sistemare le cose bene.
Cosi com'e' in lezione 16 funziona tutto alla grande quindi con poco sforzo si riesce ad aggiungere quello che manca..

Con tinywebserver io ho fatto una gestione di stufe a pellet con tanto di gauge java per temperatura acqua, caldaia, livello pellet, temperature 8 stanze...
c'e' anche un altro esempio di Carlos mi sembra caldaiaelio.zip nel forum arduino.
Title: Re: Progetto sonde centrale termica
Post by: gpb01 on Sep 16, 2016, 11:13 am
C'è anche QUESTO (https://github.com/SukkoPera/Sukkino) ed in particolare la cartella Webbino, fatto da SukkoPera molto attivo qui nel forum Italiano :)

Guglielmo
Title: Re: Progetto sonde centrale termica
Post by: md_corporation on Sep 16, 2016, 01:22 pm
T'ho detto che quello era un ESEMPIO per capire come si fa un "parsing" ... NO che lo devi copiare tale e quale ... anche perché tu NON ricevi il # che lui va a cercare (... a meno che non lo metti tu nella richiesta in una specifica posizione).

Purtroppo c'è da imparare a ricevere, carattere a carattere la richiesta che arriva, riconoscere quando questa è finita, fare il "parsing" per cercare le parole chiavi che si usano (es. Sonda_1, Sonda_2, ecc) e qundi agire di conseguenza.

Guglielmo

P.S.: Sai quale è il problema ... voler fare con un microcontrollore fatto per automazione cose che si fanno molto più semplicemente in ambienti "computer like" ... ad esempio una UNO con uno Yún Shield (https://www.arduino.cc/en/Main/ArduinoYunShield) (... annunciato, ma non ancora disponibile. Ci sono comunque alternative) è molto più adatta. Sullo Yún Shield gira Linux (... ovvio che un po' tocca conoscerlo) e fai tutta la parte WEB, sulla UNO invece gira la parte che controlla gli I/O ed i due mondi colloquiano tra di loro.
Attenzione: non ho detto che l'ho copiato... stavo semplicemente riflettendo ad alta voce il codice che mi hai consigliato ... tutto li... Ovvio che non mi serve andare a sostituire parti di stringa...

Per quanto riguarda la mia conoscenza del mondo arduino so bene che è veramente ad un livello sotto la base ... sto imparando ...

Voi siete su un'altro pianeta e quindi  mi resta difficile spiegarmi in maniera comprensiva nei vostri confronti ma ancor più capire cosa diciate al primo colpo...

Tornando allo scopo del Thread... ora sto cercando di capire come riportare in una variabile la parte di stringa scritta dal client... dopo di che cerco di scomporla leggendo l'ultima parte ..
Title: Re: Progetto sonde centrale termica
Post by: gpb01 on Sep 16, 2016, 01:28 pm
OK, ma prova anche a guardare le librerie indicate ... magari ti risparmi un sacco di fatica ;)

Guglielmo
Title: Re: Progetto sonde centrale termica
Post by: md_corporation on Sep 16, 2016, 01:34 pm
e se non ho capito male questa operazione viene fatta in questo modo:

Code: [Select]


//definisco la funzione:
String readString = String (100);

//leggo l'intera stringa client
char c = client.read();

//questa dovrebbe essere l'interrogazione della parte di stringa che mi interessa se non sbaglio..
if (readString.lenght() < 100 )

{

//salvo i caratteri nella stringa
readString.append(c);

}




Cosa ne dite?
Title: Re: Progetto sonde centrale termica
Post by: md_corporation on Sep 16, 2016, 01:39 pm
OK, ma prova anche a guardare le librerie indicate ... magari ti risparmi un sacco di fatica ;)

Guglielmo
Te parli dell'idea di svilupparlo in ambiente Linux ?

Se intendi questo ... ti dico che preferisco andare avanti per la strada nella quale mi trovo perchè ho già acquistato tutto ... e non mi va di spendere altri soldi gettando nell'immondizia i componenti attuali ..
Title: Re: Progetto sonde centrale termica
Post by: elpapais on Sep 16, 2016, 01:48 pm
Non si tratta di buttare niente...
si tratta di guardare metodi alternativi usando librerie sia per visualizzare che ricevere dati....
Non si sta parlando di hardware si sta parlando di programmazione e conoscenze.

Usare string e' concettualmente sbagliato si usano matrici char in modo da poter identificare i caratteri singolarmente anche in funzione alle sequenze d'escape inviate dal protocollo tcpi
la strada che percorri second me è fondamentalmente sbagliata... ma libero di percorrerla.
Io mi fermerei un attimo magari leggendo qualcosa e trovando alcuni esempi (e ce ne sono una valangata)

Buon lavoro
Title: Re: Progetto sonde centrale termica
Post by: md_corporation on Sep 16, 2016, 02:03 pm
Questo post mi ha illuminato:


Code: [Select]
if(c == readString.indexOf("led1=0")) {
else if(c == readString.indexOf("led1=1")) {
 else if(c == readString.indexOf("led2=0")){
else if(c == readString.indexOf("led2=1")){

Queste condizioni non saranno mai vere, stai confrontando c che è un char contenente un solo carattere con una funzione che restituisce
-1 se la stringa cercata non esiste
(pos n) se la stringa cercata esiste

leggo un carattere alla volta proveniente dal client
Code: [Select]
char c = client.read();

appendo ogni carattere c in una var stringa che si chiama readString
Code: [Select]
readString.concat(c);

se trovo in char c il simbolo "a capo" chiudi la stringa
Code: [Select]
if (c == '\n'

readString è la stringa che devi analizzare non la variab char c, questa contiene il messaggio completo dove potrai trovare LED1....

Riguarda meglio gli esempi non troverai un controllo sulla variabile C per trovare il messaggio completo e riguarda bene cosa fa la funzione indexOf()
ciao

Title: Re: Progetto sonde centrale termica
Post by: gpb01 on Sep 16, 2016, 02:05 pm
Te parli dell'idea di svilupparlo in ambiente Linux ?
NO, se avessi dato un'occhiata ai link che ti abbiamo meso avresti letto che sono WebServer che girano sulla tua configurazione e che sono in grado di gestire più pagine anche depositate su SD.

Guglielmo
Title: Re: Progetto sonde centrale termica
Post by: elpapais on Sep 16, 2016, 02:14 pm
una cosa del genere ti andrebbe bene?
(https://startingelectronics.org/tutorials/arduino/ethernet-shield-web-server-tutorial/SD-card-IO/IO-web-page.png)

oppure con un paio di questi?

(http://blog.startingelectronics.com/wp-content/uploads/2014/07/two-gauge.png)
Title: Re: Progetto sonde centrale termica
Post by: md_corporation on Sep 16, 2016, 02:20 pm
una cosa del genere ti andrebbe bene?
(https://startingelectronics.org/tutorials/arduino/ethernet-shield-web-server-tutorial/SD-card-IO/IO-web-page.png)

oppure con un paio di questi?

(http://blog.startingelectronics.com/wp-content/uploads/2014/07/two-gauge.png)
Gli ultimi indicatori che hai postato sono identici a gli indicatori che uso in Konnex domotica... uguali uguali...

A me a dire il vero basta esclusivamente il valore puro in una pagina pulita .... FINE...
tutta la grafica dietro la costruisco con il cervello Homelynk schneider dove ho la possibilità di creare dei riquadri dove linko alle suddette pagine dove mi ritrovo le temperatura che arduino rileva....
Title: Re: Progetto sonde centrale termica
Post by: elpapais on Sep 16, 2016, 02:37 pm
quindi una cosa come la pagina solo con i valori andrebbe bene?
Title: Re: Progetto sonde centrale termica
Post by: md_corporation on Sep 16, 2016, 02:56 pm
esattamente ... ma il valore di 1 sola sonda...

Es:

192.168.1.8/sonda1
visualizza pagina con solo il valore di sonda1

192.168.1.8/sonda2
visualizza pagina con solo il valore di sonda2

ecc...


Ora son riuscito con:

Code: [Select]


char c = client.read();

if (readString.lenght() < 100) {
readString += c;
}

Serial.print(c);



Vedo a seriale tutte le info ... comprese le istruzioni dopo l'indirizzo IP digitare a url... viene chiamato "referer"....
Quindi credo che andando a cercare la riga dove comincia con "referer" posso ricavare la stringa scritta ad url...
Title: Re: Progetto sonde centrale termica
Post by: elpapais on Sep 16, 2016, 03:13 pm
Code: [Select]

/*--------------------------------------------------------------
  Program:      eth_websrv_SD_Ajax_gauge

  Description:  Arduino web server web page displays Arduino
                analog value on a dial gauge.
                The web page is stored on the SD card.
                Ajax is used to update the analog value on the
                web page.
 
  Hardware:     Arduino Uno and official Arduino Ethernet
                shield. Should work with other Arduinos and
                compatible Ethernet shields.
                2Gb micro SD card formatted FAT16.
                Potentiometer interfaced to A2 analog input.
               
  Software:     Developed using Arduino 1.0.5 software
                Should be compatible with Arduino 1.0 +
                SD card contains web page called index.htm
 
  References:   - WebServer example by David A. Mellis and
                  modified by Tom Igoe
                - SD card examples by David A. Mellis and
                  Tom Igoe
                - Ethernet library documentation:
                  http://arduino.cc/en/Reference/Ethernet
                - SD Card library documentation:
                  http://arduino.cc/en/Reference/SD
                - Gauge from:
                  https://github.com/Mikhus/canv-gauge

  Date:         27 March 2013
  Modified:     19 June 2013
 
  Author:       W.A. Smith, http://startingelectronics.org
--------------------------------------------------------------*/

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

// size of buffer used to capture HTTP requests
#define REQ_BUF_SZ   50

// MAC address from Ethernet shield sticker under board
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 0, 20); // IP address, may need to change depending on network
EthernetServer server(80);  // create a server at port 80
File webFile;               // the web page file on the SD card
char HTTP_req[REQ_BUF_SZ] = {0}; // buffered HTTP request stored as null terminated string
char req_index = 0;              // index into HTTP_req buffer

void setup()
{
    // disable Ethernet chip
    pinMode(10, OUTPUT);
    digitalWrite(10, HIGH);

    Serial.begin(9600);       // for debugging
   
    // initialize SD card
    Serial.println("Initializing SD card...");
    if (!SD.begin(4)) {
        Serial.println("ERROR - SD card initialization failed!");
        return;    // init failed
    }
    Serial.println("SUCCESS - SD card initialized.");
    // check for index.htm file
    if (!SD.exists("index.htm")) {
        Serial.println("ERROR - Can't find index.htm file!");
        return;  // can't find index file
    }
    Serial.println("SUCCESS - Found index.htm file.");
   
    Ethernet.begin(mac, ip);  // initialize Ethernet device
    server.begin();           // start to listen for clients
}

void loop()
{
    EthernetClient client = server.available();  // try to get client

    if (client) {  // got client?
        boolean currentLineIsBlank = true;
        while (client.connected()) {
            if (client.available()) {   // client data available to read
                char c = client.read(); // read 1 byte (character) from client
                // buffer first part of HTTP request in HTTP_req array (string)
                // leave last element in array as 0 to null terminate string (REQ_BUF_SZ - 1)
                if (req_index < (REQ_BUF_SZ - 1)) {
                    HTTP_req[req_index] = c;          // save HTTP request character
                    req_index++;
                }
                // last line of client request is blank and ends with \n
                // respond to client only after last line received
                if (c == '\n' && currentLineIsBlank) {
                    // send a standard http response header
                    client.println("HTTP/1.1 200 OK");
                    // remainder of header follows below, depending on if
                    // web page or XML page is requested
                    // Ajax request - send XML file
                    if (StrContains(HTTP_req, "ajax_inputs")) {
                        // send rest of HTTP header
                        client.println("Content-Type: text/xml");
                        client.println("Connection: keep-alive");
                        client.println();
                        // send XML file containing input states
                        XML_response(client);
                    }
                    else {  // web page request
                        // send rest of HTTP header
                        client.println("Content-Type: text/html");
                        client.println("Connection: keep-alive");
                        client.println();
                        // send web page
                        webFile = SD.open("index.htm");        // open web page file
                        if (webFile) {
                            while(webFile.available()) {
                                client.write(webFile.read()); // send web page to client
                            }
                            webFile.close();
                        }
                    }
                    // display received HTTP request on serial port
                    Serial.print(HTTP_req);
                    // reset buffer index and all buffer elements to 0
                    req_index = 0;
                    StrClear(HTTP_req, REQ_BUF_SZ);
                    break;
                }
                // every line of text received from the client ends with \r\n
                if (c == '\n') {
                    // last character on line of received text
                    // starting new line with next character read
                    currentLineIsBlank = true;
                }
                else if (c != '\r') {
                    // a text character was received from client
                    currentLineIsBlank = false;
                }
            } // end if (client.available())
        } // end while (client.connected())
        delay(1);      // give the web browser time to receive the data
        client.stop(); // close the connection
    } // end if (client)
}

// send the XML file containing analog value
void XML_response(EthernetClient cl)
{
    int analog_val;
   
    cl.print("<?xml version = \"1.0\" ?>");
    cl.print("<inputs>");
    // read analog pin A2
    analog_val = analogRead(2);
    cl.print("<analog>");
    cl.print(analog_val);
    cl.print("</analog>");
    cl.print("</inputs>");
}

// sets every element of str to 0 (clears array)
void StrClear(char *str, char length)
{
    for (int i = 0; i < length; i++) {
        str[i] = 0;
    }
}

// searches for the string sfind in the string str
// returns 1 if string found
// returns 0 if string not found
char StrContains(char *str, char *sfind)
{
    char found = 0;
    char index = 0;
    char len;

    len = strlen(str);
   
    if (strlen(sfind) > len) {
        return 0;
    }
    while (index < len) {
        if (str[index] == sfind[found]) {
            found++;
            if (strlen(sfind) == found) {
                return 1;
            }
        }
        else {
            found = 0;
        }
        index++;
    }

    return 0;
}


Tratto da:
https://startingelectronics.org/tutorials/arduino/ethernet-shield-web-server-tutorial/SD-card-gauge/ (https://startingelectronics.org/tutorials/arduino/ethernet-shield-web-server-tutorial/SD-card-gauge/)
della serie 15 post fa...
Title: Re: Progetto sonde centrale termica
Post by: md_corporation on Sep 16, 2016, 03:43 pm
..... ti ringraziono mi ci vorrà un pò a capirlo ... ma se dici che è quello che fa per me ... vedo di concentrarmi :)....

Ci sono molte istruzioni inerenti alla scrittura su SD che a me non serve ... tribolo un pò a centrare il codice che mi serve ... ma ce la farò :P
Title: Re: Progetto sonde centrale termica
Post by: elpapais on Sep 16, 2016, 05:20 pm
..... ti ringraziono mi ci vorrà un pò a capirlo ... ma se dici che è quello che fa per me ... vedo di concentrarmi :)....

Ci sono molte istruzioni inerenti alla scrittura su SD che a me non serve ... tribolo un pò a centrare il codice che mi serve ... ma ce la farò :P
quello che fa per te è studiare un po di piu e magari dar piu considerazione a chi ti da aiuto... ribadisco che ho postato quello 17 post fa...
Title: Re: Progetto sonde centrale termica
Post by: md_corporation on Sep 21, 2016, 01:38 pm
Fatto:

Code: [Select]
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SPI.h>
#include <Ethernet.h>

#define ONE_WIRE_BUS_1 2
#define ONE_WIRE_BUS_2 3
#define ONE_WIRE_BUS_3 4
#define ONE_WIRE_BUS_4 5
#define ONE_WIRE_BUS_5 6

OneWire oneWire_1(ONE_WIRE_BUS_1);
OneWire oneWire_2(ONE_WIRE_BUS_2);
OneWire oneWire_3(ONE_WIRE_BUS_3);
OneWire oneWire_4(ONE_WIRE_BUS_4);
OneWire oneWire_5(ONE_WIRE_BUS_5);

DallasTemperature sensor_sonda_1(&oneWire_1);
DallasTemperature sensor_sonda_2(&oneWire_2);
DallasTemperature sensor_sonda_3(&oneWire_3);
DallasTemperature sensor_sonda_4(&oneWire_4);
DallasTemperature sensor_sonda_5(&oneWire_5);

//impostazioni di rete:::::::::::::::::::::::::::::::::::::::::::::::::
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 8);
EthernetServer server(80);
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

void setup() {

  delay(1000);
  Serial.begin(9600);

  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  Ethernet.begin(mac, ip);
  server.begin();

  Serial.println("Misuro la temperatura con sensore DS18B20");
  Serial.println("continuo la misurazione");
  delay(1000);
  sensor_sonda_1.begin();
  sensor_sonda_2.begin();
  sensor_sonda_3.begin();
  sensor_sonda_4.begin();
  sensor_sonda_5.begin();
}

void loop()
{

  Serial.println();

  //richiedo temperature_________________
  sensor_sonda_1.requestTemperatures();
  sensor_sonda_2.requestTemperatures();
  sensor_sonda_3.requestTemperatures();
  sensor_sonda_4.requestTemperatures();
  sensor_sonda_5.requestTemperatures();

  //scrivo temperatura sonda 1 seriale___
  Serial.print("Temperatura = ");
  Serial.print(sensor_sonda_1.getTempCByIndex(0));
  Serial.println(" gradi C");

  //scrivo temperatura sonda 2 seriale___
  Serial.print("Temperatura = ");
  Serial.print(sensor_sonda_2.getTempCByIndex(0));
  Serial.println(" gradi C");

  //scrivo temperatura sonda 3 seriale___
  Serial.print("Temperatura = ");
  Serial.print(sensor_sonda_3.getTempCByIndex(0));
  Serial.println(" gradi C");

  //scrivo temperatura sonda 4 seriale___
  Serial.print("Temperatura = ");
  Serial.print(sensor_sonda_4.getTempCByIndex(0));
  Serial.println(" gradi C");

  //scrivo temperatura sonda 5 seriale___
  Serial.print("Temperatura = ");
  Serial.print(sensor_sonda_5.getTempCByIndex(0));
  Serial.println(" gradi C");

  EthernetClient client = server.available();

  if (client) {
    boolean currentLineIsBlank = true;
    String postText = "";
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();

        if (postText.length() < 10) {
          postText += c;
        }

        if (c == '\n' && currentLineIsBlank) {

          //creo la pagina WEB_______________________
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close"); // Dopo la risposta la connessione si interrompe
          client.println("Refresh: 5");
          client.println();
          client.println("<meta charset=UTF-8>"); // serve per inserire i caretteri speciali
          client.println("<!DOCTYPE HTML>");
          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;
        }
      }
    }

    //in base alla richiesta da URL rispondo con la sonda associata_______________

    if (postText.indexOf("1") > 0) {
      client.println(sensor_sonda_1.getTempCByIndex(0));
      client.print(" Gradi");
    }

    if (postText.indexOf("2") > 0) {
      client.println(sensor_sonda_2.getTempCByIndex(0));
      client.print(" Gradi");
    }

    if (postText.indexOf("3") > 0) {
      client.println(sensor_sonda_3.getTempCByIndex(0));
      client.print(" Gradi");
    }

    if (postText.indexOf("4") > 0) {
      client.println(sensor_sonda_4.getTempCByIndex(0));
      client.print(" Gradi");
    }

    if (postText.indexOf("5") > 0) {
      client.println(sensor_sonda_5.getTempCByIndex(0));
      client.print(" Gradi");
    }

    client.stop();
    Serial.println("client disconnected");
    Ethernet.maintain();
  }

}