Hilfe bei Temperaturanzeige

Hallo, ich bin neu in der Arduino Welt und benötige eure Hilfe.

ich habe mir eine Webserver Temperaturüberwachung gebastelt die erst auch gut lief. Dann hat der Arduino die HTML seite nicht mehr geöffnet (warum auch immer)

jetzt habe ich die Seite auf eine SD gepackt (funktoniert ganz gut)

jetzt meine Frage:

WIE BEKOMME ICH DIE TEMPERATUREN VON MEINEN DS1820 AUF DEN SD WEBSERVER ÜBERGEBEN????

Ich hoffe mir kann jemand helfen.

hier der HTML Code für die SD

<!DOCTYPE html>
<html>
<head>
<title>Temp.Steuerung V1.0</title>
<head><meta http-equiv="refresh" content="15; URL=/" /></head>
<body bgcolor='#444444'>


     <hr />
     <h1><div align='center'><font color='#2076CD'>Temperatursteuerung V1.0</font color></div></h1>
     <hr />
         
		 <!-- Eingang 1 Vorlauf -->
         <div align='left'><font face='Verdana' color='#FFFFFF'>BHKW-1:</font></div>
         <table border='2' width='250' cellpadding='2'>
         <tr bgColor='#222222'>
         <td bgcolor='6E6E6E'><font face='Verdana' color='C40000' size='2'>Vorlauf: 
</font></td>
         <td align='center' bgcolor='6E6E6E'/td>
         <sensors.getTempCByIndex(0));>
         <!-- " &deg;C" -->
         0,0 &deg;C
         </tr>
         
		 <!-- Eingang 1 Rücklauf -->
         <td bgcolor='6E6E6E'><font face='Verdana' color='140397' size='2'>R&uuml;cklauf: 
</font></td>
         <td align='center' bgcolor='6E6E6E'/td>
         <sensors.getTempCByIndex(1));>
         <!-- " &deg;C" -->
         0,0 &deg;C
         </tr>

		 
	 <!-- Neue Tabelle -->	 
     </tr>
     </table>
     <HR ALIGN=LEFT WIDTH=25%>
          
          
          
         <!-- Eingang 2 Vorlauf -->
         <div align='left'><font face='Verdana' color='#FFFFFF'>BHKW-3:</font></div>
         <table border='2' width='250' cellpadding='2'>
         <tr bgColor='#222222'>
         <td bgcolor='6E6E6E'><font face='Verdana' color='C40000' size='2'>Vorlauf: 
</font></td>
         <td align='center' bgcolor='6E6E6E'/td>
         <sensors.getTempCByIndex(2));>
         <!-- " &deg;C" -->
         0,0 &deg;C
         </tr>
           
         <!-- Eingang 2 Rücklauf --> 
         <td bgcolor='6E6E6E'><font face='Verdana' color='140397' size='2'>R&uuml;cklauf: 
</font></td>
         <td align='center' bgcolor='6E6E6E'/td>
         <sensors.getTempCByIndex(3));>
         <!-- " &deg;C" -->
         0,0 &deg;C
         </tr>
            
          
     <!-- Neue Tabelle --> 
     </tr>
     </table>
     <HR ALIGN=LEFT WIDTH=25%>
        
          
         <!-- Eingang 3 Vorlauf -->
         <div align='left'><font face='Verdana' color='#FFFFFF'>Hackschnitzel:</font></div>
         <table border='2' width='250' cellpadding='2'>
         <tr bgColor='#222222'>
         <td bgcolor='6E6E6E'><font face='Verdana' color='C40000' size='2'>Vorlauf: 
</font></td>
         <td align='center' bgcolor='6E6E6E'/td>
         <sensors.getTempCByIndex(4));>
         <!-- " &deg;C" -->
         0,0 &deg;C
         </tr>
          
         <!-- Eingang 3 Rücklauf -->
	     <td bgcolor='6E6E6E'><font face='Verdana' color='140397' size='2'>R&uuml;cklauf: 
</font></td>
         <td align='center' bgcolor='6E6E6E'/td>
         <sensors.getTempCByIndex(5));>
         <!-- " &deg;C" -->
         0,0 &deg;C
         </tr>
         
		 
     <!-- Neue Tabelle -->
     </tr>
     </table>
     <HR ALIGN=LEFT WIDTH=25%>
     <!-- Neue Tabelle -->    
          
          
         <!-- Eingang 4 Vorlauf -->
         <div align='left'><font face='Verdana' color='#FFFFFF'>Pufferspeicher:</font></div>
         <!-- Eingang 4 Vorlauf -->
          
     <!-- Mischer Mode -->		  
     <td align='center' bgcolor='6E6E6E'/td>
     <div align='left'>
     <td bgcolor='6E6E6E'><font face='Verdana' color='04C707' size='3'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Mischer Mode: 
</font></td>
     </div>
     <!-- Mischer Mode -->    
          
         <!-- Eingang 4 Vorlauf --> 
         <table border='2' width='630' cellpadding='2'>
         <tr bgColor='#222222'>
         <td bgcolor='6E6E6E'><font face='Verdana' color='C40000' size='2'>Vorlauf: 
</font></td>
         <td align='center' bgcolor='6E6E6E'/td>
         <sensors.getTempCByIndex(6));>
         <!-- " &deg;C" -->
         0,0 &deg;C
		 
		 
	 	 
     <!-- Mischer Hand --> 
     <td align='center' bgcolor='6E6E6E'><input type="submit" onclick="location.href = 'http://192.168.2.111/?pinD6=1/?pinD3=0'" value="Schieber Auf" /><td align='center' bgcolor='6E6E6E'><input type="submit" onclick="location.href = 'http://192.168.2.111/?pinD6=0/?pinD3=1'" value="Schieber Zu" /></td>
	 </tr>                                                                                                                                                                                                                                                                                                                                                                                                                                  
	 <!-- Mischer Hand -->     
          
		  
         <!-- Eingang 4 Rücklauf -->
         <td bgcolor='6E6E6E'><font face='Verdana' color='140397' size='2'>R&uuml;cklauf: 
</font></td>
         <td align='center' bgcolor='6E6E6E'/td>
         <sensors.getTempCByIndex(7));>
         <!-- " &deg;C" -->
         0,0 &deg;C
		 <!-- Eingang 4 Rücklauf -->
		 
		 
	  
     <!-- Neue Tabelle -->     
     </tr>
     </table>
     <HR ALIGN=LEFT WIDTH=63%>
     <!-- Neue Tabelle -->   
          
        
          
          
         <!-- Eingang 5 Vorlauf -->
         <div align='left'><font face='Verdana' color='#FFFFFF'>Reserve:</font></div>
         <table border='2' width='250' cellpadding='2'>
         <tr bgColor='#222222'>
         <td bgcolor='6E6E6E'><font face='Verdana' color='C40000' size='2'>Vorlauf: 
</font></td>
         <td align='center' bgcolor='6E6E6E'/td>
         <sensors.getTempCByIndex(8));>
         <!-- " &deg;C" -->
         0,0 &deg;C
         </tr>
         <!-- Eingang 5 Vorlauf -->
          
         <!-- Eingang 5 Rücklauf -->
         <td bgcolor='6E6E6E'><font face='Verdana' color='140397' size='2'>R&uuml;cklauf: 
</font></td>
         <td align='center' bgcolor='6E6E6E'/td>
         <sensors.getTempCByIndex(9));>
         <!-- " &deg;C" -->
         0,0 &deg;C
         </tr>
         <!-- Eingang 5 Rücklauf -->
          
     <!-- Neue Tabelle -->     
     </tr>
     </table>
     <HR ALIGN=LEFT WIDTH=25%>
     <!-- Neue Tabelle -->
     
	 <!-- Aktualisieren -->
	 </tr>
	 <td align='center' bgcolor='6E6E6E'><input type="button" onclick="location.href = 'http://192.168.2.111'" value="Aktualisieren" /></td>
     <!-- Aktualisieren -->

        
</body>
</html>

hier der Sketch für den Arduino

#if ARDUINO > 18
#include <SPI.h> // Für Arduino Version größer als 0018
#endif
#include <Ethernet.h>
#include <TextFinder.h>
#include <SD.h>
 
byte mac[] = { 0xDE, 0xAD, 0xBA, 0xBE, 0xFE, 0xED }; // MAC-Adresse des Ethernet-Shield
byte ip[]  = { 192, 168, 2, 111 };                   // IP zum aufrufen des Webservers
byte sdPin = 4;                                      // Pin der SD-Karte
 
Server server(80);                           // Server port
 
File webFile;
 
void setup()
{ 
  Ethernet.begin(mac, ip); // Client starten
  server.begin();          // Server starten
  Serial.begin(9600);
  Serial.println("ARDUINO - STEUERUNG");
 
  Serial.println("Initialisiere SD-Karte...");
  if (!SD.begin(sdPin))
  {
    Serial.println(" - Initialisierung der SD-Karte fehlgeschlagen!");
    return;
  }
  Serial.println(" - SD-Karte erfolgreich initialisiert.");
 
  if (!SD.exists("index.htm"))
  {
    Serial.println(" - Datei (index.htm) wurde nicht gefunden!");
    return;
  }
  Serial.println(" - Datei (index.htm) wurde gefunden.");
 
  Serial.println();
  Serial.println("Verbraucher schalten");
}
 
void loop()
{
  Client client = server.available(); // Auf Anfrage warten
 
  if(client)
  {
    /*****************************************
      Ausgänge über das Webformular steuern  *
    *****************************************/
    TextFinder finder(client);
 
    if(finder.find("GET"))
    {
      while(finder.findUntil("pin", "\n\r"))
      {
        char typ = client.read();
        int  pin = finder.getValue();
        int  val = finder.getValue();
 
        if(typ == 'D')
        {
          pinMode(pin, OUTPUT);
          digitalWrite(pin, val);
          Serial.print(" - D"+String(pin));
        }
        else if(typ == 'A')
        {
          analogWrite(pin, val);
          Serial.print(" - A"+String(pin));
        }
        else Serial.print(" - Falscher Typ");
 
        if(val==1) Serial.println(" ein"); else Serial.println(" aus");
      }
    }
 
    /************************
      Webformular anzeigen  *
    ************************/
    boolean current_line_is_blank = true;       // eine HTTP-Anfrage endet mit einer Leerzeile und einer neuen Zeile
 
    while (client.connected())
    {
      if (client.available())                   // Wenn Daten vom Server empfangen werden
      {
        char c = client.read();                 // empfangene Zeichen einlesen
        if (c == '\n' && current_line_is_blank) // wenn neue Zeile und Leerzeile empfangen
        { // Standard HTTP Header senden
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println();
 
          // Website von SD-Karte laden
          webFile = SD.open("index.htm");  // Website laden
          if (webFile)
          {
            while(webFile.available())
            {
              client.write(webFile.read()); // Website an Client schicken
            }
            webFile.close();
          }
          break;
        }
        if (c == '\n')
        {
          current_line_is_blank = true;
        }
        else if (c != '\r')
        {
          current_line_is_blank = false;
        }
      }
    }
    delay(1);
    client.stop();
  }
}

verwende das F() Mako. http://forum.arduino.cc/index.php?topic=127552.msg965539#msg965539 grüße Uwe

Moin Uwe,

irfendwie versteh ich das nicht ganz. kannst du mir eventuell ein beispiel in meinem sketch machen?

MfG

Tobi

Einfach überall wo die print() und println() verwendest F() um das String-Literal herumschreiben. z.B.:

client.println(F("HTTP/1.1 200 OK"));

Sonst müllst du dir das RAM mit den Strings zu. RAM ist auf dem UNO mit der Ethernet Lib und der SD Lib sowieso sehr knapp

Das gibt dir das freie RAM an, sofern noch genug zum Ausführen von Code frei ist (berechnet den Abstand zwischen Heap und Stack):

int getFreeRAM() 
{
  extern int __heap_start, *__brkval; 
  int v; 
  return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); 
}

jetzt meine Frage: WIE BEKOMME ICH DIE TEMPERATUREN VON MEINEN DS1820 AUF DEN SD WEBSERVER ÜBERGEBEN????

Hallo,

in Großbuchstaben schreiben bedeutet in Foren "schreien". Gehört sich nicht. Das am Rande, falls Du das nicht wußtest.

Zu Deiner Frage. Die Temperatur Deines DS1820 ist doch sicherlich in einer float Variablen gespeichert nachdem Du den Sensor ausgelesen hast. Dann mußt Du nur noch mittels

client.println(F(TempGrad,1));

den Wert zur Verfügung stellen auf einer html Seite. Wobei hier "TempGrad" bei mir die Variable ist die den Wert enthält.

Doc_Arduino:
client.println(F(TempGrad,1));

Eh…nein

TobiTechnik:
WIE BEKOMME ICH DIE TEMPERATUREN VON MEINEN DS1820 AUF DEN SD WEBSERVER ÜBERGEBEN???

Am besten machst Du Dir eine HTML-Datei, die folgende Kriterien erfüllt:

  • Zeilenlänge nicht über 80 oder 100 oder 130 Zeichen pro Zeile (suche Dir was aus)
  • eindeutige “Platzhalter” für die einzusetzenden Temperaturwerte einfügen

Und als Platzhalter anstelle des tatsächlichen Temperaturwertes möglichst nicht sowas verwenden:

<sensors.getTempCByIndex(8));>

sondern mehr sowas:

[TEMP8]

oder sowas:

@TEMP8

Die so vorbereitete HTML-Datei auf SD-Karte speichern.

Und dann muss im Arduino-Sketch die Sendeschleife modifiziert werden. Statt jedes Byte einzeln aus Datei zu lesen und zu senden:

            while(webFile.available())
            {
              client.write(webFile.read()); // Website an Client schicken
            }
            webFile.close();

Stattdessen benötigst Du eine Sendeschleife, die folgendes macht:

  • eine ganze Zeile aus der Datei lesen
  • prüfen, ob in der Zeile ein Platzhalter vorkommt (oder sogar mehrere)
  • wenn ja, den Platzhalter in der Zeile durch den Temperaturwert ersetzen
  • die Zeile in einem Rutsch senden

Serenifly:

Doc_Arduino: client.println(F(TempGrad,1));

Eh...nein

Hallo,

ja okay, ohne (F ...), weil Zahlen. Da war ich etwas übereifrig. Entschuldigung.