Hallo TaO,
hier der Sketch zu dem obigen Webserver.
#include "EEPROM.h"
#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 14
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
int tempc = 0;
float tempfloat = 0;
int TempArray[49];
int TempSpeicher1 = 0;
int TempSpeicher2 = 0;
int tempafter = 0;
int tempafter1 = 0;
int tempafter2 = 0;
int rund = 0;
int rundgesamt = 0;
byte rund1 = 0;
byte rund2 = 0;
int runh = 12;
int runm = 13;
int runs = 28;
int ticks = 0;
int offset = 465; // erster Startwert des Offset mit einem mal gemessenen Wert von 480mV Dioden spannung
unsigned long last_millis1 = 0;
unsigned long last_millis2 = 0;
unsigned long last_millis3 = 1797000;
byte mac[] = {
0x90, 0xA2, 0xDA, 0x00, 0x2B, 0xEA
}; // MAC Adresse des Arduino Boards
byte ip[] = {
192, 168, 178, 5
}; // IP Adresse des Arduino Boards
byte gateway[] = {
192, 168, 178, 1
}; // Gateway Fritzbox
byte subnet[] = {
255, 255, 255, 0
}; // Subnet Maske (optional)
EthernetServer server = EthernetServer(80); // Port Einstellung (Standard 80)
void setup() {
Ethernet.begin(mac, ip);//, gateway, subnet); // Ethernet initialisieren
server.begin(); // Auf Clients warten
pinMode(4, OUTPUT); // zum Abwählen der SD karte auf dem Shield
digitalWrite(4, HIGH); // zum Abwählen der SD karte auf dem Shield
rund1 = EEPROM.read(1); // -255
rund2 = EEPROM.read(2); // Überlauf 255
rundgesamt = (rund2 * 255) + rund1;
rund = rund1;
for (int i; i < 49; i++) {
TempArray[i] = 15;
}
sensors.begin();
}
void loop() {
long cur_millis;
cur_millis = millis();
if (cur_millis - last_millis1 >= 1000) { // Für den Laufzeit zähler
sensors.requestTemperatures(); // Send the command to get temperatures
tempfloat = (sensors.getTempCByIndex(0));
tempc = tempfloat * 100.0;
TempArray[0] = tempfloat;
runs = runs + 1;
last_millis1 = cur_millis;
}
if (cur_millis - last_millis3 > 1800000) { // alles 30min wird das array verschoben
TempArray[0] = tempfloat;
for (int i = 48; i > 0; i--) {
TempArray[i] = TempArray[i - 1];
}
last_millis3 = cur_millis;
}
if (runs >= 60) {
runm = runm + 1;
runs = 0;
}
if (runm >= 60) {
runh = runh + 1;
runm = 0;
}
if (runh >= 24) {
rund1 = rund1 + 1;
rundgesamt = rundgesamt + 1;
EEPROM.write(1, rund1);
runh = 0;
if (rund1 >= 254) {
rund2 = rund2 + 1;
rund1 = 0;
rund = 0;
EEPROM.write(2, rund2);
}
}
EthernetClient client = server.available(); // Prüfen, ob Client Seite aufruft
if (client) { // Seitenaufruf durch User
server.print("HTTP/1.0 200 OK\r\nServer: arduino\r\nContent-Type: text/html\r\n\r\n");
server.print("<HTML><HEAD><TITLE>");
server.print("Arduino Webthermometer");
server.print("</TITLE>");
server.print("</HEAD><BODY>");
server.print("<b> Mein erster Temperatur - Webserver </b>
");
server.print("Der ArduinoMEGA laeuft seit ");
server.print(rundgesamt);
server.print(" Tagen ");
server.print(runh);
server.print(" Stunden ");
server.print(runm);
server.print(" Minuten und ");
server.print(runs);
server.print(" Sekunden.
");
server.print("Temperatur draussen auf der Fensterbank:
");
server.print("<img src=\"http://chart.googleapis.com/chart?chxl=0:|-10%C2%B0C|%2B35%C2%B0C");
server.print("&chxr=0,-15,25&chxt=y&chs=400x250&cht=gm&chco=000000,3072F3|42B542|FF3A00&chds=-10,35&chd=t0:"); //chco=000000
server.print(tempfloat);
server.print("&chl=");
server.print(tempfloat);
server.print("&chtt=°C+Aussentemperatur+aktuell\">
");
server.print("<img src=\"http://chart.googleapis.com/chart?chxl=1:|24|21|18|15|12|9|6|3|0&chxr=0,-10,40|1,48,0"); //chart.googleapis.com
server.print("&chxs=0,676767,11.5,0,lt,676767&chxt=y,x&chs=500x350&cht=lc&chco=000000&chds=-10,40");
server.print("&chd=t:");
int n;
for (n = 48; n > 0; n = n - 1) {
server.print(TempArray[n]);
if (n >= 2 && n <= 48)
server.print(",");
};
server.print("&chdl=Verlauf+Temperatur+letzte+24h&chdlp=b&chg=0,5&chls=2&chtt=Verlauf\">
");
server.print("<script language=\"JavaScript\" src=\"http://www.begann.de/uhren/uhr44.js\"></script>");
delay(100); // Kurz warten, um Daten zu senden
client.stop(); // Verbindung mit dem Client trennen
}
}
Die Libs sind von diversen Dallas One Wire Projekten. Die Darstellung mit google charts gemacht. ist zwar noch aktiv aber nicht mehr mit den damaligen Gauges dokumentiert. Das heißt das der Arduino I-Net Zugang haben muss, aber nicht von außen erreichbar sein muss (Port Forwarding)
Gruß
DerDani