Inhaltsverzeichnis
Für dieses Projekt benötigst du
Einen Temperaturwert mit dem NodeMCU (WLAN) ins Heimnetz (Webserver) übertragen
In Teil B haben wir gelernt, wie das NodeMCU eine Internetverbindung mit dem Heimnetzwerk herstellt. Nun möchten wir diese Verbindung nutzen und Messwerte in das Heimnetz übertragen.
Nachdem wir bereits in Teil A die integrierte LED des NodeMCU haben blinken lassen, widmen wir uns jetzt einer etwas komplizierteren Aufgabe. Wir möchten einen Temperaturwert mit dem TMP36 erfassen, mit dem NodeMCU verarbeiten und anschließend in unserem Webbrowser anzeigen lassen.
Für die Datenübertragung an unseren Router verwenden wir das integrierte ESP8266-Modul.
Zuerst wird der TMP36 wie in der nachfolgenden Zeichnung angeschlossen.
Da die Erfassung und Umwandlung des Temperaturwerts durch den TMP36 aus der Anleitung Nummer 10 entnommen werden kann, schauen wir uns direkt die Datenübertragung per WLAN an.
Wir verwenden in dieser Aufgabe die „ESP8266WiFi“ Bibliothek, welche mit dem Standardbefehl „#include“ implementiert werden kann.
Sketch Teil 1 - Einrichtung des Webservers
#include <ESP8266WiFi.h> // Implementierung der ESP8266 WiFi Bibliothek
const char* ssid = "IhreSSID"; // Festlegung unserer SSID (Name des WLAN-Netzwerks)
const char* password = "IhrPasswort"; // Festlegung unseres WLAN-Passworts
int sensorwert; // Diese Variablen haben wir der Anleitung 10 entnommen.
int TMP36 = A0; // Sie dienen im späteren Verlauf der Ermittlung der Temperatur
int temperatur = 0;
int temperatur1;
int t=500;
WiFiServer server(80); // WLAN Verbindung wird über den Port80 hergestellt
void setup() // Im Setup werden unsere Einstellungen konfiguriert. Zudem bauen wir Kontrollelemente ein, die uns zur Überwachung des NodeMCU dienen.
{
Serial.begin(115200); // Das NodeMCU verwendet die Baudrate "115200"
// Diese Baudrate muss später im Seriellen Monitor eingestellt werden, damit wir die Aktionen des NodeMCU überwachen können
Serial.println();
Serial.print("Verbinde zu ");
Serial.println(ssid); // Kontrollelement im seriellen Monitor
WiFi.begin(ssid,password); // Die WLAN Verbindung wird mit der oben definierten SSID und dem zugehörigen Passwort hergestellt
while (WiFi.status() != WL_CONNECTED) // Solange noch keine WLAN-Verbindung besteht....
{
delay(500);
Serial.print("."); // ... sollen Punkte ausgegeben werden. Die Punkte dienen als Kontrollelement.
}
Serial.println(" ");
Serial.println("WiFi verbunden"); // Kontrollelement im seriellen Monitor
server.begin(); // Das NodeMCU dient nun als Mini-Webserver, auf welchem wir Daten temporär speichern und ausgeben können
Serial.println ("Webserver laeuft, warte auf ESP8266..."); // Kontrollelement im seriellen Monitor
delay(10000); // An dieser Stelle geben wir dem ESP-Modul 10 Sekunden Zeit für die Initialisierung
Serial.println();
Serial.println("Die IP-Adresse des Webservers lautet ");
Serial.println(WiFi.localIP()); // Nun wird die sogenannte localIP ausgegeben. Diese können wir später im Webbrowser aufrufen und die Temperaturwerte ablesen.
}
Sketch Teil 2 - Daten vom Webserver anfordern und verarbeiten
void loop()
{
// In den Folgenden Zeilen soll festgestellt werden, ob sich ein Client mit dem Server verbindet.
WiFiClient client = server.available(); // Abfrage an den Webserver, die der Erkennung eines Client dient.
if (client) // Insofern ein Client vorhanden ist...
{
Serial.println("Neuer Client"); // Kontrollelement im seriellen Monitor
while (client.connected()) // ... und sich dieser mit dem Server verbinden möchte...
{
if (client.available()) // ... und auch als solcher erkannt wird, ...
{
sensorwert=analogRead(TMP36); // ... startet die Ermittlung der Umgebungstemperatur.
temperatur= map(sensorwert, 0, 410, -50, 150);
delay(t);
temperatur1 = (temperatur*0.333);
client.println(""); // Jetzt wird das HTML-Kontrukt für den Webserver erstellt.
client.println(""); // Websiten werden in der Regel in der Programmiersprache "HTML" kontruiert.
client.println("Der Funduino Temperaturmesser"); // Damit wir auf unserer Website später auch etwas ablesen können, müssen wir diese Füllen.
client.println("
"); // Dies erreichen wir mit dem Befehl "client.println" , ähnlich wie "Serial.println"
client.println("
"); // "
" erschafft eine Leerzeile (bzw. definiert das Ende einer Zeile)
client.println("Die Raumtemperatur betraegt ca. ");
client.println(temperatur1); // An dieser Stelle soll die Variable ausgegeben werden.
client.println(" Grad Celsius.");
break; // Der "break;" beendet die Schleife
}
}
}
delay(1000); // Wir warten eine Sekunde lang ab....
client.stop(); // ... und beenden die Verbindung zum Webserver.
}
Der finale Sketch im Überblick
#include <ESP8266WiFi.h> // Implementierung der ESP8266 WiFi Bibliothek
const char* ssid = "IhreSSID"; // Festlegung unserer SSID (Name des WLAN-Netzwerks)
const char* password = "IhrPasswort"; // Festlegung unseres WLAN-Passworts
int sensorwert; // Diese Variablen haben wir der Anleitung 10 entnommen.
int TMP36 = A0; // Sie dienen im späteren Verlauf der Ermittlung der Temperatur
int temperatur = 0;
int temperatur1;
int t=500;
WiFiServer server(80); // WLAN Verbindung wird über den Port80 hergestellt
void setup() // Im Setup werden unsere Einstellungen konfiguriert. Zudem bauen wir Kontrollelemente ein, die uns zur Überwachung des NodeMCU dienen.
{
Serial.begin(115200); // Das NodeMCU verwendet die Baudrate "115200"
// Diese Baudrate muss später im Seriellen Monitor eingestellt werden, damit wir die Aktionen des NodeMCU überwachen können
Serial.println();
Serial.print("Verbinde zu ");
Serial.println(ssid); // Kontrollelement im seriellen Monitor
WiFi.begin(ssid,password); // Die WLAN Verbindung wird, mit der oben definierten SSID und dem zugehörigen Passwort hergestellt
while (WiFi.status() != WL_CONNECTED) // Solange noch keine WLAN-Verbindung besteht....
{
delay(500);
Serial.print("."); // ... sollen Punkte ausgegeben werden. Die Punkte dienen als Kontrollelement.
}
Serial.println(" ");
Serial.println("WiFi verbunden"); // Kontrollelement im seriellen Monitor
server.begin(); // Das NodeMCU dient nun als Mini-Webserver, auf welchem wir Daten temporär speichern können
Serial.println ("Webserver laeuft, warte auf ESP8266..."); // Kontrollelement im seriellen Monitor
delay(10000); // An dieser Stelle geben wir dem ESP-Modul 10 Sekunden Zeit für die Initialisierung
Serial.println();
Serial.println("Die IP-Adresse des Webservers lautet ");
Serial.println(WiFi.localIP()); // Nun wird die sogenannte localIP ausgegeben. Diese können wir später im Webbrowser aufrufen und die Temperaturwerte ablesen.
}
void loop()
{
// In den Folgenden Zeilen soll festgestellt werden, ob sich ein Client mit dem Server verbindet/verbunden hat.
WiFiClient client = server.available(); // Abfrage an den Webserver, die der Erkennung eines Client dient.
if (client) // Insofern ein Client vorhanden ist...
{
Serial.println("Neuer Client"); // Kontrollelement im seriellen Monitor
while (client.connected()) // ... und sich dieser mit dem Server verbinden möchte...
{
if (client.available()) // ... und auch als solcher erkannt wird, ...
{
sensorwert=analogRead(TMP36); // ... startet die Ermittlung der Umgebungstemperatur.
temperatur= map(sensorwert, 0, 410, -50, 150);
delay(t);
temperatur1 = (temperatur*0.333);
client.println(""); // Jetzt wird das HTML-Kontrukt für den Webserver erstellt.
client.println(""); // Websiten werden in der Regel in der Programmiersprache "HTML" kontruiert.
client.println("Der Funduino Temperaturmesser"); // Damit wir auf unserer Website später auch etwas ablesen können, müssen wir diese Füllen.
client.println("
"); // Dies erreichen wir mit dem Befehl "client.println" , ähnlich wie "Serial.println"
client.println("
"); // "
" erschafft eine Leerzeile (bzw. definiert das Ende einer Zeile)
client.println("Die Raumtemperatur betraegt ca. ");
client.println(temperatur1); // An dieser Stelle soll die Variable ausgegeben werden.
client.println(" Grad Celsius.");
break; // Der "break;" beendet die Schleife
}
}
}
delay(1000); // Wir warten eine Sekunde lang ab....
client.stop(); // ... und beenden die Verbindung zum Webserver.
}
Funduino - Dein Onlineshop für Mikroelektronik
-
Dauerhaft bis zu 10% Rabatt für Schüler, Studenten und Lehrkräfte
-
Mehr als 3.500 Artikel sofort verfügbar!
-
Über 8 Jahre Erfahrung mit Arduino, 3D-Druck und co.