Arduino übermittelt Temperaturen
Ausgehend von Mats Vanselows getTemperatur()
Funktion (http://www.mats-vanselow.de/2009/03/25/temperaturen-messen-mit-arduino und einem Beispiel aus der Ethernet Library habe ich einen kleinen Client geschrieben, der alle 10 Minuten die Temperatur aus einem LM35 Sensor ausliest und per HTTP-Request an ein PHP-Skript auf meiner Homepage schickt. Da der LM35 nicht genau kalibriert ist und wohl sowieso maximal auf ein halbes Grad genau ist, habe ich mittels zwei anderer Thermometer (die wiederum selbst voneinander abweichen) die ungefähre Abweichung des LM35 bestimmt und ziehe die 2° Celsius einfach ab.
Hier der entsprechende Processing-Code:
#include <Ethernet.h> bool connected = false; byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; byte ip[] = { 192, 168, 0, 99 }; // IP-Adresse des Webservers byte serverIP[] = {111,111,111,111}; Client client(serverIP,80); int inPin = 5; // input pin 1 float inValTotal; int i; int runs = 5; // Anzahl der Durchläufe int waittime = 20; // ms zwischen Durchläufen int delayVal = 1000; // Intervall für Serial Output float getTemperatur() { inValTotal = 0; for(i = 0;i<runs;i++){ inValTotal = inValTotal + analogRead(inPin); delay(waittime); } inValTotal = inValTotal / runs / 2; return(inValTotal-2); } void setup() { Ethernet.begin(mac, ip); Serial.begin(9600); Serial.println("setup done"); } void loop() { Serial.println("Entered loop"); if (!connected){ Serial.println("Not connected"); if (client.connect()){ connected = true; Serial.println("Connected to Server"); Serial.println("Sending request to server"); client.print("GET /storetemp.php?t="); client.print(getTemperatur()); client.println(" HTTP/1.1"); client.println("Host: www.mydomain.com"); client.println("User-Agent: Arduino"); client.println("Accept: text/html"); client.println(); } else { Serial.println("Cannot connect to server"); } } else { delay(500); while (client.connected() && client.available()) { char c = client.read(); Serial.print(c); } Serial.println(); client.stop(); connected=false; } Serial.println("Done now"); delay(600000); } |
Hier der Code des PHP-Skripts, es schickt als Antwort Zeit und erhaltene Temperatur zurück zum Arduino und speichert die Temperatur mit Zeitstempel in einer Textdatei. Im nächsten Schritt werde ich wohl sicher eine MySQL-Datenbank hintersetzen, für den Moment reicht es aber völlig aus.
<?php header('Content-type: text/plain'); echo date("d.m.Y-H:i:s") . " Temperatur= " . $_GET['t']; $myFile = "testFile.txt"; $fh = fopen($myFile, 'a') or die("can't open file"); fwrite($fh, date("d.m.Y-H:i:s") . " Temperatur= " . $_GET['t']."\n"); fclose($fh); ?> </php> |
Und abschließend ein Auszug aus der Textdatei:
04.10.2009-09:22:29 Temperatur= 21.00 04.10.2009-09:22:37 Temperatur= 21.00 04.10.2009-09:22:44 Temperatur= 21.00 04.10.2009-09:22:52 Temperatur= 21.00 04.10.2009-09:23:00 Temperatur= 21.00 04.10.2009-09:23:07 Temperatur= 20.90 04.10.2009-09:23:15 Temperatur= 21.00 04.10.2009-09:23:33 Temperatur= 21.00