Aufgabe : Mit dem Temperatursensor TMP36 möchten wir die Raumtemperatur auslesen und per Ethernet Shield an eine Website im Heimnetz ausgeben.
Material : Mikrocontroller / Breadboard / Kabel / Temperatursensor TMP36 / Ethernet Shield (Materialbeschaffung www.funduinoshop.com)
Der Aufbau dieser Anleitung orientiert sich an der Anleitung Nr. 10 – Temperaturen messen .
Da für diesen Sketch ein Ethernet Shield verwendet wird, muss eben dieses zuerst auf das Mikrocontroller-Board gesteckt werden. Bitte beachten Sie, dass durch das Ethernet Shield die digitalen Pins 10, 11, 12 und 13 belegt und somit für Erweitungen des Aufbaus nicht verwendet werden können. Im Anschluss muss eine Verbindung zwischen dem heimischen Router und dem Shield hergestellt werden. Schließen Sie dazu ein Ende des LAN-Kabels an Ihr Ethernet Shield und das andere Ende an den Router an. Nachdem die Verbindung hergestellt wurde, können Sie den Temperatursensor TMP36 wie folgt mit dem Shield verbinden. Bitte verwenden Sie eine externe Stromversorgung (9V Netzteil oder 9V Batterie), da dies die Sensorgenauigkeit wesentlich verbessert.
Damit das Ethernet Shield als Webserver verwendet werden kann, muss der unten stehende Sketch modifiziert werden. Dabei ist zu beachten, dass die MAC-Adresse im Netzwerk lediglich ein einziges Mal vorkommen darf (hier: 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED). Zudem muss die verwendete IP-Adresse Teil der jeweiligen Netzklasse sein. Die bereits belegten IP-Adresse des Heimnetzes, sowie die Adresse der Standardgateway können Sie über die sogenannte DOSBox auslesen.
Klicken Sie auf „Start“ und geben Sie unter „Ausführen“ den Befehl „CMD“ ein. Im Anschluss öffnet sich die DOSBox. Geben Sie nun den Befehl „ipconfig“ ein. Es erscheint eine Auflistung aller bereits verwendeten IP-Adressen.
Der Sketch funktioniert wie folgt :
Zuerst wird der Port für die Ausgabe des Messwertes über HTML definiert. Anschließend wird der EthernetServer initialisiert und für den Aufruf durch den Client vorbereitet. Der Sensorwert wird anschließend ausgelesen und per „map-Befehl“ in den auszugebenden Temperaturwert umgewandelt (siehe Anleitung Nr. 10). Erfolgt ein Seitenaufruf durch den Client, wird dieser Temperaturwert über das HTML-Protokoll mit dem Befehl „server.print“ nach einem kurzen „delay“ ausgegeben. Abschließend wird die Verbindung mit dem Befehl „client.stop()“ getrennt.
#include <Wire.h> // Laden der notwendigen libraries #include <SPI.h> #include <Ethernet.h> int TMP36 = A3; // Deklaration der Variablen int sensorwert; int temperatur = 0; byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // MAC Adresse des Arduino Boards !WICHTIG! MAC Adresse darf nur einmal im Heimnetz vorkommen byte ip[] = { 192, 168, 2, 177 }; // IP Adresse des Arduino Boards !WICHTIG! IP Adresse muss manuell im Netzwerk vergeben werden, i.d.R. 192.168.x.xxx byte gateway[] = { 192, 168,2, 1 }; // Gateway Fritzbox !WICHTIG! Auszulesen über Start -> "cmd" -> "ipconfig" -> Standardgateway byte subnet[] = { 255, 255, 255, 0 }; // Subnet Maske (optional) EthernetServer server(80); // Port Einstellung (Standard für HTML : 80) void setup() { Wire.begin(); // I2C als Master-BUS Ethernet.begin(mac, ip); // Ethernet initialisieren server.begin(); // Auf Clients warten } void loop() { sensorwert=analogRead(TMP36); //Auslesen des Sensorwertes an PIN A3 temperatur= map(sensorwert, 0, 410, -50, 150); // Umwandeln des Sensorwertes mit Hilfe des "map" Befehls delay(500); EthernetClient client = server.available(); //Prüfen, ob Client Seite aufruft if (client) { // Seitenaufruf durch User // Ausgabe in HTML 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("Funduino Thermometer"); server.print("</TITLE>"); server.print("</HEAD><BODY>"); server.print("<h2 align=center><font size=7><b>Funduino Thermometer </b></font></h2>"); server.print("<center><font size=5><b>Die Temperatur beträgt </font>"); server.print(temperatur); // Ausgabe der Temperatur server.print("<font size=5> Grad Celsius. </font"); delay(500); // Kurzer Delay, um Daten zu senden client.stop(); // Verbindung mit dem Client trennen } }
Gibt man nun im Webbrowser (Internet Explorer, Google Chrome, Mozilla Firefox…) die IP-Adresse des Ethernet Shields ein (in unserem Fall 192.168.2.177), erscheint die folgende Seite mit der erfassten Temperatur :