Sadržaj:

ESP8266: Kako pratiti temperaturu i vlažnost: 12 koraka
ESP8266: Kako pratiti temperaturu i vlažnost: 12 koraka

Video: ESP8266: Kako pratiti temperaturu i vlažnost: 12 koraka

Video: ESP8266: Kako pratiti temperaturu i vlažnost: 12 koraka
Video: Программирование модуля датчика температуры и влажности ESP8266 ESP01 DHT11 | удаленныйXY | ФЛПрог 2024, Studeni
Anonim
Image
Image
Skupština
Skupština

U današnjem vodiču koristit ćemo ESP-01, koji je ESP8266 u konfiguraciji 01 (sa samo 2 GPIO), za očitanje temperature i vlažnosti osjetnika DHT22. Pokazat ću vam električnu shemu i dio programiranja ESP -a s Arduinom. Primjer je jednostavan, lako razumljiv, a dolazi i s PDF -om koji se koristi u videu za pomoć pri sastavljanju.

U dizajnu imamo zatim ESP01, izvor koji pretvara 110 ili 220 u 5 volti, regulator napona od 3v3 i DHT22, koji je senzor. Na ekranu pametnog telefona imat ćete lokalnu IP adresu pored JavaScript koda koji pruža ESP. Ovaj će zaslon stoga primiti parametre temperature i vlažnosti i ispisat će te vrijednosti koje će se ažurirati svakih pet sekundi. Da biste to učinili, neće vam trebati nikakve aplikacije na telefonima i tabletima, a to se odnosi i na Android OS i IOS.

Korak 1: Montaža

Električna shema je vrlo jednostavna, kao i dio o sklopu, koji će uključivati ESP01 kao poslužitelj. ESPO1 će biti programiran kao da je Arduino: kroz jezik C. Ističem da se dio koda ispisuje iz preglednika. To znači da šalje JavaScript kod pregledniku. U nastavku ću bolje objasniti kako to funkcionira.

Vraćajući se na shemu ožičenja, stavio sam 5-voltni prekidač povezan na regulator napona 3v3 za napajanje ESP01. Još uvijek imamo DHT22 s četiri pina. Jedan od njih, podaci, se ne koristi. Međutim, potreban je pull up otpornik.

Korak 2: Kodiranje

Prvi korak je uključiti libove koje ćemo koristiti. DHT lib može se dodati opcijom Sketch> Include Library> Manage Libraries …

U prozoru koji se otvori potražite knjižnicu DHT senzora.

Nakon toga smo stvorili varijablu tipa ESP8266WebServer koja će biti naš poslužitelj i odgovarat će na HTTP zahtjeve (port 80).

Također stvaramo DHT varijablu s parametrima 0 (što je GPIO pin 0) i tipom (u našem slučaju DHT22).

#include #include #include #include // Criamos uma variável do tipo ESP8266WebServer que já possui funções // que auxiliam na criação das rotas que o ESP8266 vai responder ESP8266WebServer server (80); // Variável do tipo DHT que possui funções para controlarmos o módulo dht // allowindo ler a temperature e a umidade DHT dht (0, DHT22);

Korak 3: Postavljanje

U postavkama ćemo pokrenuti serijski broj samo tako da imamo zapisnik. To će se dogoditi ako je ESP8266 spojen na računalo putem serijskog monitora za korištenje serijskog monitora.

Omogućit ćemo da se ESP8266 poveže s našom mrežom. U našem slučaju koristimo mrežu TesteESP sa lozinkom 87654321, ali to ćete morati promijeniti ovisno o mreži koju koristite.

// Inicialize a Serial apenas caso esteja com o ESP8266 conectado ao computador pela serla queira ter um log // para facilitar sabre o que está acontecendo com o ESP8266 Serial.begin (115200); // Instrução para o ESP8266 se povezuje à 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"); // Povratne informacije caso esteja usando o Monitor Serial Serial.println (""); Serial.print ("Conectando");

Čekamo da se ESP8266 spoji na mrežu, a nakon povezivanja šaljemo mrežne postavke. Promijenite ovisno o vašoj mreži.

// Esperamos até que o módulo se conecte à rede while (WiFi.status ()! = WL_CONNECTED) {delay (500); Serial.print ("."); } // Konfiguracije za IP popravke. Você pode alterar conforme a sua rede IPAddress ip (192, 168, 3, 11); IPAddress pristupnik (192, 168, 3, 1); Podmreža IPAddress (255, 255, 255, 0); Serial.print ("Konfiguracija IP popravka para:"); Serijski.println (ip); // Omogućite konfiguraciju WiFi.config (ip, pristupnik, podmreža);

Sljedeće naredbe su samo u slučaju da imate ESP8266 spojen na računalo putem serijske jedinice, tako da imate povratnu informaciju od serijskog monitora.

Možete provjeriti IP koji je ESP8266 primio da vidite je li isti kao u postavkama.

// Mostramos no Monitor Serial o ip com o qual o esp8266 se povezuje s verzijom está de acordo com o que konfiguracije Serial.println (""); Serial.println ("Connectado"); Serial.print ("IP:"); Serial.println (WiFi.localIP ());

Ovdje počinjemo definirati koje će se funkcije izvršavati za svaki zahtjev.

U donjim uputama, svaki put kad ESP8266 primi HTTP zahtjev tipa GET u putanji / temperaturi, izvršit će se funkcija getTemperature.

// Aqui 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 out out ip dependendo da sua configuração) funckão getTemperature será executada server.on ("/temperature", HTTP_GET, getTemperature);

U ovoj drugoj izjavi, svaki put kad ESP8266 primi HTTP zahtjev tipa GET u putanji / vlažnosti, izvršit će se funkcija getHumidity.

// 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á izvršni server.on ("/vlažnost", HTTP_GET, getHumidity);

U ovoj uputi, svaki put kad ESP8266 primi HTTP zahtjev tipa GET na putanji / monitoru, izvršit će se funkcija showMonitor.

Funkcija showMonitor odgovorna je za vraćanje glavnog html -a koji će prikazati vrijednosti temperature i vlažnosti.

// 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 i rearregará essas informações de tempos em tempos server.on ("/monitor", HTTP_GET, showMonitor);

Ovdje je definicija funkcije koju treba izvršiti kada tražena staza nije pronađena.

// Aqui definimos qual função será executada caso o caminho que o cliente requisitou não tenha sido registdo server.onNotFound (onNotFound);

Ovdje inicijaliziramo naš poslužitelj koji smo prethodno deklarirali na portu 80.

Ovo je kraj postavljanja.

// Pokretanje poslužitelja na poslužitelju na porti 80 server.begin (); Serial.println ("Servisor HTTP iniciado"); }

Korak 4: Petlja

Zahvaljujući lib ESP8266WebServer, ne moramo u petlji provjeravati postoje li klijenti i koja je staza zahtjeva. Trebamo samo pozvati handleClient (), a objekt će provjeriti radi li neki klijent bilo kakve zahtjeve i preusmjerit će se na odgovarajuću funkciju koju smo prethodno registrirali.

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

Korak 5: Zahtjev nije pronađen

Ovo je funkcija koju smo prethodno prijavili za izvršavanje kada klijent postavlja zahtjeve koji nisu registrirani.

Funkcija vraća samo kôd 404 (zadani kôd kada resurs nije pronađen), vrstu podataka koja se vraća (u slučaju običnog teksta) i tekst s riječima "Nije pronađeno".

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

Korak 6: Vraćanje temperature

Ovo je funkcija koja će vratiti json s podacima o temperaturi kada klijent podnese GET zahtjev na / temperature.

// 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 temperatura 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); }

Korak 7: Vraćanje vlažnosti

Ovo je funkcija koja će vratiti json s podacima o vlažnosti kada klijent podnese GET zahtjev u / vlažnosti.

// 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 = "{" vlažnost / ":"+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); }

Korak 8: HTML

Ovo je funkcija koja će vratiti html kada klijent ode na pristup / monitor. Ova će stranica prikazati vrijednosti temperature i vlažnosti i povremeno će učitavati podatke. Dio koji je između i i stila>

definira izgled stranice i možete je promijeniti po želji.

// Função que definimos que será executada quando o cliente fizer uma requisição // do tipo GET no caminho https://192.168.2.8/monitor (pode ser outro ip dependendo da sua configuração) void showMonitor () {String html = "" "" ""

"DHT monitor"

"tijelo{"

"padding: 35px;"

"background-color: #222222;" "}"

Korak 9: Nastavak HTML stila

"h1 {" "boja: #FFFFFF;" "font-family: sans-serif;" "}" "p {" "boja: #EEEEEEE;" "font-family: sans-serif;" "font-size: 18px;" "}" """

Ovdje imamo glavni dio html -a. U njemu imamo dva odlomka koji će pokazivati temperaturu i vlažnost. Obratite pažnju na identifikatore paragrafa jer ćemo putem njih oporaviti ove odlomke kako bismo unijeli vrijednosti temperature i vlažnosti nakon zahtjeva.

DHT monitor

Temperatura:

Vlažnost:

Korak 10: JavaScript

Ovdje počinjemo definirati skriptu koja će s vremena na vrijeme čitati vrijednosti temperature i vlažnosti. Funkcija refresh () poziva funkcije refreshTemperature () i refreshHumdity (), a setInterval poziva funkciju osvježavanja svakih 5000 milisekundi (5 sekundi).

"osvježiti();" "setInterval (osvježi, 5000);" "function refresh ()" "{" "refreshTemperature ()" "refreshHumidity ();" "}"

Funkcija refreshTemperature () šalje zahtjev na / temperature, analizira podatke sadržane u jsonu i dodaje u odlomak id temperaturu.

"function refreshTemperature ()" "{" "var xmlhttp = novi XMLHttpRequest ();" "xmlhttp.onreadystatechange = function () {" "if (xmlhttp.readyState == XMLHttpRequest. DONE && xmlhttp.status == 200) {" "document.getElementById ('temperatura'). innerHTML = 'Temperatura:' + JSON. raščlaniti (xmlhttp.responseText).temperature + 'C'; " "}" "};" "xmlhttp.open ('GET', 'https://192.168.2.8/temperature', true);" "xmlhttp.send ();" "}"

Funkcija refreshHumidity () šalje zahtjev za / vlažnost, analizira podatke sadržane u jsonu i dodaje u odlomak id vlažnosti. Time završavamo html koji ćemo poslati u zahtjevima u / monitoru.

"function refreshHumidity ()" "{" "var xmlhttp = new XMLHttpRequest ();" "xmlhttp.onreadystatechange = function () {" "if (xmlhttp.readyState == XMLHttpRequest. DONE && xmlhttp.status == 200) {" "document.getElementById ('vlažnost'). innerHTML = 'Vlažnost:' + JSON. raščlaniti (xmlhttp.responseText).humidity + '%'; " "}" "};" "xmlhttp.open ('GET', 'https://192.168.2.8/humidity', true);" "xmlhttp.send ();" "}"

"";

Korak 11: Dovršavanje programa ShowMonitor

Sada kada je niz s html -om koji ćemo poslati spreman, možemo ga poslati klijentu. Time je dovršena funkcija showMonitor i kôd.

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

Korak 12: Testiranje

Testiranje
Testiranje

Sada otvorite svoj preglednik i unesite https://192.168.2.8/monitor (možda će vam trebati drugačiji IP, ovisno o vašoj konfiguraciji).

Preporučeni: