webserver con ds18b20 e enc28j60

ciao a tutti,
vorrei costruire con arduino un webserver che:

  • rileva la temperatura ambiente mediante un sensore ds18b20
  • pubblica il valore su pagina web
    Per fare ciò ho utilizzato un arduino nano con l'ethernet shield come in questa immagine:

seguendo questo articolo.
Per la ethernet shield ho utilizzato le librerie

/
#include "etherShield.h"   // librerie per ethernet
#include "ETHER_28J60.h"   // librerie per ethernet

static uint8_t mac[6] = {0x54,0x55,0x58,0x10,0x00,0x24};   // mac address (a piacere)
static uint8_t ip[4] = {10,0,0,15};                        // ip (dove connettersi(
static uint16_t port = 80;                                 // porta 80

ETHER_28J60 ethernet;                  // dichiarazione di variabile per uso dell'ethernet

dichiarando nella funzione setup(), l'indirizzo ip, il mac address e la porta:

void setup() {
  ethernet.setup(mac, ip, port);

poi nel codice, leggo la temperatura del sensore dallas ds18b20 e la pubblico sull'indirizzo ip 10.0.0.15, convertendo il valore di temperatura in una stringa:

dtostrf(Tamb,8,4, dtostrfbuffer);
  Serial.print(dtostrfbuffer);
 if (ethernet.serviceRequest())
  {
    ethernet.print(dtostrfbuffer);
    ethernet.respond();

Tuttavia, se mi collego all'indirizzo web 10.0.0.15, mi restituisce 0.
Ho notato che se scrivo sulla seriale, il valore è corretto, fin tanto che non parte la chiamata dall'indirizzo ip.... mi mostra 0.0000 e poi finita la chiamata, sull'uscita seriale mi riporta il valore corretto.
Perchè ?

suggerimenti ?

Prova a spostare o duplicare la Serial.print(dtostrfbuffer);
dentro l'if, subito prima di ethernet.print(dtostrfbuffer);

Se vuoi cambiare un po' approccio, se vuoi farlo col mio webserver Webbino è molto banale (nonché praticamente già fatto in SmartStrip): GitHub - SukkoPera/Webbino: A universal webserver for Arduino, capable of delivering dynamic contents.

nid69ita:
Prova a spostare o duplicare la Serial.print(dtostrfbuffer);
dentro l’if, subito prima di ethernet.print(dtostrfbuffer);

ho provato sia a spostare che duplicare, ma senza successo.
Penso che ci sia un problema del tipo: quando faccio la chiamata sulla pagina web, è come se la rilevazione della temperatura venga bloccata.
Riporto per chiarezza tutto il codice

#include "etherShield.h"   // librerie per ethernet
#include "ETHER_28J60.h"   // librerie per ethernet


#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire ourWire(ONE_WIRE_BUS);
DallasTemperature sensors(&ourWire);
const int ciclo=1000;

static uint8_t mac[6] = {0x54,0x55,0x58,0x10,0x00,0x24};   // mac address (a piacere)
static uint8_t ip[4] = {10,0,0,15};                        // ip (dove connettersi(
static uint16_t port = 80;                                 // porta 80

ETHER_28J60 ethernet;                  // dichiarazione di variabile per uso dell'ethernet

static char dtostrfbuffer[15];
// SETUP -------------------------------------------------------------------------------------------------------------
void setup() {
  ethernet.setup(mac, ip, port);
  Serial.begin(9600);
  Serial.print("START");
  Serial.print("Frequenza rilevazione:");
  Serial.print(ciclo/1000);
  Serial.println(" [s]");
  Serial.println("-----------------------------------------------------------------------------------------------");

  sensors.begin();
}

// MAIN  -------------------------------------------------------------------------------------------------------------
void loop() 
{  
  float Tamb;
  Tamb=sensors.getTempCByIndex(0);
  sensors.requestTemperatures();  
  
  dtostrf(Tamb,8,4, dtostrfbuffer);
  Serial.print(dtostrfbuffer);


 if (ethernet.serviceRequest())
  {    
    ethernet.print(dtostrfbuffer);
    ethernet.respond();
  }  
delay(ciclo);
}