C – Temperaturwerte ins Heimnetz übertragen

Einen Temperaturwert mit dem NodeMCU (WLAN) ins Heimnetz ü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.

Material : Arduino, NodeMCU , TMP36 Sensor, Kabel, Breadboard (Materialbeschaffung www.funduinoshop.com)

Nachdem wir bereits in Teil A die integrierte LED des NodeMCU blinken lassen haben, 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.h>“ Bibliothek, welche mit dem Standardbefehl „#include <ESP8266WiFi.h>“ implementiert werden kann.

 

Im ersten Teil des Sketches, welcher die Variablen und  das Setup enthält, wird unser Webserver eingerichtet.

#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.
}

Im zweiten Teil werden die Informationen vom Webserver angefordert und ausgegeben.

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("<!DOCTYPE HTML>");                   // Jetzt wird das HTML-Kontrukt für den Webserver erstellt.
client.println("<html>");                            // 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("<br>");                              // Dies erreichen wir mit dem Befehl "client.println" , ähnlich wie "Serial.println"
client.println("<br>");                              // "<br>" 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 gesamte 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("<!DOCTYPE HTML>");                   // Jetzt wird das HTML-Kontrukt für den Webserver erstellt.
              client.println("<html>");                            // 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("<br>");                              // Dies erreichen wir mit dem Befehl "client.println" , ähnlich wie "Serial.println"
              client.println("<br>");                              // "<br>" 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.

  
}