ESP8266 WiFi Project – Temperatuur- en luchtvochtigheidssensor
Project door:
Hannes Beem
FTDI Programmer
De FTDI Programmer gebruiken we om het programma op de ESP-01 te flashen.
Om de FTDI Programmer te kunnen gebruiken met de Arduino IDE is een driver nodig.
Klik hier voor de driver download pagina.
DHT22 (mag ook de DHT11 zijn)
De DHT22 is het grote broertje van de DHT11. De DHT22 heeft een groter bereik in temperatuur en luchtvochtigheid in vergelijking met de DHT11.
Klik hier voor de specificaties. Download hier de library.
ESP-01
De ESP-01 is een draadloze module gebaseerd op de ESP8266.
Denk eraan dat je nooit 5v op de ESP-01 zet! De ESP-01 raakt dan defect.
Condensatoren
De 470uF Condensator wordt gebruikt om de spanning te stabiliseren en kan foutmeldingen voorkomen. De 100 nF condensator moet zo kort mogelijk bij de ESP-01 zijn voor stabilisatie.
Voedingsspanning
Zelf gebruik ik een universele adapter die 1 ampere kan leveren bij 3 volt.
De ESP verbruikt continu 300mA, maar kan uitschieters hebben naar 500mA. Zorg ervoor dat je voeding altijd voldoende stroom kan leveren.
Knoppen
Drukknop 1 reset de ESP-01. Om de ESP-01 te kunnen flashen moet de GPIO0 Pin aan de min gekoppeld worden. Door drukknop 2 vast te blijven houden blijft de ESP in Flash modus.
Stabiliteit
De afbeelding voor het aansluiten geeft een breadboard weer, maar het is beter voor de stabiliteit dat de esp op een (experimenteer)printje gesoldeerd wordt. Op een breadboard kan het zo zijn dat de connecties niet altijd goed contact maken en de ESP-01 is gevoelig voor storingen door onderbrekingen in spanning.
Arduino IDE
Voor het flashen gebruik ik de Arduino IDE versie 1.6.5.
De ESP-01 moet nog wel geïnstalleerd worden als je de ESP8266 afgeleide boards nog niet kunt kiezen.
Webpagina Sketch
Nu kunnen we een webpagina genereren die de temperatuur en de luchtvochtigheid weergeeft.
De ESP-01 zal nadat de sketch ge-upload (knop 2 vasthouden) is en je de ESP-01 ge-herstart hebt (Knop 1) contact met je router maken en om een IP-adres vragen.
De DHCP server van je router zal de ESP-01 een IP-adres toekennen.
Dit IP-adres is te zien in de Seriële monitor van de Arduino IDE.
Dit IP-adres typ je in een browser zoals je zou doen wanneer je een webpagina zou bezoeken. Het poortnummer moet er in de volgende vorm -> :8888 achter komen te staan.
Voorbeeld: http://192.168.1.2:8888
Kopieer en plak de sketch in de Arduino IDE voor de ESP-01:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
#include <DHT.h> #include <ESP8266WiFi.h> #define DHTPIN 2 // DHT22 sensor op GPIO pin 2 #define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 // Temperatuur Sensor aanzetten DHT dht(DHTPIN, DHTTYPE); // Netwerknaam en wachtwoord opgeven const char* ssid = "naam van je netwerk hier"; const char* password = "wachtwoord van je netwerk hier"; //WebServer via poort 8888 WiFiServer server(8888); String HTTP_req; // Slaat het HTTP verzoek op void setup() { Serial.begin(115200); // Start Serial, Baud rate 115200 dht.begin(); // Start de DHT sensor // Verbinding maken met de router WiFi.begin(ssid, password); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); // Starting the web server server.begin(); Serial.println("Web server running. Waiting for the ESP IP..."); delay(5000); // Print het IP adres dat de ESP krijgt van de DHCP server Serial.println(WiFi.localIP()); } void loop() { WiFiClient client = server.available(); /************************** * Webpagina * *************************/ if (client) { boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); HTTP_req += c; if (c == '\n' && currentLineIsBlank) { client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: keep-alive"); client.println(); if (HTTP_req.indexOf("ajax_switch") > -1) { GetAjaxData(client); } else { // Verstuur de pagina - bevat een javascript functie die AJAX aanroept client.println("<!DOCTYPE html>"); client.println("<html>"); client.println("<head>"); client.println("<title>DHT Pagina</title>"); // Naam van de webpagina client.println("<script>"); client.println("function GetSwitchAnalogData() {"); client.println("nocache = \"&nocache=\" + Math.random() * 1000000;"); client.println("var request = new XMLHttpRequest();"); client.println("request.onreadystatechange = function() {"); client.println("if (this.readyState == 4) {"); client.println("if (this.status == 200) {"); client.println("if (this.responseText != null) {"); client.println("document.getElementById(\"sw_an_data\")\ .innerHTML = this.responseText;"); client.println("}}}}"); client.println("request.open(\"GET\", \"ajax_switch\" + nocache, true);"); client.println("request.send(null);"); client.println("setTimeout('GetSwitchAnalogData()', 1000);"); client.println("}"); client.println("</script>"); client.println("</head>"); client.println("<body onload=\"GetSwitchAnalogData()\">"); client.println("<h1>DHT Luchtvochtigheid en Temperatuur pagina</h1>"); // Koptekst van de webpagina client.println("<div id=\"sw_an_data\">"); client.println("</div>"); client.println("</body>"); client.println("</html>"); } HTTP_req = ""; break; } if (c == '\n') { currentLineIsBlank = true; } else if (c != '\r') { currentLineIsBlank = false; } } } delay(1); // De webbrowser even de tijd geven om de data te ontvangen client.stop(); // Verbinding sluiten } } void GetAjaxData(WiFiClient cl) { float h = dht.readHumidity(); // De luchtvochtigheid waarde opslaan in float variabele h float t = dht.readTemperature(); // De temperatuur waarde opslaan in float variabele t cl.print("<p>Temperatuur: "); cl.print(t); cl.print(" "); cl.print("C"); cl.println("</p>"); cl.print("<p>Luchtvochtigheid: "); cl.print(h); cl.print(" %"); cl.println("</p>"); } |
Koppel de FTDI programmer via USB en stel onder Tools de Port in.
Druk op de Upload knop en houdt knop 2 vast (druk voor de zekerheid ook een keer kort op knop 1 voor een reset) totdat de Arduino IDE “Done saving” aangeeft.
Open de Seriële monitor en bekijk het IP-adres. Vul deze in je webbrowser in met :8888 erachter.
Blynk
Blynk is een app die je kunt downloaden voor je Android of iOS apparaat.
Met de Blynk app kan je de temperatuur en luchtvochtigheid ook live monitoren.
Om toegang te krijgen tot je Blynk project heb een Authentication Token nodig die de Blynk app voor je aanmaakt wanneer je een nieuw project genereert in de app of wanneer je op de Refresh knop drukt in de app.
Deze code moet terug te vinden zijn op de juiste plaats in de sketch anders zal de app niet samen kunnen werken met je ESP-01.
Kopieer en plak de sketch in de Arduino IDE:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
#include <DHT.h> #define BLYNK_PRINT Serial #include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> #include <SimpleTimer.h> #define DHTPIN 2 // DHT22 sensor op GPIO pin 2 #define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 // Temperatuur Sensor aanzetten DHT dht(DHTPIN, DHTTYPE); float h; float t; // De Authentication Token krijg je van de app. // Ga naar Project Settings (afbeelding van een moer). char auth[] = "Authentication Token hier"; // Plaats hier de Authentication Token SimpleTimer timer; void setup() { Serial.begin(115200); // Start Serial, Baud rate 115200 // Netwerknaam en wachtwoord opgeven Blynk.begin(auth, "Naam van je netwerk hier", "Wachtwoord van je netwerk hier"); dht.begin(); } void loop() { Blynk.run(); // Start Blynk timer.run(); // Start SimpleTimer h = dht.readHumidity(); // De luchtvochtigheid waarde opslaan in float variabele h t = dht.readTemperature(); // De temperatuur waarde opslaan in float variabele t Blynk.virtualWrite(1, t); // Virtuele pin toekennen aan de temperatuur variabele Blynk.virtualWrite(2, h); // Virtuele pin toekennen aan de luchtvochtigheid variabele delay(100); } |
Koppel de FTDI programmer via USB en stel onder Tools de Port in.
Druk op de Upload knop en houdt knop 2 vast (druk voor de zekerheid ook een keer kort op knop 1 voor een reset) totdat de Arduino IDE “Done saving” aangeeft.
Open de Seriële monitor en kijk of de ESP-01 contact maakt met de server van Blynk.
De waarden van de temperatuur en luchtvochtigheid zijn in de Blynk app weer te geven op een van de Widgets. Zoals bijvoorbeeld de “Value Display”, de “Gauge”, of de “LCD Display”.
Een overzicht is te verkrijgen met de Widget “Graph” of de Widget “History Graph”.
Deze Widgets stel je in met de Virtuele pins, in dit geval Virtuele pin 1 voor de temperatuur en Virtuele pin 2 voor de luchtvochtigheid.
In de app kan je het bereik ook instellen onder INPUT, waar je ook de Virtuele pin kiest.