Senden Sie Sensordaten (DHT11 & BMP180) mit einem Arduino ThingSpeak, über Kabel oder WiFi (ESP8266)

5 Schritt:Schritt 1: Hürden und Lösungen Schritt 2: Das Programm Schritt 3: Verbinden Sie mit Hilfe eines Thingspeak ESP8266 WiFi-Modul Schritt 4: Ein Bonus Schritt 5: Mehr auf der ESP8266

Senden Sie Sensordaten (DHT11 & BMP180) mit einem Arduino ThingSpeak, über Kabel oder WiFi (ESP8266)

Ich schrieb diesen instructable weil Thingspeak -nevermind, wie einfach einzurichten Up- hat ein paar Hürden, die ich lief in, und dass, wie aus Reaktionen, andere Menschen mit als auch zu kämpfen.
Dinge, die Sie benötigen:
Arduino
WS5100 EthernetShield
Thingspeak Konto
Sensoren (wie DHT11 und BMP180)
Internetverbindung
Für die WiFi:
ESP8266 WiFi-Modul
Ich wollte, um etwas Wetterdaten mit meinem Arduino sammeln und so schön, dass Graphen zur Verfügung, auf einer Webseite, so konnte ich auch aus der Ferne zu überwachen
Ich konnte ofcourse gerade einen Arduino nutzen als Webserver, aber wenn Sie etwas anderes als auf eine Webseite zu senden Zahlen zu tun wollen, wird die Arduino bald über genügend Arbeitsspeicher ausgeführt.
Es gibt Dienste, verdauen können und Ihre Daten zu veröffentlichen: Pachube, später Xively ist ein bekanntes, aber noch sie eine Warteliste für ihre kostenlose Konten haben. Ehrlich gesagt, habe ich eine Pachube Konto, das Xively Account wurde, aber eben nie keine Ergebnisse auf sie.
Im moment gibt es nur wenige Alternativen für Xively:
http://2lemetry.com
http://exosite.com
https://www.carriots.com
https://www.grovestreams.com
https://thingspeak.com
http://openenergymonitor.org
Ich hob 'Thingspeak'
Da die Registrierung und die Schaffung eines Kanals usw. ist ganz einfach und gut erklärt werde ich nicht zu sehr ins Detail zu gehen, dass der. Im Grunde, nachdem Sie sich anmelden, die Sie erstellen einen Kanal, dem Sie Felder hinzufügen, wo später Sensoren ihre Daten zu senden.
Unter dem Reiter API erhalten Sie eine API, die Sie später in Ihrem Programm kannst.
Ich beschreibe eine simpel Verbindung mit einem Ethernet-Kabel und eine Verbindung über WiFiStep 1: Hürden und Lösungen



Senden Sie Sensordaten (DHT11 & BMP180) mit einem Arduino ThingSpeak, über Kabel oder WiFi (ESP8266)

Senden Sie Sensordaten (DHT11 & BMP180) mit einem Arduino ThingSpeak, über Kabel oder WiFi (ESP8266)

Hurdle 1
Jetzt, wo ein Programm zu finden? ein funktionierendes Beispiel wäre schön, richtig? In der rechten oberen Ecke befindet sich eine Schaltfläche "Support", die zu "Tutorials" gehen wird.
Unter "Tutorials" finden Sie:
"Verwenden eines Arduino + Ethernet-Schild, eine ThingSpeak Senderaktualisierung"
Hört sich gut an, so dass Sie in Ihre IDE downloaden Sie das Programm, fügen Sie die API -Taste und kompilieren Sie es.
Darn .... es tut zu kompilieren, können Sie versuchen, es zu beheben (und das ist durchaus möglich), bis zu einem Punkt kommen, du hast keine Ahnung, was erforderlich sind.
Offenbar das Programm immer noch erwartet, dass alle, die 022 oder 023 IDE verwenden.
Es gibt einen Link zu einer Github Seite aber das wird Programm zu twittern geben ua und das ist nicht, was Sie wollen, zumindest nicht für jetzt.
Lösung
Sie krank ein besseres Programm, um von hier starten:
https: //github.com/iobridge/ThingSpeak-Arduino-Exa ...
Das Programm nimmt eine Lesung aus dem A0-Port und sendet diese auf "Field1" im Datenstrom
Ok, so versuchen Sie, dass, einen variablen Widerstand hängen Sie wie ein LDR oder NTC an Port A0, fügen Sie Ihre API im Programm und führen Sie es.
Das funktioniert gut, aber ich habe den Ball hielt nur einen Wert aus einem Analog-Anschluss lesen wollen, hatte ich eine DHT11 Feuchtigkeit und Temperatursensor sowie ein BMP180 Pressure & Temperatursensor. Ich dachte, es sollte nicht allzu schwierig sein.
Hurdle 2
Ich fügte hinzu, die notwendigen Bibliotheken, um die Thingspeak, fügte die Objekte und lesen Sie die Sensoren in eine Variable.
Die Sensoren haben jedoch schwimmt als Ergebnis und Thinspeak möchte, dass Sie Zeichenfolgen zu senden.
Bei den meisten Variablen ist es ziemlich leicht, sie in einen String mit der einfachen 'string' Funktion drehen, aber es ist nicht, dass für die Schwimmer einfach. Mit Schwimmern Sie die "dtostrf" -Befehl (die ich schätze, steht für "Double-to-String-Funktion" zu nutzen
Der Versuch, Informationen zu dieser Funktion im Internet finden Sie führte mich schnell in endlosen Diskussionen über "wie blöd" war und die Leute Fragen wurden oft gesagt: "Warum würden Sie brauchen, dass Serial.print wird, dass für Sie tun" Ja, stimmt, aber Ich will nicht zu drucken, ich brauche es, weil Thingspeak will.
Lösung
Um die dtostrf Befehl zur Einrichtung einer Pufferraum, wo der String gespeichert werden müssen, zu verwenden. Das geht so:
char t_buffer [10]; <br> t = (ReadSensor); <br> String temp = dtostrf (t, 0,5, t_buffer);
Daß bufferspace ist wichtig. Ich hatte es die Arbeit mit "7" oder "5", aber als ich soeben einen zweiten Sensor, die diese Funktion benötigt, würde meine Datenstrom oder abstürzen und ich habe die verrücktesten Ergebnisse. Ich dachte auch, dass ich die gleiche bufferspace Wechsel für jeden Sensor zu verwenden, aber das auch nicht wirklich zu arbeiten, so jetzt habe ich eine bufferspace für jeden Sensor.
Nun bin ich kein Riss in C, vielleicht gibt es einen besseren Weg, dies zu tun, wenn mir so würde ich lieben, sie zu hören, aber das funktionierte für mich.
Hurdle3
Einmal hatte ich die Zeichenfolge-Konvertierungen, konnte ich die Daten in dem Datenstrom hinzuzufügen.
Die Thingspeak Beispielprogramm zeigt, dass für nur ein Feld, aber es wird deutlich, ziemlich schnell, dass Sie die Zeichenfolgen hinzuzufügen, und werfen in der richtigen Menge an plussesand Et-Zeichen haben.
Lösung
Also für sagen wir 4 verschiedenen Bereichen wird es wie folgt aus:
updateThingSpeak ("field1 =" + Temp + "& Feld2 =" + feuchten + "& field3 =" + pres + "& field4 =" + temp2); Schritt 2: Das Programm


Im Folgenden finden Sie den vollständigen Code finden.
Nur ein paar Anmerkungen:
Die BMP180 ist eine aktualisierte Version des BMP085. Die BMP085 Bibliotheken sind mit dem BMP180 kompatibel.
Adafruit hat 2 Versionen des libray. Ich entschied mich für die Version 1, wie ich fand es einfacher, mit zu arbeiten. Version 2 erfordert auch die Installation der 'Sensor' Bibliothek.
In dem Code präsentiere ich auch einen zusätzlichen float: 'm'. das gibt dem Druck in "mmHg", wie ich havent benutzte es für jetzt gibt es keine String-Konvertierung noch, und es ist nicht auf dem Datenstrom hinzugefügt, aber das Hinzufügen es sollte jetzt so einfach wie 1 + 1
  / *
 Arduino -> ThingSpeak Kanal über Ethernet
 Der Kunde Skizze ThingSpeak für die Arduino und Ethernet ausgelegt.
 Diese Skizze aktualisiert einen Kanal Feed mit ein Analogeingang liest über die
 ThingSpeak API (http://community.thingspeak.com/documentation/)
 mit HTTP POST.  Das Arduino verwendet DHCP und DNS für eine einfachere Netzwerkeinrichtung.
 Die Skizze enthält auch einen Watchdog / Reset-Funktion, um sicherzustellen, dass die
 Arduino bleibt verbunden und / oder wiedererlangt Konnektivität nach einem Netzwerkausfall.
 Verwenden Sie den Serial Monitor auf der Arduino IDE die ausführliche Netzrück sehen
 und ThingSpeak Verbindungsstatus.
 Erste Schritte mit ThingSpeak:
 * Anmeldung für New User Account - <a href="https://www.thingspeak.com/users/new" rel="nofollow"> https://www.thingspeak.com/users/new
 </a>
 * Geben Sie eine MAC-Adresse in dieser Skizze unter "Lokale Netzwerkeinstellungen"
 * Legen Sie einen neuen Kanal, indem Sie Kanäle und erstellen Sie dann Neuer Kanal
 * Geben Sie die Schreib-API Key in dieser Skizze unter "ThingSpeak Einstellungen"
 Arduino Anforderungen:
 * Arduino mit Ethernet-Schild oder Arduino Ethernet
 * Arduino 1,0 IDE
 Netzwerkanforderungen:
 * Ethernet-Anschluss am Router
 * DHCP am Router aktiviert
 * Eindeutige MAC-Adresse für Arduino
 Erstellt: 17. Oktober 2011 von Hans Scharler (http://www.iamshadowlord.com)
 Zusätzliche Credits:
 Beispiel Skizzen aus Arduino-Team, Ethernet von Adrian McEwen
 Hinzugefügt DHT11 / BMP180 zeigten dtostrf Funktion durch diy_bloke 22/11/2014
 * /
 #include <SPI.h>
 #include <Ethernet.h>
 #include <dht11.h>
 #include <Wire.h>
 #include <Adafruit_BMP085.h> // Dies ist die Version 1 Bibliothek
 #define DHT11PIN 4 // Die Temperatur / Feuchte-Sensor
 Adafruit_BMP085 bmp;
 DHT11 DHT11;

 // Lokale Netzwerkeinstellungen
 Byte-mac [] = {0xD4, 0x28, 0xB2, 0xFF, 0xA0, 0xA1};  // Muss eindeutig im lokalen Netzwerk sein
 // ThingSpeak Einstellungen
 char thingSpeakAddress [] = "api.thingspeak.com";
 String writeAPIKey = "REPLACE_THIS_BY_YOUR_API_BUT_KEEP_THE_QUOTES";
 const int updateThingSpeakInterval = 16 * 1000;  // Zeitintervall in Millisekunden, um zu aktualisieren ThingSpeak (Anzahl der Sekunden * 1000 = Intervall)
 // Variable einrichten
 Lang lastConnectionTime = 0;
 boolean lastConnected = false;
 int failedCounter = 0;
 // Initialize Arduino Ethernet Client
 EthernetClient Client;
 Leere setup ()
 {
 // Für die Fehlersuche starten Serien auf der Serial Monitor
 Serial.begin (9600);
 // Ethernet auf Arduino starten
 startEthernet ();
 }
 Leere Schleife ()
 {
 // Lesen Wert von Analogeingang Pin 0
 String analogPin0 = String (analogRead (A0), DEC);
 // Aktualisieren Response to Serial Monitor
 if (client.available ())
 {
 char c = client.read ();
 Serial.print (c);
 }
 // ------ -------- DHT11
 int chk = DHT11.read (DHT11PIN);
 char t_buffer [10];
 char h_buffer [10];
 Schwimmer t = (DHT11.temperature);
 String temp = dtostrf (t, 0,5, t_buffer);
 //Serial.print(temp);
 //Serial.print ("");
 float h = (DHT11.humidity);
 String feuchten = dtostrf (h, 0,5, h_buffer);
 //Serial.println(humid);

 // ----- ----------- BMP180
 bmp.begin ();
             float p = (bmp.readPressure () / 100,0); // dies ist für Druck in Hektopascal
             float m = (bmp.readPressure () / 133,3); // dies ist für Druck in mmHg
             float t2 = (bmp.readTemperature ());
             char P_Puffer [15];
             char t2_buffer [10];
             String pres = dtostrf (p, 0,5, P_Puffer);
             String temp2 = dtostrf (t2,0,5, t2_buffer);
             Serial.println (pres);
  //}
 // ----------------

 // Von ThingSpeak Trennen
 if (! client.connected () && lastConnected)
 {
 Serial.println ("... getrennt");
 Serial.println ();
 client.stop ();
 }
 // Aktualisieren ThingSpeak
 if (! client.connected () && (millis () - lastConnectionTime> updateThingSpeakInterval))
 {
 updateThingSpeak ("field1 =" + Temp + "& Feld2 =" + feuchten + "& field3 =" + pres + "& field4 =" + temp2);
 }
 // Prüfen, ob Arduino Ethernet muss neu gestartet werden
 if (failedCounter> 3) {startEthernet ();}
 lastConnected = client.connected ();
 }
 Leere updateThingSpeak (String tsData)
 {
 if (client.connect (thingSpeakAddress, 80))
 {
 client.print ("POST / update HTTP / 1.1 \ n");
 client.print ("Host: api.thingspeak.com \ n");
 client.print ("Connection: close \ n");
 client.print ("X-THINGSPEAKAPIKEY:" + writeAPIKey + "\ n");
 client.print ("Content-Type: application / x-www-form-urlencoded \ n");
 client.print ("Content-Length:");
 client.print (tsData.length ());
 client.print ("\ n \ n");
 client.print (tsData);
 lastConnectionTime = millis ();
 if (client.connected ())
 {
 Serial.println ("Verbinden mit ThingSpeak ...");
 Serial.println ();
 failedCounter = 0;
 }
 sonst
 {
 failedCounter ++;
 Serial.println ("Verbindung zum ThingSpeak fehlgeschlagen (" + String (failedCounter, DEC) + ")");
 Serial.println ();
 }
 }
 sonst
 {
 failedCounter ++;
 Serial.println ("Verbindung zum fehlgeschlagen ThingSpeak (" + String (failedCounter, DEC) + ")");
 Serial.println ();
 lastConnectionTime = millis ();
 }
 }
 nichtig startEthernet ()
 {
 client.stop ();
 Serial.println ("Anschließen Arduino zu vernetzen ...");
 Serial.println ();
 Verzögerung (1000);
 // Verbindung zum Netzwerk amd eine IP-Adresse über DHCP
 if (Ethernet.begin (Mac) == 0)
 {
 Serial.println ("DHCP fehlgeschlagen, Reset Arduino noch einmal zu versuchen");
 Serial.println ();
 }
 sonst
 {
 Serial.println ("Arduino mit dem Netzwerk mit DHCP");
 Serial.println ();
 }
 Verzögerung (1000);
 }
Schritt 3: Verbinden Sie mit Hilfe eines Thingspeak ESP8266 WiFi-Modul

Senden Sie Sensordaten (DHT11 & BMP180) mit einem Arduino ThingSpeak, über Kabel oder WiFi (ESP8266)

Senden Sie Sensordaten (DHT11 & BMP180) mit einem Arduino ThingSpeak, über Kabel oder WiFi (ESP8266)

Der bisherige präsentiert Internet-Verbindung wurde über ein Kabel. Allerdings gibt es eine billige WiFi-Modul, das zur Verfügung, um auf die Arduino befestigen ist: Das ESP 8266.
Die ESP8266 ist eine billige WiFi-Modul. Bedenken Sie, dass es braucht, 3,3 Volt. Einige Modelle jedoch Anspruch auf 5 Volt tolerant. I 2 zugegeben Schaltungen, die als Spannungswandler verwendet werden könnten.
Die ESP8266 wirklich braucht einen eigenen 3,3-V-Quelle wie die aktuelle, die aus dem Arduino nur nicht es schneiden.
Es gibt jede Menge Informationen, wie Sie das Modul zu verbinden, möchte ich auf die Software zu konzentrieren, um eine Verbindung herzustellen Thingspeak
Die SoftSerial Bibliothek wird für die Fehlersuche gegeben. es ist nicht wirklich notwendig, wenn die progrem funktioniert. Das gleiche gilt für alle print-Anweisungen an die serielle Schnittstelle Software
Ich benutze 3 Analogwerte anstatt ein Beispiel mit dem BMP108 und DHT11 wie erfordert Bibliotheken, so dass die Umsetzung der theESP8266 ist leichter zu verfolgen. Sobald Sie, dass, ist es leicht, andere Sensoren zu implementieren. So stellen Sie sicher, dass Sie alle Ausgaben werden zu einem String
Im Folgenden ein Programm zur Verbindung 3 analoge Sensoren, um über eine ESP8266 Modul Thingspeak:
  // <a Href="https://nurdspace.nl/ESP8266" rel="nofollow"> https://nurdspace.nl/ESP8266
 </a> //http://www.instructables.com/id/Using-the-ESP8266-module/
 //https://www.zybuluo.com/kfihihc/note/31135
 //http://tminusarduino.blogspot.nl/2014/09/experimenting-with-esp8266-5-wifi-module.html
 //http://www.cse.dmu.ac.uk/~sexton/ESP8266/
 //https://github.com/aabella/ESP8266-Arduino-library/blob/master/ESP8266abella/ESP8266aabella.h
 //http://contractorwolf.com/esp8266-wifi-arduino-micro/
 // ************************************************ **********
 #include <SoftwareSerial.h>
 int sensor_temp = A0;
 int value_temp;
 int sensor_light = A1;
 int value_light;
 int sensor_humid = A2;
 int value_humid;


 #define DEBUG FALSE // auskommentieren, um Debug-Mitteil entfernen

 // * - Hardware-Serien
 #define _baudrate 9600

 // * - Software Serien
 //
 #define _rxpin 2
 #define _txpin 3
 SoftwareSerial debug (_rxpin, _txpin);  // RX, TX

 // * - IoT Informationen
 #define SSID "[YOURSSID]"
 #define PASS "[IhrKennwort]"
 #define IP "184.106.153.149" // ThingSpeak IP-Adresse: 184.106.153.149

 // GET / aktualisieren key = [THINGSPEAK_KEY] & field1 = [Daten 1] & Feld2 = [Daten 2] ...?;
 String GET = "GET / aktualisieren key = [ThingSpeak_ (Write) API_KEY]?";

 Leere Setup () {
    Serial.begin (_baudrate);
   debug.begin (_baudrate);

   sendDebug ("AT");
   Verzögerung (5000);
   if (Serial.find ("OK"))
   {
     debug.println ("erhalten: OK \ nData zum Senden bereit!");
     connectWiFi ();
   }

 }

 Leere Schleife () {
   value_temp = analogRead (sensor_temp);
   value_light = analogRead (sensor_light);
   value_humid = analogRead (sensor_humid);
   String temp = String (value_temp); // einen String drehen Integer
   Schnurlicht = String (value_light); // einen String drehen Integer
   String feuchten = String (value_humid); // einen String drehen Integer
   updateTS (Temperatur, Licht, Feuchtigkeit);
   Verzögerung (3000);  //
 }
 // ----- Aktualisieren die Thingspeak String mit 3-Werte
 Leere updateTS (String T, String L, String H)
 {
   // ESP8266 Client-
   String cmd = "AT + CIPSTART = \" TCP \ ", \" "; // Setup TCP-Verbindung
   cmd + = IP;
   cmd + = "\", 80 ";
   sendDebug (cmd);
   Verzögerung (2000);
   if (Serial.find ("Error"))
   {
     Debug.Print ("empfangen: Fehler \ nExit1");
     zurück;
   }

   cmd = GET + "& field1 =" + T + "& Feld2 =" + L + "& field3 =" + H + "\ r \ n";
   Serial.print ("AT + CIPSEND =");
   Serial.println (cmd.length ());
   if (Serial.find (">"))
   {
     Debug.Print (">");
     Debug.Print (cmd);
     Serial.print (cmd);
   }
   sonst
   {
     sendDebug ("AT + CIPCLOSE"); // Nähe TCP-Verbindung
   }
   if (Serial.find ("OK"))
   {
     debug.println ("erhalten: OK");
   }
   sonst
   {
     debug.println ("empfangen: Fehler \ nExit2");
   }
 }

 nichtig sendDebug (String cmd)
 {
   Debug.Print ("senden:");
   debug.println (cmd);
   Serial.println (cmd);
 }

 boolean connectWiFi ()
 {
   Serial.println ("AT + CWMODE = 1"); // WiFi STA-Modus - wenn "3" ist es sowohl Client und AP
   Verzögerung (2000);
   // Connect mit AT + CWJAP = "SSID" Router "Passwort";
   // Prüfen, ob mit AT + CWJAP angeschlossen?
   String cmd = "AT + CWJAP = \" "; // Registriert accespoint
   cmd + = SSID;
   cmd + = "\", \ "";
   cmd + = PASS;
   cmd + = "\" ";
   sendDebug (cmd);
   Verzögerung (5000);
   if (Serial.find ("OK"))
   {
     debug.println ("erhalten: OK");
     return true;
   }
   sonst
   {
     debug.println ("empfangen: Error");
     return false;
   }

   cmd = "AT + CIPMUX = 0"; // Setze Einzelverbindung
   sendDebug (cmd);
   if (Serial.find ("Error"))
   {
     Debug.Print ("empfangen: Error");
     return false;
   }
 }




NOTIZ
In der neuesten Version der Firmware ESP8266 AT + CIOBAUD wird nicht mehr unterstützt und meldet Fehler.
Der Ersatz-Befehl AT + IPR. Sehen Sie hier für weitere Details: - www.esp8266.com/viewtopic.php?f=13&t=718Step 4: einen Bonus


Falls Sie wollen nicht Thingspeak verwenden, aber wollen einfach nur Ihren eigenen Webserver: mit diesem Programm:
  / * 
  * DHT11 Sensor an Pin 2
  <a href="http://arduino-info.wikispaces.com/ethernet-temp-humidity" rel="nofollow"> http: //arduino-info.wikispaces.com/ethernet-temp -...>
  Basierend auf Code von David A. Mellis & Tom Igoe
 Von diy_bloke angepasst
  * Bmp180sensor auf A4 / A5

  * /
 / * ----- (Import benötigten Bibliotheken) ----- * /
 #include <SPI.h>
 #include <Ethernet.h>
 #include <dht11.h>
 #include <Wire.h>
 // # include <Adafruit_Sensor.h>
 // # include <Adafruit_BMP085_U.h>
 #include <Adafruit_BMP085.h>
 / * ----- (Deklarieren von Konstanten und Pin-Nummern) ----- * /
 #define DHT11PIN 2 // Die Temperatur / Feuchte-Sensor

 // Geben Sie eine MAC-Adresse und IP-Adresse für Ihren Controller unten.
 // Die IP-Adresse wird in Abhängigkeit von Ihrem lokalen Netzwerk:
 Byte-mac [] = {
   0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};

 / * ----- (Declare-Objekte) ----- * /
 IPAddress ip (192,168,1, 177);

 // Der Ethernet-Server-Bibliothek initialisieren
 // Mit der IP-Adresse und Port Sie verwenden möchten,
 // (Port 80 ist standardmäßig für HTTP):
 EthernetServer-Server (80);

 // Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified (10085);
 Adafruit_BMP085 bmp;
 DHT11 DHT11;  // Der Sensor Object
 / * ----- (Variablen deklarieren) ----- * /

 Leere setup () / ****** SETUP: läuft einmal ****** /
 {
   // Öffnen der seriellen Kommunikation und warten Port zu öffnen:
   Serial.begin (9600);
   while (! Serial) {
     ;  // Warten, für die serielle Schnittstelle zu verbinden.  Leonardo brauchte nur
   }

   // Starten Sie die Ethernet-Verbindung und den Server:
   Ethernet.begin (mac, ip);
   server.begin ();
   Serial.print (F ("Server ist"));
   Serial.println (Ethernet.localIP ());
 } // - (Ende Setup) ---

 Leere Schleife () / * ---- (LOOP: LÄUFT immer und immer wieder) ---- * /
 {
   // Hört für eingehende Clients
   EthernetClient client = server.available ();
   if (Client) {
     Serial.println (F ("neuer Kunde"));
     // Eine HTTP-Anforderung endet mit einer Leerzeile
     boolean currentLineIsBlank = true;
     while (client.connected ()) {
       if (client.available ()) {
         char c = client.read ();
         Serial.write (c);
         //, Wenn Sie auf das Ende der Zeile bekommen haben (erhielt einen Zeilenumbruch
         // Zeichen) und die Zeile leer ist, die HTTP-Anforderung beendet ist,
         // So dass Sie eine Antwort senden
         if (c == '\ n' && currentLineIsBlank) {
           // Einen Standard http-Antwort-Header zu senden
           client.println ("HTTP / 1.1 200 OK");
           client.println ("Content-Type: text / html");
           client.println ("Connnection: close");
           client.println ();
           client.println ("<! DOCTYPE HTML>");
           client.println ("<html>");
           // Fügen Sie ein Meta-Refresh-Tag, so dass der Browser zieht wieder alle 5 Sekunden:
           client.println ("<meta http-equiv = \" aktualisieren \ "content = \" 5 \ ">");
           client.println ("<head>");
           client.println ("<title>");
           client.println (F ("My Home Environment"));
           client.println ("</ title>");
           client.println ("</ head>");
           client.println ("<body>");
           client.print (F ("<h3> My Home Environment </ h3>"));
           //client.println ("<br />");

           / * ---- (Get Sensormessung, berechnen und ausdrucken) ----------------- * /

           int chk = DHT11.read (DHT11PIN);

           Serial.print (F ("Sensor lesen:"));
           Schalter (chk)
           {
           Bei 0:
             Serial.println (F ("OK"));
             Unterbrechung;
           Bei -1:
             Serial.println (F ("Prüfsummenfehler"));
             Unterbrechung;
           Bei -2:
             Serial.println (F ("Time out error"));
             Unterbrechung;
           Standard:
             Serial.println (F ("Unbekannter Fehler"));
             Unterbrechung;
           }
           / * Holen Sie sich einen neuen Sensor (BMP085) Veranstaltung * /
           // Sensors_event_t Ereignis;
           // Bmp.getEvent (& event);
           // --------------
           client.print (F ("<table style =" border: 1px solid black; background-color: white; ">"));
           client.print (F ("<tr> <td>"));
           client.print ("<font color =" red "> Temperatur </ font> (° C):");
           client.print (F ("</ td> <td align =" richtigen ">"));
           client.println ((float) DHT11.temperature, 1);
           client.println (F ("<br />"));
           client.print (F ("</ td> </ tr>"));
           client.print (F ("<tr> <td>"));
           client.print ("<b> Temperatur </ b> (° F):");
           client.print (F ("</ td> <td align =" richtigen ">"));
           client.println (Fahrenheit (DHT11.temperature), 1);
           client.println ("<br />");
           client.print (F ("</ td> </ tr>"));
           client.print (F ("<tr> <td>"));
           client.print ("<font color =" Blue "> Luftfeuchtigkeit </ font> (%):");
           client.print (F ("</ td> <td align =" richtigen ">"));
           client.println ((float) DHT11.humidity, 0);
           client.println ("<br />");
           client.print (F ("</ td> </ tr>"));
           client.print (F ("<tr> <td>"));
           / *
           client.print ("<b> Temperatur </ b> (K):");
            client.println (Kelvin (DHT11.temperature), 1);
            client.println ("<br />");
            * /
           client.print ("<i> Taupunkt </ i> (° C):");
           client.print (F ("</ td> <td align =" richtigen ">"));
           client.println (Taupunkt (DHT11.temperature, DHT11.humidity));
           client.println ("<br />");
           client.print (F ("</ td> </ tr>"));
           client.print (F ("<tr> <td>"));
           client.print ("<i> Dew PointFast </ i> (° C):");
           client.print (F ("</ td> <td align =" richtigen ">"));
           client.println (dewPointFast (DHT11.temperature, DHT11.humidity));
           client.println ("<br />");
           client.print (F ("</ td> </ tr>"));
           client.print (F ("<tr> <td>"));

           if (! bmp.begin ()) {
             client.print ("geen Sensor");
           }
           sonst
           {
             client.print ("Druck (hPa):");
             client.print (F ("</ td> <td align =" richtigen ">"));
             client.println (bmp.readPressure () / 100,0);
             client.print (F ("</ td> </ tr>"));
             client.print (F ("<tr> <td>"));
             client.print ("Druck (mmHg):");
             client.print (F ("</ td> <td align =" richtigen ">"));
             client.println (bmp.readPressure () / 133,3);
             client.print (F ("</ td> </ tr>"));
             client.print (F ("<tr> <td>"));
             client.println ("Temperatur (° C):");
             client.print (F ("</ td> <td align =" richtigen ">"));
             client.print (bmp.readTemperature ());
             client.println ("<br />");
           }
           client.print (F ("</ td> </ tr>"));
           client.print (F ("</ table>"));
           / * Anzeige der Ergebnisse (Luftdruck ist Maßnahme in hPa) * /

           / * Anzeige Luftdruck in hPa * /
           / * Client.print ("Druck:");
            client.println (event.pressure);
            client.println ("hPa");
            client.println ("<br />");
            * /


           / * -------- (End Sensor lesen) -------------------------------- * /
           client.println ("</ body>");
           client.println ("</ html>");
           Unterbrechung;
         }
         if (c == '\ n') {
           // Sie beginnen eine neue Linie sind
           currentLineIsBlank = true;
         }
         else if (c! = '\ r') {
           // Sie ein Zeichen in der aktuellen Zeile bekommen haben
           currentLineIsBlank = false;
         }
       }
     }
     // Den Webbrowser Zeit, um die Daten zu empfangen geben
     Verzögerung (1);
     // Schließen Sie die Verbindung:
     client.stop ();
     Serial.println (F ("Client disonnected"));
   }
 } // END-Schleife

 / * ----- (Declare Benutzer geschriebenen Funktionen) ----- * /
 //
 // Celsius in Fahrenheit Konvertierung
 Doppel Fahrenheit (Doppel Celsius)
 {
   Rück 1,8 * C + 32;
 }

 // Celsius Kelvin Umwandlung
 Doppel Kelvin (Doppel Celsius)
 {
   Rück Celsius + 273,15;
 }

 // Taupunkt Funktion NOAA
 // Referenz: <a href="http://wahiduddin.net/calc/density_algorithms.htm" rel="nofollow"> http: //arduino-info.wikispaces.com/ethernet-temp -...>
 Doppel Taupunkt (Doppel Celsius, Doppel Luftfeuchtigkeit)
 {
   Doppel A0 = 373,15 / (273,15 + Celsius);
   Doppel SUM = -7,90298 * (A0-1);
   SUM + = 5,02808 * log10 (A0);
   SUM + = -1.3816e-7 * (pow (10, (11,344 * (1-1 / A0))) - 1);
   SUM + = 8.1328e-3 * (pow (10, (- 3,49149 * (A0-1))) - 1);
   SUM + = log10 (1013,246);
   Doppel VP = pow (10, SUM-3) * Luftfeuchte;
   Doppel-T = log (VP / 0,61078);  // Var Temp
   zurück (241,88 * T) / (17,558-T);
 }

 // Delta max = 0,6544 wrt Taupunkt ()
 // 5x schneller als Taupunkt ()
 // Referenz: <a href="http://en.wikipedia.org/wiki/Dew_point" rel="nofollow"> http: //arduino-info.wikispaces.com/ethernet-temp -...>
 Doppel dewPointFast (Doppel Celsius, Doppel Luftfeuchtigkeit)
 {
   Doppel a = 17,271;
   Doppel b = 237,7;
   Doppel temp = (a * Celsius) / (b + C) + log (Feuchte / 100);
   Doppel Td = (b * temp) / (a ​​- temp);
   Rück Td;
 }
 /* ( DAS ENDE ) */



Schritt 5: Mehr auf der ESP8266


Die ESP8266 kann als Standalone-Gerät IoT verwendet werden, ohne einem Arduino.
Es kann von der Arduino IDE programmiert werden, wenn Sie die richtige Karte installiert.
Lesen Sie http: //makezine.com/2015/04/01/installing-building ...
für weitere Informationen