INHOUDSOPGAWE:

ESP8266: Hoe om temperatuur en humiditeit te monitor: 12 stappe
ESP8266: Hoe om temperatuur en humiditeit te monitor: 12 stappe

Video: ESP8266: Hoe om temperatuur en humiditeit te monitor: 12 stappe

Video: ESP8266: Hoe om temperatuur en humiditeit te monitor: 12 stappe
Video: How to use DHT11 DHT22 with NodeMCU ESP8266 to read temperature over WiFi - IoT 2024, Julie
Anonim
Image
Image
Vergadering
Vergadering

In die tutoriaal van vandag gebruik ons 'n ESP-01, die ESP8266 in konfigurasie 01 (met slegs 2 GPIO), vir temperatuur- en humiditeitsmetings van die DHT22-sensor. Ek sal u 'n elektriese skema en die ESP -programmeergedeelte met 'n Arduino wys. Die voorbeeld is eenvoudig, maklik om te verstaan, en bevat ook die PDF wat in die video gebruik word om dit makliker te maak.

In die ontwerp het ons dan die ESP01, die bron wat 110 of 220 in 5 volt omskakel, 'n spanningsreguleerder van 3v3 en die DHT22, wat die sensor is. Op die slimfoonskerm sal u die plaaslike IP -adres hê, benewens die JavaScript -kode wat deur die ESP verskaf word. Hierdie skerm ontvang dus die parameters van temperatuur en humiditeit en druk hierdie waardes af, wat elke vyf sekondes bygewerk word. Om dit te kan doen, het u geen programme op telefone en tablette nodig nie, en dit geld vir beide die Android -bedryfstelsel en IOS.

Stap 1: Montering

Die elektriese skema is redelik eenvoudig, net soos die gedeelte oor die samestelling, wat die ESP01 as bediener betrek. Die ESPO1 word geprogrammeer asof dit 'n Arduino is: deur die C -taal. Ek wys daarop dat 'n deel van die kode uit die blaaier gedruk word. Dit beteken dat dit JavaScript -kode na die blaaier stuur. Hieronder sal ek beter verduidelik hoe dit werk.

Terug na die bedradingsdiagram, plaas ek 'n 5-volt-skakelaar wat gekoppel is aan 'n 3v3 spanningsreguleerder om die ESP01 aan te dryf. Ons het nog steeds die DHT22 met vier penne. Een hiervan, data, word nie gebruik nie. Dit verg egter 'n optrekweerstand.

Stap 2: Kode

Die eerste stap is om die libs wat ons sal gebruik, in te sluit. Die DHT lib kan bygevoeg word deur die Skets opsie> Sluit biblioteek in> Bestuur biblioteke …

Soek in die venster wat oopmaak die DHT -sensorbiblioteek.

Daarna het ons 'n veranderlike van die tipe ESP8266WebServer geskep wat ons bediener sal wees en sal reageer op HTTP -versoeke (poort 80).

Ons skep ook 'n DHT -veranderlike met parameters 0 (wat die GPIO -pen 0 is) en die tipe (in ons geval DHT22).

#include #include #include #include // Criamos uma variabele do tipo ESP8266WebServer que yes possui funções // que auxiliam na criação das rotas que o ESP8266 and responder ESP8266WebServer server (80); // Verskeie tip vir DHT wat moontlik funksies kan hê vir die beheer van ons/ons/ons toestemming gee om 'n temperatuur vir 'n maksimum van DHT (0, DHT22);

Stap 3: Opstel

In die opstelling sal ons die reeks slegs initialiseer sodat ons 'n logboek het. Dit sal plaasvind as die ESP8266 via die reeks aan die rekenaar gekoppel is om die seriële monitor te gebruik.

Ons laat die ESP8266 aan ons netwerk koppel. In ons geval gebruik ons die netwerk TesteESP met die wagwoord 87654321, maar u sal dit moet verander volgens die netwerk wat u gebruik.

// Inisieer 'n Serial apenas caso esteja com van ESP8266 conectado ao computador pela serla queira ter um log // para facilitar saber o que está acontecendo com o ESP8266 Serial.begin (115200); // Instrução para o ESP8266 se conectar à rede. // No nosso caso o nome da rede é TesteESP e a senha é 87654321. // Você deve alterar com as informações da sua rede WiFi.begin ("TesteESP", "87654321"); // Terugvoer kan gebruik word van monitor Serial Serial.println (""); Serial.print ("Conectando");

Ons wag totdat die ESP8266 met die netwerk verbind is, en nadat dit verbind is, stuur ons die netwerkinstellings. Verander volgens u netwerk.

// Esperamos até que o módulo se conecte à rede while (WiFi.status ()! = WL_CONNECTED) {delay (500); Serial.print ("."); } // Konfigurasies vir IP -oplossing. Você pode alterar conforme a sua rede IPAddress ip (192, 168, 3, 11); IPAddress -poort (192, 168, 3, 1); IPAddress -subnet (255, 255, 255, 0); Serial.print ("Configurando IP fixo para:"); Serial.println (ip); // Maak 'n konfigurasie van WiFi.config (ip, gateway, subnet);

Die volgende opdragte is slegs in die geval dat u ESP8266 via die reeks aan die rekenaar gekoppel het, sodat u terugvoer van die Serial Monitor kan kry.

U kan die IP wat die ESP8266 ontvang het, nagaan om te sien of dit dieselfde is as in die instellings.

// Mostramos no Monitor Serial o ip com o qual o esp8266 se conectou para ver se está de acordo com o que configuramos Serial.println (""); Serial.println ("Connectado"); Serial.print ("IP:"); Serial.println (WiFi.localIP ());

Hier begin ons definieer watter funksies vir elke versoek uitgevoer sal word.

In die onderstaande instruksie, elke keer dat ESP8266 'n HTTP -versoek van die tipe GET in die pad / temperatuur ontvang, word die getTemperature -funksie uitgevoer.

// Ons definimos qual a função será executada para o caminho e tipo dado. // Nesse caso quando houver uma requisição http do tipo GET no caminho https://192.168.2.8/temperature // (pode ser outro ip dependendo da sua configuração) a função getTemperature será executada server.on ("/temperature", HTTP_GET, getTemperature);

In hierdie ander verklaring, elke keer dat ESP8266 'n HTTP -versoek van die tipe GET in die pad / humiditeit ontvang, word die getHumidity -funksie uitgevoer.

// Nesse outo caso quando houver uma requisição http do tipo GET no caminho https://192.168.2.8/humidity // (pode ser outro ip dependendo da sua configuração) a função getHumidity será executada server.on ("/humiditeit", HTTP_GET, getHumidity);

In hierdie instruksie, elke keer dat ESP8266 'n HTTP -versoek van die tipe GET in die pad / monitor ontvang, word die funksie showMonitor uitgevoer.

Die showMonitor -funksie is verantwoordelik vir die terugkeer van die belangrikste html wat die waardes van temperatuur en humiditeit sal vertoon.

// Nesse caso quando houver uma requisição http do tipo GET no caminho https://192.168.2.8/monitor // (pode ser outro ip dependendo da sua configuração) a função showMonitor será executada. // Esta função retornará a página principal que mostrará os valores // da temperatura e da umidade and recarregará essas informaçeses of tempos em tempos server.on ("/monitor", HTTP_GET, showMonitor);

Hier is die funksie -definisie wat uitgevoer moet word as die aangevraagde pad nie gevind word nie.

// Ons kan 'n funksionele funksie vir ons doen om 'n kliënt te vra wat ons nodig het om die bediener te registreer.onNotFound (onNotFound);

Hier initialiseer ons ons bediener wat ons voorheen op poort 80 verklaar het.

Dit is die einde van die opstelling.

// Inisieer die bediener wat op 80 bedieners begin. (); Serial.println ("Servidor HTTP iniciado"); }

Stap 4: Lus

Danksy die lib ESP8266WebServer hoef ons nie na te gaan of daar kliënte is en wat die versoekpad is nie. Ons hoef net handleClient () te bel, en die voorwerp sal kyk of 'n kliënt versoeke rig en na die ooreenstemmende funksie wat ons voorheen geregistreer het, herlei.

void loop () {// Verifica se há alguma requisição de algum cliente server.handleClient (); }

Stap 5: Versoek nie gevind nie

Dit is die funksie wat ons voorheen aangemeld het om uit te voer wanneer die kliënt versoeke rig wat nie geregistreer is nie.

Die funksie gee slegs kode 404 terug (standaardkode vir wanneer 'n bron nie gevind word nie), die gegewe tipe tipe (in die geval van gewone teks) en 'n teks met die woorde "Nie gevind nie."

// Função que definimos para ser chamada quando o caminho requisitado não foi registrado void onNotFound () {server.send (404, "text/plain", "Not Found"); }

Stap 6: Terugkeer van die temperatuur

Dit is die funksie wat 'n json met die temperatuurdata sal teruggee wanneer die kliënt 'n GET -versoek by / temperatuur doen.

// Função que definimos que será executada quando o cliente fizer uma requisição // do tipo GET no caminho https://192.168.2.8/temperature (pode ser outro ip dependendo da sua configuração) void getTemperature () {// Fazemos a leitura da temperatuura através do módulo dht float t = dht.readTemperature (); // Cria um json com os dados da temperatura String json = "{" temperature / ":"+String (t)+"}"; // Envia o json para o cliente com o código 200, que é o código quando a requisição foi realizada com sucesso server.send (200, "application/json", json); }

Stap 7: Terugkeer van humiditeit

Dit is die funksie wat 'n json met die vogdata sal teruggee wanneer die kliënt 'n GET -versoek in / humiditeit doen.

// Função que definimos que será executada quando o cliente fizer uma requisição // do tipo GET no caminho https://192.168.2.8/humidity (pode ser outro ip dependendo da sua configuração) void getHumidity () {// Fazemos a leitura da umidade através do módulo dht float h = dht.readHumidity (); // Cria um json com os dados da umidade String json = "{" humiditeit / ":"+String (h)+"}"; // Envia o json para o cliente com o código 200, que é o código quando a requisição foi realizada com sucesso server.send (200, "application/json", json); }

Stap 8: HTML

Dit is die funksie wat die html sal teruggee wanneer die kliënt toegang / monitor kry. Hierdie bladsy sal die temperatuur- en humiditeitswaardes wys, en dit sal die data van tyd tot tyd herlaai. Die deel wat tussen en en styl is>

definieer die voorkoms van die bladsy, en u kan dit verander soos u wil.

// Funksies wat definitief kan wees vir die uitvoer van ons klante vir die vereiste // om 'n tip te kry, kry geen 192.168.2.8/monitor nie "" ""

"DHT -monitor"

"liggaam"

"opvulling: 35px;"

"agtergrondkleur: #222222;" "}"

Stap 9: Voortgesette HTML -styl

"h1 {" "kleur: #FFFFFF;" "font-familie: sans-serif;" "}" "p {" "kleur: #EEEEEE;" "font-familie: sans-serif;" "lettergrootte: 18 px;" "}" ""

Hier het ons die belangrikste deel van html. Ons bevat twee paragrawe wat die temperatuur en die humiditeit aandui. Gee aandag aan die id's van die paragrawe, want dit is deur hulle dat ons hierdie paragrawe sal herstel om die waardes van temperatuur en humiditeit na die vereistes in te voer.

DHT -monitor

Temperatuur:

Humiditeit:

Stap 10: JavaScript

Hier begin ons die skrif definieer wat van tyd tot tyd die waardes van temperatuur en humiditeit sal lees. Die refresh () -funksie noem die refreshTemperature () en refreshHumdity () funksies, en setInterval noem die opdateringsfunksie elke 5000 millisekondes (5 sekondes).

"verfris();" "setInterval (verfris, 5000);" "funksie refresh ()" "{" "refreshTemperature ()" "refreshHumidity ();" "}"

Die funksie refreshTemperature () rig 'n versoek by / temperatuur, ontleed die inligting in json en voeg die id -temperatuur by tot die paragraaf.

"funksie refreshTemperature ()" "{" "var xmlhttp = nuwe XMLHttpRequest ();" "xmlhttp.onreadystatechange = function () {" "if (xmlhttp.readyState == XMLHttpRequest. DONE && xmlhttp.status == 200) {" "document.getElementById ('temperature'). innerHTML = 'Temperature:' + JSON. ontleed (xmlhttp.responseText).temperatuur + 'C'; " "}" "};" "xmlhttp.open ('GET', 'https://192.168.2.8/temperature', waar);" "xmlhttp.send ();" "}"

Die funksie refreshHumidity () rig 'n versoek aan / humiditeit, ontleed die inligting in json en voeg die id -humiditeit by die paragraaf. En daarmee maak ons klaar met die html wat ons in die versoeke sal stuur / monitor.

"funksie refreshHumidity ()" "{" "var xmlhttp = nuwe XMLHttpRequest ();" "xmlhttp.onreadystatechange = function () {" "if (xmlhttp.readyState == XMLHttpRequest. DONE && xmlhttp.status == 200) {" "document.getElementById ('humiditeit'). innerHTML = 'Humidity:' + JSON. ontleed (xmlhttp.responseText). humiditeit + '%'; " "}" "};" "xmlhttp.open ('GET', 'https://192.168.2.8/humidity', waar);" "xmlhttp.send ();" "}"

"";

Stap 11: Voltooi ShowMonitor

Noudat die string met die html wat ons sal stuur gereed is, kan ons dit na die kliënt stuur. Dit voltooi die showMonitor -funksie en die kode.

// Envia o html para o cliente com o código 200, que é o código quando a requisição foi realizada com sucesso server.send (200, "text/html", html); }

Stap 12: Toets

Toets
Toets

Maak nou u blaaier oop en voer https://192.168.2.8/monitor in (u benodig moontlik 'n ander IP, afhangende van u opset).

Aanbeveel: