[gelöst] Temperatur Logger, mit DS18B20

Hallo allerseits,
ich muss mich schon wieder an Euch wenden, ich bin dabei mir einen Temperatur-Logger zu basteln.
Hardware steht und funktioniert in einzelnen Sketchen.
Was ich nur nicht verstehe, wie ich Daten auf der SD Karte speichere (in Log.txt) um die dann später Visuell darzustellen.
In der Log.txt sollen die Daten wie folgt auf tauchen:
Datum Uhrzeit Temperatur
16.4.2012 20:02 24.50°C

Kann mir jemand den Code dafür zeigen und vieleicht erklären ? :roll_eyes:

Hier mein Sketch bis jetzt ( bitte nicht meckern, der ist total unübersichtlich, aber funktioniert…) :blush:

#include <SD.h>
#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include "RTClib.h"

#define ONE_WIRE_BUS 6

RTC_DS1307 RTC;

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress outsideThermometer = { 0x28, 0x65, 0x35, 0xC3, 0x03, 0x00, 0x00, 0x35 };

//LED blinkt jede Minute für 5sekunden
int ledPIN = 5;                // LED liegt am (digitalen) Pin 5
long previousMillis = 0;        
long previousLEDmillis = 0;
long LogInterval = 30000;        // Zeit LED AUS (60000 = 1 min) 
long ledInterval = 10000;         // Zeit LED AN (10000 = 10 sec)
boolean ledON = false; 

// Ethernet EInrichten
byte mac[] = { 0xDE, 0xAD, 0xED, 0xEF, 0xFE, 0xBE };
byte ip[] = { 192, 168, 178, 216 };
byte gateway[] = { 192, 168, 178, 1 };
byte subnet[] = { 255, 255, 255, 0 };

EthernetServer server(80);

// SD Card
const int chipSelect = 9; // CS is pin 9

void setup(void)
{
   Ethernet.begin(mac, ip); // initialize the ethernet device, mac, ip);
    server.begin();   // start listening for clients

// Setzt den ledPin (Pin 5) als Ausgang
  pinMode(ledPIN, OUTPUT);
  // start serial port
  Serial.begin(57600);
   Serial.print("Pruefe ob SD Card vorhanden...");
  // make sure that the default chip select pin is set to
  // output, even if you don't use it:
  pinMode(9, OUTPUT);
  
  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    return;
  }
  Serial.println("Karte vorhanden und initialisiert.");
  
   Wire.begin();
   RTC.begin();
   if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
  // Start up the library
  sensors.begin(); DEC;
  sensors.setResolution(outsideThermometer, 9);
}

void printTemperature(DeviceAddress deviceAddress)
{
  float tempC = sensors.getTempC(deviceAddress);
  if (tempC == -127.00) {
    Serial.print("Error getting temperature");
  } else {
    Serial.print(tempC);
  }
}

void loop(void)
{
  DateTime now = RTC.now();
       
  delay(10000);
     Serial.print(now.day(), DEC);
    Serial.print('.');
    Serial.print(now.month(), DEC);
    Serial.print('.');
    Serial.print(now.year(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    if (now.minute()<10)
    {
    Serial.print("0");
    }
    Serial.print(now.minute(), DEC);
    Serial.print(' ');
  sensors.requestTemperatures();
float tempoutsideThermometer = sensors.getTempC(outsideThermometer); 
  
  printTemperature(outsideThermometer);
  Serial.print(char(176)); // Gibt das ° Grad-Zeichen aus
  Serial.print("C");
  Serial.println();

  // Ausgabe auf Website
  EthernetClient client = server.available();
  if (client) {
    client.println("HTTP/1.1 200 OK");
    client.println("Content-Type: text/html");
    client.println();
    client.println("<html><head>");
    client.println("<meta http-equiv='refresh' content='10'>");
    client.println("<title>Arduino Webserver</title>");
    client.println("</head>");
    client.println("<body>");
    //---Überschrift---
    client.println("
<hr />");
    client.println("<h1><div align='center'>Arduino Webserver powered by Cetax</div></h1>");
    client.println("<hr />
");
    //---Überschrift---
    client.println("Die Temperatur betraegt ");
    client.println("<h2>");
    client.println(tempoutsideThermometer);
    client.println("&deg;C");
    client.println("</h2>");
    client.println("</BODY></HTML>");    
    delay(10);
    client.stop();//close the connection with the client
  }
  
//LED Loop
unsigned long currentMillis = millis();
unsigned long currentLEDmillis = millis();

 if (ledON) {
   if(currentLEDmillis - previousMillis > ledInterval) {
     previousLEDmillis = currentLEDmillis;
     ledON = false;
     digitalWrite(ledPIN, LOW);
   }
 }
 
  if(currentMillis - previousMillis > LogInterval) {
    previousMillis = currentMillis;
     currentLEDmillis = 0;
     digitalWrite(ledPIN, HIGH);
     ledON = true;
  }

}

Einpaar Beispiel habe ich schon gelesen, aber ich verstehe nicht wie ich es für meinen Temperatur-Logger
umsetze :~
z.B.: Data-Logger Shield for Arduino

Vielen Dank für Eure Hilfe…

nimm den sketch von https://github.com/adafruit/Light-and-Temp-logger/blob/master/lighttemplogger.pde

Diesen musst du nur ab Zeile 169 an deinen DS18B20 anpassen. Und dann mit deinem bestehenden Code zusammenfügen.

Hi,
ok, habe mir den Sketch geholt und alles was mit dem Lichtsensor zu tun hat gelöscht.
Und versucht das zu ändern was mit meinem DS18B20 zu tun hat, aber ich bekomme mehrere Fehlermeldungen die mir garnichts sagen :~
Hier der von mir geänderte Code:

#include <SD.h>
#include <Wire.h>
#include "RTClib.h"
#include <SPI.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 6 // DS18B20 an Pin 6 anngeschlossen 

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

DeviceAddress insideThermometer = { 0x28, 0x03, 0xF6, 0xC2, 0x03, 0x00, 0x00, 0xA7 };

// how many milliseconds between grabbing data and logging it. 1000 ms is once a second
#define LOG_INTERVAL 1000 // mills between entries (reduce to take more/faster data)

// how many milliseconds before writing the logged data permanently to disk
// set it to the LOG_INTERVAL to write each time (safest)
// set it to 10*LOG_INTERVAL to write all data every 10 datareads, you could lose up to
// the last 10 reads if power is lost but it uses less power and is much faster!
#define SYNC_INTERVAL 1000 // mills between calls to flush() - to write data to the card
uint32_t syncTime = 0; // time of last sync()

#define ECHO_TO_SERIAL 1 // echo data to serial port
#define WAIT_TO_START 0 // Wait for serial input in setup()

// the digital pins that connect to the LEDs
#define redLEDpin 2
#define greenLEDpin 3

// The analog pins that connect to the sensors
//#define tempPin 6
//#define tempPin 1 // analog 1
//#define BANDGAPREF 14 // special indicator that we want to measure the bandgap

//#define aref_voltage 3.3 // we tie 3.3V to ARef and measure it with a multimeter!
//#define bandgap_voltage 1.1 // this is not super guaranteed but its not -too- off

RTC_DS1307 RTC; // define the Real Time Clock object

// for the data logging shield, we use digital pin 10 for the SD cs line
const int chipSelect = 9;

// the logging file
File logfile;

void error(char *str)
{
  Serial.print("error: ");
  Serial.println(str);
  
  // red LED indicates error
  digitalWrite(redLEDpin, HIGH);

  while(1);
}


void setup(void)
{
  Serial.begin(9600);
  Serial.println();
  sensors.begin(); DEC;   // Start up the library
  sensors.setResolution(insideThermometer, 9);
  // use debugging LEDs
  pinMode(redLEDpin, OUTPUT);
  pinMode(greenLEDpin, OUTPUT);
  
#if WAIT_TO_START
  Serial.println("Type any character to start");
  while (!Serial.available());
#endif //WAIT_TO_START

  // initialize the SD card
  Serial.print("Initializing SD card...");
  // make sure that the default chip select pin is set to
  // output, even if you don't use it:
  pinMode(9, OUTPUT);
  
  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    error("Card failed, or not present");
  }
  Serial.println("card initialized.");
  
  // create a new file
  char filename[] = "LOGGER00.CSV";
  for (uint8_t i = 0; i < 100; i++) {
    filename[6] = i/10 + '0';
    filename[7] = i%10 + '0';
    if (! SD.exists(filename)) {
      // only open a new file if it doesn't exist
      logfile = SD.open(filename, FILE_WRITE);
      break; // leave the loop!
    }
  }
  
  if (! logfile) {
    error("couldnt create file");
  }
  
  Serial.print("Logging to: ");
  Serial.println(filename);

  // connect to RTC
  Wire.begin();
  if (!RTC.begin()) {
    logfile.println("RTC failed");
#if ECHO_TO_SERIAL
    Serial.println("RTC failed");
#endif //ECHO_TO_SERIAL
  }
  

  logfile.println("millis,stamp,datetime,light,temp,vcc");
#if ECHO_TO_SERIAL
  Serial.println("millis,stamp,datetime,light,temp,vcc");
#endif //ECHO_TO_SERIAL
 
  // If you want to set the aref to something other than 5v
  //analogReference(EXTERNAL);
}
void printTemperature(DeviceAddress deviceAddress)
{
  float tempC = sensors.getTempC(deviceAddress);
  if (tempC == -127.00) {
    Serial.print("Error getting temperature");
  } 
  else {
    //Serial.print("C: ");
    Serial.print(tempC);
  }
}


void loop(void)
{
  DateTime now;

  // delay for the amount of time we want between readings
  delay((LOG_INTERVAL -1) - (millis() % LOG_INTERVAL));
  
  digitalWrite(greenLEDpin, HIGH);
  
  // log milliseconds since starting
  uint32_t m = millis();
  logfile.print(m); // milliseconds since start
  logfile.print(", ");
#if ECHO_TO_SERIAL
  Serial.print(m); // milliseconds since start
  Serial.print(", ");
#endif

  // fetch the time
  now = RTC.now();
  // log time
  logfile.print(now.unixtime()); // seconds since 1/1/1970
  logfile.print(", ");
  logfile.print('"');
  logfile.print(now.year(), DEC);
  logfile.print("/");
  logfile.print(now.month(), DEC);
  logfile.print("/");
  logfile.print(now.day(), DEC);
  logfile.print(" ");
  logfile.print(now.hour(), DEC);
  logfile.print(":");
  logfile.print(now.minute(), DEC);
  logfile.print(":");
  logfile.print(now.second(), DEC);
  logfile.print('"');
#if ECHO_TO_SERIAL
  Serial.print(now.unixtime()); // seconds since 1/1/1970
  Serial.print(", ");
  Serial.print('"');
  Serial.print(now.year(), DEC);
  Serial.print("/");
  Serial.print(now.month(), DEC);
  Serial.print("/");
  Serial.print(now.day(), DEC);
  Serial.print(" ");
  Serial.print(now.hour(), DEC);
  Serial.print(":");
  Serial.print(now.minute(), DEC);
  Serial.print(":");
  Serial.print(now.second(), DEC);
  Serial.print('"');
#endif //ECHO_TO_SERIAL

  sensors.requestTemperatures();
  float tempinsideThermometer = sensors.getTempC(insideThermometer); //damit wird die Temperatur an tempinsideThermometer gegeben

 // analogRead(tempPin);
 // delay(10);
  //int tempReading = analogRead(tempPin);
  //int tempReading = digitalRead(tempPin);
  // converting that reading to voltage, for 3.3v arduino use 3.3, for 5.0, use 5.0
//  float voltage = tempReading * aref_voltage / 1024;
  //float temperatureC = (voltage - 0.5) * 100 ;
  //float temperatureF = (temperatureC * 9 / 5) + 32;
  
  logfile.print(", ");
  logfile.print(tempinsideThermometer);
#if ECHO_TO_SERIAL
  Serial.print(", ");
  Serial.print(tempinsideThermometer);
#endif //ECHO_TO_SERIAL

  // Log the estimated 'VCC' voltage by measuring the internal 1.1v ref
 

  logfile.println();
#if ECHO_TO_SERIAL
  Serial.println();
#endif // ECHO_TO_SERIAL

  digitalWrite(greenLEDpin, LOW);

  // Now we write data to disk! Don't sync too often - requires 2048 bytes of I/O to SD card
  // which uses a bunch of power and takes time
  if ((millis() - syncTime) < SYNC_INTERVAL) return;
  syncTime = millis();
  
  // blink LED to show we are syncing data to the card & updating FAT!
  digitalWrite(redLEDpin, HIGH);
  logfile.flush();
  digitalWrite(redLEDpin, LOW);
  
}

Die Fehlermeldungen zu Posten, würde glaub ich den Rahmen sprengen… Sind sehr viele…

habe deinen Code übernommen und
#include <RTC_DS1307.h>hinzugefügt.
Nun wird alles ohne Probleme kompiliert

Binary sketch size: 24538 bytes (of a 126976 byte maximum)

Nabend…
also, habe es jetzt hinbekommen, hatte die falsche SD-Libraries.
Jetzt klappt es. Vielen Dank.
Zwei Fragen noch, wie kann ich es ändern, das er mir statt einer *.CSV eine *.TXT Datei erstellt?
Habe es so probiert:

// create a new file
  //char filename[] = "LOGGER00.CSV";
 char filename[] = "DATALOG.TXT";
 for (uint8_t i = 0; i < 100; i++) {
    filename[6] = i/10 + '0';
    filename[7] = i%10 + '0';
    if (! SD.exists(filename)) {
      // only open a new file if it doesn't exist
      logfile = SD.open(filename, FILE_WRITE);
      break; // leave the loop!
    }
  }

Aber das hat nicht geklappt :~

Und wo ändere was, damit er nicht andauernd eine Neue Datei anfägt?
Ich möchte, das er immer in die selbe Datei schreibt, auch wenn er mal neu gestartet wird.

Vielen Dank für die tolle Hilfe bis jetzt, Suuper Forum mit klasse Leuten hier ! Daumen hoch !!

Hallo,
wenn ich das einfüge meckert er wieder.

thewknd:
habe deinen Code übernommen und
#include <RTC_DS1307.h>hinzugefügt.
Nun wird alles ohne Probleme kompiliert

Binary sketch size: 24538 bytes (of a 126976 byte maximum)

Aber ich habe es zum laufen bekommen (siehe Post drüber)
Aber Danke für die schnelle Hilfe.

versuch es damit

char filename[] = "DATALOG.TXT";
logfile = SD.open(filename, FILE_WRITE | O_APPEND);

Hi thewknd, danke für den Code, funktioniert Super... VIELEN DANK !!!

Nu läuft ja alles so wie es soll... Eigentlich... Es ist ja schön und gut das die Daten auf der SD-Karte geschrieben werden, aber wie kann ich denn jetzt von Extern, darauf zugreifen, um sie auszuwerten bzw. Grafisch darzustellen? Also Ethernet ist hinzugefügt und er zeigt mir auf der mini HP die aktuell gemessene Temperatur an.

Ich würde gern per wget die Log-Datei auf einem anderen Rechner lesen/speichern

wget http://192.168.178.216/DATALOG.TXT

Oder wie macht Ihr das ?

Hallo,

ich bereite die auf SD-Karte geschriebenen Daten mit dem Arduino so auf, dass ich sie mit dem Programm LogView per USB lesen und darstellen kann. Finde die Darstellung echt gut gelungen. Ein entsprechendes Beispiel findes Du in der Datei LogLesen.pde, die ich Dir schonmal geschickt habe. Habe die Daten aber auch schon in eine Exel-Datei verwandelt. Eine graphische Auswertung sollte damit auch möglich sein.

Gruss Kalli

Kurze Frage, welches Ethernet-Shield verwendest Du? Wenn es das mit dem WIZ5100 Chip ist (ist das teurere Shield) ist, dann sollte das Übertragen größerer Datenmengen kein Problem sein. Bei dem "billig" Shield mit ENC28J60 wird das schwierig, da die Lib nicht mehrere TCP-Pakete in einer Verbindung verschicken kann, damit kannst Du ohne komplizierte Anpssungen der Lib nicht mehr als knapp 1500 Bytes auf einen Request verschicken. Das Problem hatten hier schon mehre Leute im Forum. Ansonsten kannst Du Dich an das Beispiel "WebServer" der Ethernet Bibliothek halten, da findest Du Code mit dem man auf einen HTTP-Request Daten verschickt. Aufpassen musst Du beim gleichzeitigen Benutzen der SD-Karte und des Ethernet-Chips, da beide die SPI Schnittstelle verwenden.

Hi, also ich nutze das mit dem WIZ5100 Chip. @ Kalli: Mit USB geht nicht, da das Ding so verbaut wird, das es zu weit von einem PC weg ist und nur Netzwerkanschluss hat.

Also, habe es mit wget versucht, leider holt er nur die HTML Datei bzw. das was sie anzeigt ab. Mit dem BeispielSkript "Webserver" werde ich mich jetzt mal beschäftigen...

Mal sehen ob ich's verstehe... :roll_eyes:

Hallo Kalli, erstmal vielen Dank für Dateien. Ich weiss nicht was die Datei LogLesen.pde genau macht. :blush: Bereitet sie die Daten so auf, das man sie von der SD Karte auslesen kann? Z.B. mit einem Texteditor?

Kalli: Hallo,

ich bereite die auf SD-Karte geschriebenen Daten mit dem Arduino so auf, dass ich sie mit dem Programm LogView per USB lesen und darstellen kann. Finde die Darstellung echt gut gelungen. Ein entsprechendes Beispiel findes Du in der Datei LogLesen.pde, die ich Dir schonmal geschickt habe. Habe die Daten aber auch schon in eine Exel-Datei verwandelt. Eine graphische Auswertung sollte damit auch möglich sein.

Gruss Kalli

Also, wenn ich das richtig sehe, dann wird hier(siehe Code) der Request mit einer leeren Seite quittiert. Wenn ich wget http://192.168.178.216/ aufrufe, lädt er mir eine leere Datei runter, weil ja nix angegeben ist, oder versteh ich das falsch?

 EthernetClient client = server.available();
  if (client) {
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        // 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();

Wenn das bis jetzt richtig wäre, müsste ich doch beim letzten

client.println();

die Datei (DATALOG.TXT) angeben, damit ich sie runterladen kann, Oder föllig miss verstanden? :(

Noch eine Frage,habe bei google irgendwie nix gefunden, kann den Sketch/Code auf die SD-Karte packen? Mein Sketch hat jetzt schon 29660bytes von max 32256bytes

Cetax: client.println();

die Datei (DATALOG.TXT) angeben, damit ich sie runterladen kann, Oder föllig miss verstanden? :(

Noch eine Frage,habe bei google irgendwie nix gefunden, kann den Sketch/Code auf die SD-Karte packen? Mein Sketch hat jetzt schon 29660bytes von max 32256bytes

Im Prinzip schon, aber nicht die Datei gibst Du an, sondern Du musst diese Schrittweise einlesen und an den Client ausgeben. Datei auf der SD-Card öffnen, Daten aus der Datei lesen und per client.print() an den Client schicken. Und hier greift dann ggf. das Problem des gleichzeitigen Lesens von SD und Senden per Ethernet. Achtung, das leere client.println(); ist wichtig. Damit weiss der Browser (wget) das der HTTP-Header zuende ist und die Daten anfangen. Also erst nach dem leeren client.println(); Deine Ausgabe einbauen.

Hallo Stefan,

Ich weiss nicht was die Datei LogLesen.pde genau macht.
Bereitet sie die Daten so auf, das man sie von der SD Karte auslesen kann? Z.B. mit einem Texteditor?

Generell erfolgt die Ausgabe der Daten auf SD-Karte in einem Format, das man mit jedem Texteditor lesen kann.
Mein Logger unterteilt sich in zwei Teile (mit Dil-Schalter einstellbar). Im ersten Teil erfolgt die Ausgabe der Daten,
bis der 1. Dil-Schalter wieder ausgeschaltet wird. Im zweiten Teil werden die Daten von der SD-Karte gelesen und etwas
aufbereitet per USB an LogView übergeben. Es hat sich herausgestellt, dass das byteweise Lesen von der SD-Karte
und die Ausgabe per USB teilweise fehlerhaft ist. Deshalb werden erst die Daten eingelesen und als geschlossener Block
über USB ausgegeben.
Zur Zeit werden noch Zeit und Temp-Daten in getrennten Dateien ausgegeben. Soll sich aber auch noch ändern. Für eine Exel Datei kann man ganz einfach beide Dateien zusammenfügen, da es Text-Dateien sind. In dem Programm können max. 6 DS-18B20 angeschlossen werden. Zur zeit benutze ich vier.

Gruss Kalli

Hallo, ich habe da nochmal eine Verständnis Frage, folgendes Szenario: Der Arduino misst die Temperatur und schreibt sie eine Logdatei, ohne sie auf einer Webseite wieder zugeben. Kann ich dann ohne Problem die Daten per FTP oder telnet abrufen ?

Arduino -->Logfile -->Ethernet

Dann dürfte sich doch nichts beissen, oder nicht ?

Danke für Eure Hilfe und Geduld :blush:

Cetax: Hallo, ich habe da nochmal eine Verständnis Frage, folgendes Szenario: Der Arduino misst die Temperatur und schreibt sie eine Logdatei, ohne sie auf einer Webseite wieder zugeben. Kann ich dann ohne Problem die Daten per FTP oder telnet abrufen ? Arduino -->Logfile -->Ethernet

Dann musst Du Deinem Arduino aber auch FTP oder telnet beibringen. Denn so wie Du es beschreibst, ist der Arduino der Server, denn der loggt ja die Daten. Das Problem bleibt aber das Gleiche, Dein Arduino hat die Daten und Du musst sie per Ethernet abholen. Dabei ist dann HTTP immer noch viel einfacher als telnet oder ftp. Wo ist denn Dein Problem, wenn Du den Webserver schon hast. Du musst lediglich noch die Datei auf der SD-Karte öffnen und dann die Daten in einen Puffer lesen und den dann an den verbundenen Webclient (Browser, wget etc.) ausgeben.

Hi, ok danke für die erläuterung, ich glaube ich verstehe. Vielleicht denke ich auch zu kompliziert oder zu einfach... :~

Wo ist denn Dein Problem, wenn Du den Webserver schon hast. Du musst lediglich noch die Datei auf der SD-Karte öffnen und dann die Daten in einen Puffer lesen und den dann an den verbundenen Webclient (Browser, wget etc.) ausgeben.

Das ich nicht verstehe wie ich das umsetzten soll. :blush: Was du geschrieben hast, verstehe ich (glaub ich..). - DATALOG.txt öffnen -->Inhalt in den Puffer schieben -->Webclient ruft den Puffeinhalt ab (z.b. wget)

Und da verließen sie mich.. Sorry... Und ich glaube, das der Sketch zu groß wird, er hat jetzt schon 29660bytes

Ist es Hilfreich, den Sketch zu Posten? Danke !

Ja, der Code wäre sicher hilfreich. Aber bitte in "#" Tags. Evtl. auch als Anhang, denn ich vermute mal das ist nicht wenig :-) Evtl. kann man ja das eine oder andere optimieren, damit der Webservice auch noch mit dazu passt.

Hallo,
erstmal ein großes Danke für deine Hilfe und Mühe !!
Ich habe aber noch eine Fage.
Wäre es einfacher, ich würde alles wegwerfen und neu anfangen (Theoretisch :grin:)
Folgende Vorstellung:

DS18B20 → Arduino Ethernet -->LAN-Kabel → WebServer (Synology DS111)

Soll heißen, der Arduino misst die Temperatur und mein Webserver ruft die Temperatur ab und speichert sie in einer Text-Datei (z.b. Log.txt)
Dann hätte ich doch nicht das Problem mit der SD-Karte und dem Ethernet Pin, oder ?
Und der Code wäre kleiner und der Arduino vielleicht nicht überlastet.

Oder geht das so nicht ? (Is ja nur so´ne Idee :roll_eyes:)

Ich pack den Sketch mal als Anhang…

Temp_Logger_1.ino (4.72 KB)