DS18S20 output on webpage

Hi everyone,

I am new in Arduino technology and as my first project I try to print out measured temperatures from digital sensors (DS18S20) on a webpage.

As a basis I used this WebServer Ethernet example:

In this example I included the necessary libraries and functions to read out the value of the DS18S20 and convert it to calsius (see listing below).

My problem:
webserver is running fine and temperature readout also. But if I put the temperature readout inside the loop() function, the webserver is not running anymore. looks like theres a conflict between these two functions.

Any ideas?

/*
  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
 
 */

#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.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,2,199);

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

// Data wire is plugged into pin 10 on the Arduino
#define ONE_WIRE_BUS 10

// Setup a oneWire instance to communicate with any OneWire devices 
// (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

void setup() {

// Start up the library
  sensors.begin();
  
  // AT THIS POSITION TEMPERATURE READOUT WORKS FINE
  sensors.requestTemperatures();  // Send the command to get temperatures
  Serial.print(sensors.getTempCByIndex(0));  // Get Temperature from Sensor 1 and print out

 // Open serial communications and wait for port to open:
  Serial.begin(9600);
   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: 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("
");
	    // client.println(sensors.getTempCByIndex(0)); // IF I INSERT TEMPERATURE READOUT SOMEWHERE INSIDE LOOP FUNCTION, WEBSERVER STOPS RUNNING
          }
          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");
  }
}

EDIT: Sorry, deutsches Forum, hätte auch deutsch schreiben können :wink:

Hello DocciM,

the problem will be the delay time from the ds18b20. Look for a tutorial to solve this problem (hint: millis() and you have to know, that you can get the temp only every 750ms.)

Put the value form the ds18b20 in a local variable at the beginning of the loop. Then you put only
client.println(temp) at the print output from the ethernet function.

You're also not in the right topic. German :wink:

Hello,

i solved this another way.
i let the server write only a plain textfile with the sensor datas - this page i include in a "normal" php-page, which reloads itself every 30 seconds with the internal refresh=30 - command :smiley:

DocciM:
EDIT: Sorry, deutsches Forum, hätte auch deutsch schreiben können :wink:

TERWI:

DocciM:
EDIT: Sorry, deutsches Forum, hätte auch deutsch schreiben können :wink:

:zipper_mouth_face: Toll, das erfährt man jetzt, wenn man sich bereits im Englischen blamiert hat :smiley:

sschultewolter:

TERWI:

DocciM:
EDIT: Sorry, deutsches Forum, hätte auch deutsch schreiben können :wink:

:zipper_mouth_face: Toll, das erfährt man jetzt, wenn man sich bereits im Englischen blamiert hat :smiley:

Hättest halt fragen müssen.... :wink: :wink: :wink: :wink: :wink:

Quote from: sschultewolter on Today at 12:57:10 pm
Quote from: TERWI on Today at 10:45:11 am
Quote from: DocciM on Today at 10:15:10 am
EDIT: Sorry, deutsches Forum, hätte auch deutsch schreiben können smiley-wink
smiley-cool
smiley-zipper Toll, das erfährt man jetzt, wenn man sich bereits im Englischen blamiert hat smiley-grin
Hättest halt fragen müssen.... smiley-wink smiley-wink smiley-wink smiley-wink smiley-wink

..auf Deutsch oder Englisch ? 8) 8) 8) 8)

Stellt euch nicht so an. Daas bißschen änglisch krigt mann doch logger hinn, odda?

Werd die Ideen heute Abend mal vertiefen udn ausprobieren.

Der Plan des Ganzen:
Möchte 5 Sensor über meinen Pufferspeicher (Heizung/warm Wasser) verteilt anbringen und auslesen. Und aus den Daten eine dynamische Grafik des Wärme-Füllstands erstellen.
Wie ich jetzt aber schon gelesen hab, ist PHP auch nicht drin. Also doch ne Schnittstelle und auf nem anderen webserver die eigentliche Seite.

Oder wie würdet ihr das machen? (Will nicht zu nem "fremden" Datensammlungsdienst, wie es einige Besipiele im Internet machen. Will das Ganze zu Hause lokal!)

Greets,
Doc

Darf man erfahren, mit welchen Arduino du arbeitest? Ich tippe mal auf Uno oder Leonardo mit Ethernet Shield.

Wenn ja, sieht es ein bisschen kritisch aus. Mit dem Yun dürfte es aber ohne Probleme gehen. Ich werd meinen mal gleich anschließen und ein paar Sensoren anschließen zum testen.

UNO und Ethernet Shield

Hab, wie man es eben so macht, zuerst eingekauft und dann geguckt ob alles damit geht :smiley:
Aber das wird scho :wink:

Wird ohne Zusatzmöglichkeiten (evtl. Fritzbox o.ä. als Webserver zu missbrauchen) nicht gehen. Hab mit dem UNO und Ethernet Shield mal eine kleine Bedienoberfläche versucht. Reines HTML. Das Gerät ist recht schnell ausgelastet ohne große Grafiken o.ä. Das ist beim YUN schöner gelöst, dass der Lininio für sich arbeitet und nur über die Bridge kommuniziert.

moin auch
würde das gleich auch nachbauen programmieren, hat einen von euch da schon was?

HI,

Will u please upload circuit diagram for this.

means on which pin should i connect DS18S20 ?