Kazalo:

ESP8266: Kako spremljati temperaturo in vlažnost: 12 korakov
ESP8266: Kako spremljati temperaturo in vlažnost: 12 korakov

Video: ESP8266: Kako spremljati temperaturo in vlažnost: 12 korakov

Video: ESP8266: Kako spremljati temperaturo in vlažnost: 12 korakov
Video: Real-Time IoT Device Monitoring with AskSensors 2024, Julij
Anonim
Image
Image
Montaža
Montaža

V današnjem vodiču bomo za odčitke temperature in vlažnosti senzorja DHT22 uporabili ESP-01, ki je ESP8266 v konfiguraciji 01 (samo z 2 GPIO). Pokazal vam bom električno shemo in programski del ESP z Arduinom. Primer je preprost, razumljiv in vsebuje tudi PDF, uporabljen v videoposnetku za pomoč pri sestavljanju.

V zasnovi imamo potem ESP01, vir, ki pretvori 110 ali 220 v 5 voltov, regulator napetosti 3v3 in DHT22, ki je senzor. Na zaslonu pametnega telefona boste poleg kode JavaScript, ki jo ponuja ESP, imeli še lokalni naslov IP. Ta zaslon bo zato prejel parametre temperature in vlažnosti ter natisnil te vrednosti, ki se bodo posodabljale vsakih pet sekund. Če želite to narediti, ne potrebujete nobenih aplikacij na telefonih in tabličnih računalnikih, kar velja tako za OS Android kot za iOS.

1. korak: Montaža

Električna shema je precej preprosta, prav tako del o sestavi, ki bo vključeval ESP01 kot strežnik. ESPO1 bo programiran kot Arduino: prek jezika C. Poudarjam, da je del kode natisnjen iz brskalnika. To pomeni, da brskalniku pošlje kodo JavaScript. Spodaj bom bolje razložil, kako to deluje.

Če se vrnem na shemo ožičenja, sem za napajanje ESP01 postavil 5-voltni preklopni vir, priključen na napetostni regulator 3v3. Še vedno imamo DHT22 s štirimi zatiči. Eden od teh, podatki, se ne uporablja. Vendar pa potrebuje vlečni upor.

2. korak: Koda

Prvi korak je vključitev lib, ki jih bomo uporabili. Knjižnico DHT lahko dodate z možnostjo Sketch> Include Library> Manage Libraries …

V oknu, ki se odpre, poiščite knjižnico senzorjev DHT.

Po tem smo ustvarili spremenljivko tipa ESP8266WebServer, ki bo naš strežnik in se bo odzvala na zahteve HTTP (vrata 80).

Ustvarimo tudi spremenljivko DHT s parametri 0 (to je pin GPIO 0) in vrsto (v našem primeru 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 strežnik strežnika ESP8266WebServer (80); // Variável do tipo DHT que possui funções para controlarmos o módulo dht // dovoli temperaturo in umidade DHT dht (0, DHT22);

3. korak: Nastavitev

V nastavitvah bomo serijsko zaporedje inicializirali tako, da bomo imeli dnevnik. To se zgodi, če je ESP8266 povezan z računalnikom prek serijske enote za uporabo serijskega monitorja.

ESP8266 bomo povezali z našim omrežjem. V našem primeru uporabljamo omrežje TesteESP z geslom 87654321, vendar ga boste morali spremeniti glede na omrežje, ki ga uporabljate.

// 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); // Navodilo za 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");

Počakamo, da se ESP8266 poveže z omrežjem, in potem ko se poveže, pošljemo omrežne nastavitve. Spremenite glede na svoje omrežje.

// Esperamos até que o módulo se conecte à rede while (WiFi.status ()! = WL_CONNECTED) {delay (500); Serial.print ("."); } // Nastavitve za popravek IP. Pokliči nastavitve, ki ustrezajo naslovu IPAddress ip (192, 168, 3, 11); Prehod IPAddress (192, 168, 3, 1); Podomrežje IPAddress (255, 255, 255, 0); Serial.print ("Konfiguriranje popravka IP para:"); Serial.println (ip); // Omogoči konfiguracijo WiFi.config (ip, prehod, podomrežje);

Naslednji ukazi so samo v primeru, da imate ESP8266 z računalnikom povezan prek serijske enote, tako da imate povratne informacije od serijskega monitorja.

IP, ki ga je prejel ESP8266, lahko preverite, če je enak kot v nastavitvah.

// Mostramos no Monitor Serial o ip com o qual o esp8266 se poveže z različico, ki je está de acordo com o que konfiguracijo Serial.println (""); Serial.println ("Connectado"); Serial.print ("IP:"); Serial.println (WiFi.localIP ());

Tu začnemo definirati, katere funkcije bodo izvedene za vsako zahtevo.

V spodnjih navodilih se bo vsakič, ko ESP8266 prejme zahtevo HTTP tipa GET na poti / temperaturi, izvedla 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 // (nastavite ser outro ip odvisen od konfiguracije sua) funkcijo getTemperature será executada server.on ("/temperature", HTTP_GET, getTemperature);

V tem drugem stavku se bo vsakič, ko ESP8266 prejme zahtevo HTTP tipa GET na poti / vlažnosti, izvedla funkcija getHumidity.

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

V tem navodilu se bo vsakič, ko ESP8266 prejme zahtevo HTTP tipa GET na poti / monitorju, izvedla funkcija showMonitor.

Funkcija showMonitor je odgovorna za vrnitev glavnega HTML -ja, ki prikazuje vrednosti temperature in vlažnosti.

// Nesse caso quando houver uma requisição http do tipo GET no caminho https://192.168.2.8/monitor // (nastavite 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 in recarregará essas informações de tempos em tempos server.on ("/monitor", HTTP_GET, showMonitor);

Tu je definicija funkcije, ki jo je treba izvesti, ko zahtevane poti ni mogoče najti.

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

Tu inicializiramo naš strežnik, ki smo ga prej deklarirali na vratih 80.

To je konec nastavitve.

// Začetek strežnika na porta 80 server.begin (); Serial.println ("Servisor HTTP iniciado"); }

4. korak: Zanka

Zahvaljujoč lib ESP8266WebServer nam ni treba preverjati, ali obstajajo odjemalci in kakšna je pot zahteve. Poklicati moramo samo handleClient () in objekt bo preveril, ali katera od strank poda kakšno zahtevo, in se preusmeril na ustrezno funkcijo, ki smo jo že registrirali.

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

5. korak: Zahteve ni mogoče najti

To je funkcija, ki smo jo prej prijavili za izvajanje, ko odjemalec poda kakršne koli zahteve, ki niso bile registrirane.

Funkcija vrne samo kodo 404 (privzeta koda, kadar vira ni mogoče najti), vrnjeno vrsto podatkov (v primeru navadnega besedila) in besedilo z besedami "Ni najdeno."

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

6. korak: Vrnitev temperature

To je funkcija, ki vrne json s podatki o temperaturi, ko odjemalec poda zahtevo GET pri / 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 ali cliente com o código 200, que é o código quando a requisição foi realizada com sucesso server.send (200, "application/json", json); }

7. korak: Vračanje vlažnosti

To je funkcija, ki bo vrnila json s podatki o vlagi, ko odjemalec poda zahtevo GET v / 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); }

8. korak: HTML

To je funkcija, ki bo vrnila html, ko odjemalec dostopa do dostopa / monitorja. Na tej strani bodo prikazane vrednosti temperature in vlažnosti, občasno pa bodo tudi naloženi podatki. Del, ki je med in in slogom>

določa videz strani in ga lahko poljubno spremenite.

// 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 = "" "" ""

"Monitor DHT"

"telo {"

"oblazinjenje: 35px;"

"barva ozadja: #222222;" "}"

9. korak: Nadaljevanje sloga HTML

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

Tukaj imamo glavni del html. V njem imamo dva odstavka, ki prikazujeta temperaturo in vlažnost. Bodite pozorni na identifikacijske številke odstavkov, saj bomo prek njih te odstavke obnovili, da vnesemo vrednosti temperature in vlažnosti po zahtevah.

Monitor DHT

Temperatura:

Vlažnost:

10. korak: JavaScript

Tu začnemo definirati skript, ki bo občasno prebral vrednosti temperature in vlažnosti. Funkcija refresh () pokliče funkcije refreshTemperature () in refreshHumdity (), setInterval pa funkcijo osveževanja vsakih 5000 milisekund (5 sekund).

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

Funkcija refreshTemperature () poda zahtevo pri / temperature, analizira informacije v jsonu in v odstavek doda temperaturo id.

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

Funkcija refreshHumidity () poda zahtevo za / vlažnost, analizira informacije v jsonu in v odstavku doda vlažnost id. S tem dokončamo html, ki ga bomo poslali v zahtevah v / monitorju.

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

"";

11. korak: Dokončanje ShowMonitorja

Zdaj, ko je niz s html -om, ki ga bomo poslali, pripravljen, ga lahko pošljemo odjemalcu. S tem dokončate funkcijo showMonitor in kodo.

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

12. korak: Testiranje

Testiranje
Testiranje

Zdaj odprite brskalnik in vnesite https://192.168.2.8/monitor (morda boste potrebovali drugačen IP, odvisno od vaše konfiguracije).

Priporočena: