zur Navigation springen


Projekt: Temperaturdaten ins Internet

ESP8266

erstellt 10.2017



Das Endziel des Projektes ist eine autarke Messstation mit Hilfe des ESP8266-01 im Garten zu betreiben, welches seine Temperaturdaten auf eine private Internetseite ablegt. Diese Daten sollten den aktuellen Wert anzeigen und zu statistischen Zwecken grafisch ausgegeben werden können.


Das Projekt wird nicht immer geradlinig verlaufen und nur das Endergebnis zeigen, nein auch meine zwischen Schritte, die ich zum Testen benötigt habe. Da es mein erstes Projekt mit dem ESP8266 ist, werden noch einige Hürden vorhanden sein. Die Lug-Waldkraiburg.org sollte an dieser Stelle als Mitstreiter nicht unerwähnt bleiben.


Materialien:


ESP8266-01
Steckbrett
3,3V Stromversorgung
USB-Serial Adapter
Temperatursensor - DS18B20


Arduino IDE


Die Abfrage habe ich in der Arduino IDE geschrieben, da es schon eine Bibliothek für den Temperatursensor gab, sowie einige Beispiele. Die Arduino IDE wie beschrieben installieren und die entsprechenden Bibliotheken laden.
Die benötigten Bibliotheken DallasTermperature V3.7.6, ESP8266WiFi V1.0.0 und OneWire V2.3.3 unter Sketch / Bibliotheken einbinden / Bibliotheken verwalten einbinden.

Die IDE Einstellungen die verwendet habe:
  - Board: „Generic ESP8266 Module“
  - Flash Mode: „DIO“
  - Flash Frequency: „40MHz“
  - CPU Frequency; „80 MHz“
  - Flash Size: „512K (64K SPIFFS)“
  - Debug port: „Disabled“
  - Debug Level: „Keine“
  - Reset Method: „ck“
  - Upload Speed: „115200“
  - Port: „COM6“

Verwendung findet das Standard Image mit AT-Befehlssatz für den ESP8266-01.


Grundschaltplan vom ESP8266-01



Grundschaltung
Fritzing Schaltplan hier laden.

Da die Stromversorgung des USB-Serial Adapter selten ausreicht, wurde gleich eine eigene Stromversorgung verwendet. Im Betrieb wird der USB-Serial Adapter nicht mehr benötigt. Den Taster Programm welcher in vielen Schaltungen für das Laden der Pragramme verwendet wird, habe ich gleich hart ausgeführt (wenn alles passt wird ja alles verdrahtet).


Programm hochladen

Zum Upload des Programm (Sketches) muss zunächst der Bootloader des Chips gestartet werden. Dazu wird GPIO0 auf GND gelegt. Anschließend ist ein Reset oder Trennen der Versorgungsspannung notwendig. Liegt also GPIO0 beim Start des Chips auf GND, startet der Bootloader. Nun kann in der IDE auf Upload geklickt werden, und das Programm wird übertragen. Nach der Übertragung startet das Programm automatisch. Wenn das Modul später neu gestartet oder einen Reset ausgeführt wird, dann muss die Verbindung GND -> GPIO0 wieder getrennt werden, da das Modul sonst im Bootloader hängen bleibt und das Programm nicht ausführt.


ESP8266 - Arduino IDE - Programm


Der gesamte Quelltext ist hier zu finden.

Ich werde nicht die Webseite mit Quelltext zuballern, sondern nur die wichtigen Bereiche besprechen. Der Quelltext enthält auch einige Erläuterungen und ganz Hilfreich sind nach meiner Ansicht die vielen Ausgaben an die Serielle-Schnittstelle, die den Programmablauf und eventuelle Fehler/Probleme schön dokumentieren.

// ### WIFI Stuff
#include <Arduino.h>
#include <ESP8266WiFi.h>

// ### Sensor Stuff
#include <OneWire.h>
#include <DallasTemperature.h>
Bibliotheken:
Die entsprechenden Bibliotheken werden hier geladen.

// ### Definitionen
#define ONE_WIRE_BUS 2                  // Digitalport auf Pin 2 definieren für den DS18B20 - Temperatursensor
const char* ssid     = "wulff";         // SSID des WLAN's
const char* password = "Geheim";        // Passwort des WLAN's
const char* host     = "m-wulff.de";    // Internetdomäne 
const char* link     = "/input.php?t="; // Link auf Input.php mit Ubergabe 
const byte  pause    = 5;               // Messpause in Minuten

const boolean deep_sleep = false;       // deep sleep vorhanden, true oder false

Einstellungen:
Die Einstellungen für Ihr WLAN müssen Sie hier mit Ihrer SSID und den Passwort vornehmen.
Ihre Internetseite mit der entsprechenden URL müssen auch eingetragen werden,
natürlich können Sie auch eine in Ihrem Netzwerk verwenden.

Temperatursensor:
Für den Temperatursensor verwenden wir am besten den Pin 2 (per Definition).

  // ### SERIAL
    Serial.begin(115200); // Serielle Verbindung aufbauen
    Serial.println();
    Serial.println("Starte Setup"); 

Debugging:
Für das Debugging und des Programmzustand, wurden viele Serial.print ausgaben verwendet, die im Serieller Monitor unter Werkzeuge ausgegeben werden kann.


Datenübergabe auf den Webserver mit PHP


Die Datenübergabe wird mit einem Parameter durchgeführt, wie im temp_ins_www.ino zu sehen ist.
input.php?t=12,34
Für diese Aufgabe schreiben wir uns eine PHP-Datei für die wir auf den Webserver wie im Beispiel unter /projekt/input.php ablegen. Diese input.php wird im ersten Schritt nur die Temperaturwerte in eine Textdatei speichern, die dann in einer weiteren Webseite für die Ausgabe verwendet werden kann.
input.php:
<?php
  $Temperatur = $_GET["t"];
  $datei = fopen("daten.txt","w");
  echo fwrite($datei,$Temperatur,100);
  fclose($datei);
?>

Für das kurze Beispiel muss die daten.txt von Hand angelegt werden und im selben Verzeichnis wie die input.php liegen. Geben Sie der daten.txt die benötigten schreib und lese Rechte, damit Sie auch vom Webserver beschrieben werden kann.

Die Ausgabe der Daten (Temperatur) könnte in einer Webseite wie folgt aussehen:
<?php
  $Temperatur = file_get_contents('daten.txt');
  echo $Temperatur, " °C";
?>

Die Ausgabe im Seriellen Monitor ohne Fehler sollte so ausschauen,
bei Fehlern helfen die Ausgaben ungemein, das Problem zu analysieren und zu beseitigen.
Starte Setup

Versuche mich mit dem folgenden Wifi zu verbinden: wulff.......
WiFi Uplink laeuft
Hier ist meine lokale IP-Adresse: 192.168.178.42
Verbinden mit: m-wulff.de
URL Aufruf : /esp8266/input.php?t=19.87
Website wurde aufgerufen, Verbindung schliessen
Aktuelle Temperatur ist: 19.87 Grad Celsius 
--- Jetzt muss ich ein Nickerchen machen ---
Verbinden mit: m-wulff.de
URL Aufruf : /esp8266/input.php?t=19.94
Website wurde aufgerufen, Verbindung schliessen
Aktuelle Temperatur ist: 19.94 Grad Celsius 
--- Jetzt muss ich ein Nickerchen machen ---

Wie nicht anders zu erwarten, steht die Temperatur im Seriellen Monitor und in der daten.txt noch der Wert -127.00. Der Sensor fehlt noch.
Wenn der Sensor angeschlossen ist, werden auch realistische Werte angezeigt. Sollten Fehlermeldung auftauchen, können diese mit deren Hilfe beseitigt werden!
An alle relevanten Stellen sind Meldungen vorhanden und mit Kommentaren wurde nicht gegeizt,
viel Erfolg!!!


Grundschaltplan mit oneWire vom ESP8266-01


OneWire


Im Betrieb vom ESP8266-01


Betrieb


Projektbild


Projektbild


Stromverbrauch senken


deep sleep
Der Stromverbrauch des ESP's kann stark gesenkt werden, wenn der Reset Pin mit dem GPIO16 PIN verbunden wurde. Leider ist der Pin GPIO16 beim ESP-01 nicht auf herrausgeführt worden und meine Lötkünste haben nicht ausgereicht, den Anschluss sicher zu verbinden.
Einige ESP's besitzen diesen Anschluss, auch der ESP8285 ESP-M3 (klein aber fein ohne Schnickschnack für den Dauerbetrieb).

Stromaufnahme in verschiedenen Modi
Während Deep Sleep 16uA (0,016mA)
Aufwachen nach WAKE_RF_DISABLED 13mA
Aufwachen alle anderen 70mA
Mit Abgeschalteten Radio Modul (forceSleepBegin()) 16mA

Leuchtdiode
Die rote Leuchtdiode kann aber für den Dauerbetrieb immer entfernt werden, was auch schon was bringt.


Stromversorgung


Solarzellen mit Akku
Für die autarke Stromversorgung habe ich mich für eine kostengünstige, fast fertige Lösung entschieden mit einem gewissen mehr Wert. Die Solarleuchte mit Bewegungsmelder von LIVARNOLUX (IAN 282514 für 9,90 Euro) hat 3 austauschbare Akkus mit 1,2V. Die gelieferte Spannung von 3,6 liegt bei Sonneneinstrahlung bis zu 4,5V welches eine Spannungsregelung erforderlich macht.
Da die gelieferte Spannung mit nur 0,3V über die 3,3V liegt und bei schlechter Sonneneinstrahlung die Spannung auch noch tiefer fallen wird, habe ich mich für einen HT7333 entschieden.

  HT7333
    + Fûr Batteriebetrieb geigend
    + Mindestspannung ist 3,3V+0,09V=3,39V
    + Geringe Eigenverbrauch (4uA)
      10uF Siebkondensator laut Datenblatt verwenden.
    - Beim 12V wird Ptot überschritten
    - Strombelastung liegt an der Grenze Imax 250mA

In meinem Versuchsaufbau hat der ESP8266-01 von 2,8V bis 3,6V gut gearbeitet (mit Sensor). Wie zu erwarten war, hängte sich der ESP bei zu geringer Spannung auf und konnte nur noch durch Reset der Stromversorgung zum Leben erweckt werden.
(Eine Überwachung des Systems sollte angedacht werden, sowie ein Resettaster an der Stronmversorgung)


Statische grafische Aufgabe


Für die Statische Ausgabe ist canvas-gauges.com gut geeignet. Die ansprechenden Grafiken sind sehr gut dokumentiert und bieten einen weiten Einsatzbereich.
Es gibt sehr viele Seiten die sich mit canvas-gauges beschäftigen. Das Beispiel wurde ohne dynamischer Anzeige erstellt, da es für eine Startseite wirklich nicht benötigt wird. Das verwendete gauge.min.js ist im Beispiel enthalten.
In der Grafikgestaltung kann sich jeder nach Herzenslust austoben.

Termometer       Die lineare Version Beispiel,
Quelltext HTML.
      Termometer       Die runde Version Beispiel,
Quelltext HTML.


Seitenanfang