Das Ethernetshield verfügt über einen SD-Kartenschacht. Deswegen kann man das Ethernetshield auch als Datenlogger benutzen. Das Shield blockiert allerdings den A0-Eingang.
http://randomnerdtutorials.com/arduino-webserver-with-an-arduino-ethernet-shield/
http://fluuux.de/2013/03/arduino-als-webserver-einrichten-und-webpage-von-sd-karte-laden/
Das folgende Programm liest einen analogen Wert ein und verschickt diesen über das Netzwerk an eine PHP-Datei als Ziel. Die Daten werden über die get-Methode versendet, d.h. die Daten werden an die URL angehängt.
/* Vorlage: Web client */ #include <SPI.h> #include <Ethernet.h> int sensorValue; long zeit; int i=0; byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // hat man mehr Arduinos im Netz: mac adresse verändern byte server[] = { 192, 168, 178, 34 }; // IP - Adresse des Servers IPAddress ip(192,168,178,100); // IP - Adresse des Arduino // wird nur benötigt, wenn DHCP nicht geht. EthernetClient client; void setup() { Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only } // start the Ethernet connection: if (Ethernet.begin(mac) == 0) { Serial.println("Failed to configure Ethernet using DHCP"); Ethernet.begin(mac, ip); } } void loop(){ delay(1000); sensorValue = analogRead(A5); // analogen Werte abfragen zeit = millis(); Serial.print("connecting..."); if (client.connect(server, 80)) { Serial.println("connected"); String url = "GET /Projekt/MesswertAbspeichern.php?zeit="+String(zeit)+"&messwert="+String(sensorValue)+" HTTP/1.1"; client.println(url); client.println("Host: 192.168.178.34"); client.println("Connection: close"); client.println(); } else { Serial.println("Aufruf hat nicht geklappt."); } client.stop(); client.flush(); }
/* Vorlage: Web client */ #include <SPI.h> #include <Ethernet.h> #include <SoftwareSerial.h> SoftwareSerial SerialCom (A2,A3); byte addArray[] = { 0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79 }; // Befehl zur Abfrage des Sensors byte zeroArray[] = { 0xFF, 0x01, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78}; // Befehl zum Reset des Sensors char dataValue[9]; String dataString = ""; long zeit; int i=0; byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // hat man mehr Arduinos im Netz: mac adresse verändern byte server[] = { 192, 168, 178, 34 }; // IP - Adresse des Servers IPAddress ip(192,168,178,100); // IP - Adresse des Arduino // wird nur benötigt, wenn DHCP nicht geht. EthernetClient client; void setup() { Serial.begin(9600); SerialCom.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only } Serial.println("MH-Z14 C02 Sensor Test Code"); Serial.println("------------------------------------"); // start the Ethernet connection: if (Ethernet.begin(mac) == 0) { Serial.println("Failed to configure Ethernet using DHCP"); Ethernet.begin(mac, ip); // wenns mit DHCP nicht klappt, dann halt mit fester IP Serial.println("connecting..."); } delay(1000); SerialCom.write(zeroArray, 9); // Nullpunkt setzen, möglichst nur einmal. delay(1000); } void loop(){ delay(60000); // Abfrage alle 60 Sekunden // CO2 Abfragen SerialCom.write(addArray, 9); SerialCom.readBytes(dataValue, 9); int resHigh = (int) dataValue[2]; int resLow = (int) dataValue[3]; int pulse = (256*resHigh)+resLow; zeit = millis(); // Zeit in Millisekunden nach Start // Serial.println("Zeit: "+ String(zeit)+" Messwert: " +String(pulse)); if (client.connect(server, 80)) { // Serial.println("Server verbunden."); String url = "GET /Projekt/MesswertAbspeichern.php?zeit="+String(zeit)+"&messwert="+String(pulse)+" HTTP/1.1"; client.println(url); client.println("Host: 192.168.178.34"); client.println("Connection: close"); client.println(); } else { Serial.println("Aufruf hat nicht geklappt."); } client.stop(); client.flush(); }
<?php // DatenbankVerbindung error_reporting(E_ALL); $mysqli = new mysqli('127.0.0.1', 'root', '', 'raumklima'); if(isset($_GET['messwert'])) { $messwert = $_GET['messwert']; } else { $messwert ="-------"; } if(isset($_GET['zeit'])) { $zeit = $_GET['zeit']; } else { $zeit ="-------"; } // Eintrag in die Datenbank // // Gut wäre hei noch eine Sicherung, das dies nur bei Aufruf über einen Arduino, bzw. // einer bestimmten Variable passieren kann und nicht durch einen händischen Aufruf $sql="INSERT INTO `messwerte` (`id`, `zeit`, `messwert`, `ServerZeit`) VALUES (NULL, '".$zeit."', '".$messwert."', CURRENT_TIMESTAMP);"; $result = $mysqli->query($sql); /* // Abfrage der Datenbank $sql =" SELECT `id`,`zeit`, `messwert`, `ServerZeit` FROM `messwerte`;"; $result = $mysqli->query($sql); $erg = $result->fetch_assoc(); echo $erg['zeit'] . " " . $erg['messwert'] . "."; */ ?> <!-- HTML - Zeug eingentlich unnötig --> <!DOCTYPE html> <html lang="de"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> <body> Werte in Datenbank eingetragen. <a href="AktuelleDaten.php">Hier </a> </body> </html>