Hi,
ich habe es genau andersrum gemacht
Ich habe mich am Arduino versucht, also er liest die Temperatur und gibt sie Serial aus.
Hier der funktionierende Sketch bis jetzt:
/*
Web client
This sketch connects to my Diskstation 192.168.178.111
and send the Themperature from DS18B20 at DigiPin 6 to it
created 20 April 2012
*/
#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 6 // DS18B20 an Pin 6 angeschlossen
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress Fuehler1 = { 0x28, 0x65, 0x35, 0xC3, 0x03, 0x00, 0x00, 0x35 }; //Adressen der Sensoren manuell eingeben
// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0xEE, 0xF3 }; // Mac-Adresse Arduino Ethernet
byte ip[] = {192,168,178,230}; // IP-Adresse Arduino Ethernet
byte gateway[] = {192,168,178,1}; // Gateway (Fritzbox)
byte subnet[] = {255,255,255,0};
IPAddress server(192,168,178,111); // Diskstation DS111
char host[] = "192.168.178.111\n";
// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;
char url[] = "/senddata.php"; // Pfad zur PHP-Datei eingeben
char c;
int Sensor = 6; // DS18B20 an DigitalPin 6
int ledPIN = 5; // Power LED DigitalPin5
float temp1 = 0; // Variable für Temperatur
void setup()
{
Serial.begin(9600);
sensors.begin();
sensors.setResolution(Fuehler1, 9);
pinMode(ledPIN, OUTPUT);
Ethernet.begin(mac, ip, gateway, subnet); // starte Ethernet
// delay(1000); // warten auf Ethernet
// Serial.println("verbinde..."); // Ausgabe(n) auf serieller Konsole
// if (client.connect(server, 80)) // wenn Verbindungsversuch erfolgreich ...
// {
// Serial.println("verbunden"); // Ausgabe(n) auf serieller Konsole
// client.print("GET /senddata.php?Fuehler1="); // schicke Temperatur zum Server
// client.print(temp1);
// client.print(" HTTP/1.0\n");
// client.println("Host: 192.168.178.111\n");
// client.println(); // schicke Leerzeile (beende Anfrage)
// }
// else // sonst, wenn Verbindung fehlgeschlagen, ...
// {
// Serial.println("Verbindung fehlgeschlagen"); // Fehlermeldung auf Konsole
// }
// if (client.available())
// {
// char c = client.read();
// Serial.print(c);
// }
// delay(899000);
// client.stop();
// client.flush();
}
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()
{
Sensor_lesen();
//Daten_senden();
delay(10000);
}
void Sensor_lesen()
{
sensors.requestTemperatures();
//float temp1 = sensors.getTempC(Fuehler1);
Serial.print("Temperatur: ");
printTemperature(Fuehler1);
Serial.print("C");
Serial.print("\n\r");
}
/*void Daten_senden()
{
Serial.print("Verbunden...sende Daten...");
client.print("GET ");
client.print(url);
client.print("?Fuehler1=");
client.print(temp1);
client.println(" HTTP/1.1");
client.println();
Serial.println("fertig!");
}
*/
Alles andere habe ich erstmal auskommentiert, da ich nicht weiß, was ich in die PHP-Datei schreiben soll.
Ich habe zwar schon mal was mit PHP gemacht, aber noch nie irgendwas von einem anderen Rechner abgefragt oderso. Da hab ich null Ahnung (Aber davon ganz viel )
<?php
$_GET["Fuehler1"]; // Temperatur von Fuehler 1
$dateiname = "log.txt"; // Name der Log-Datei
// Datei öffnen, wenn nicht vorhanden dann wird die Datei erstellt.
$handler = fOpen($dateiname , "a+");
// Dateiinhalt in die Datei schreiben
fWrite($handler , $GET); // <-- Ist das richtig ?
fClose($handler); // Datei schließen
?>
Is ne Idee, keine Ahnung ob das richtig ist
Wird die Temperatur denn so übergeben? GET sollte doch richtig sein, oder?