Turinys:

ESP8266: Kaip stebėti temperatūrą ir drėgmę: 12 žingsnių
ESP8266: Kaip stebėti temperatūrą ir drėgmę: 12 žingsnių

Video: ESP8266: Kaip stebėti temperatūrą ir drėgmę: 12 žingsnių

Video: ESP8266: Kaip stebėti temperatūrą ir drėgmę: 12 žingsnių
Video: ESP8266 ESP01 DHT11 temperatūros drėgmės jutiklio modulio programavimas | RemoteXY | FLProg 2024, Liepa
Anonim
Image
Image
Surinkimas
Surinkimas

Šiandienos pamokoje DHT22 jutiklio temperatūros ir drėgmės rodmenims naudosime ESP-01, kuri yra ESP8266 konfigūracijoje 01 (tik 2 GPIO). Aš parodysiu jums elektros schemą ir ESP programavimo dalį su „Arduino“. Pavyzdys yra paprastas, lengvai suprantamas ir pateikiamas kartu su vaizdo įrašu naudojamu PDF rinkmenu, kad būtų lengviau surinkti.

Tada mes turime ESP01, šaltinį, kuris 110 arba 220 paverčia 5 voltais, 3v3 įtampos reguliatorių ir DHT22, kuris yra jutiklis. Išmaniojo telefono ekrane, be ESP pateikto „JavaScript“kodo, turėsite vietinį IP adresą. Todėl šis ekranas gaus temperatūros ir drėgmės parametrus ir atspausdins šias vertes, kurios bus atnaujinamos kas penkias sekundes. Norėdami tai padaryti, jums nereikės jokių programų telefonuose ir planšetiniuose kompiuteriuose, o tai taikoma ir „Android“OS, ir „iOS“.

1 žingsnis: Surinkimas

Elektros schema yra gana paprasta, kaip ir surinkimo dalis, kurioje ESP01 bus naudojamas kaip serveris. ESPO1 bus užprogramuotas taip, lyg būtų Arduino: per C kalbą. Atkreipiu dėmesį, kad dalis kodo spausdinama iš naršyklės. Tai reiškia, kad ji siunčia „JavaScript“kodą į naršyklę. Žemiau aš geriau paaiškinsiu, kaip tai veikia.

Grįžtant prie elektros instaliacijos schemos, ESP01 maitinimui įdėjau 5 voltų perjungiamą šaltinį, prijungtą prie 3v3 įtampos reguliatoriaus. Mes vis dar turime DHT22 su keturiais kaiščiais. Vienas iš jų, duomenys, nenaudojamas. Tačiau tam reikia ištraukiamojo rezistoriaus.

2 žingsnis: kodas

Pirmasis žingsnis yra įtraukti libus, kuriuos naudosime. DHT biblioteką galima pridėti pasirinkus eskizą> Įtraukti biblioteką> Tvarkyti bibliotekas …

Atsidariusiame lange ieškokite DHT jutiklių bibliotekos.

Po to sukūrėme ESP8266WebServer tipo kintamąjį, kuris bus mūsų serveris ir atsakys į HTTP užklausas (80 prievadas).

Taip pat sukuriame DHT kintamąjį su parametrais 0 (kuris yra GPIO kaištis 0) ir tipu (mūsų atveju DHT22).

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

3 žingsnis: sąranka

Sąrankoje mes inicijuosime seriją tik taip, kad turėtume žurnalą. Taip atsitiks, jei ESP8266 prijungtas prie kompiuterio per nuoseklųjį serijinį monitorių.

Mes priversime ESP8266 prisijungti prie mūsų tinklo. Mūsų atveju mes naudojame tinklą TesteESP su slaptažodžiu 87654321, tačiau turėsite tai pakeisti pagal naudojamą tinklą.

// Inicialize a Serial apenas caso esteja com o ESP8266 conectado ao computador pela serla queira ter um log // para facilititar 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 informationções da sua rede WiFi.begin ("TesteESP", "87654321"); // Atsiliepimai caso esteja usando o Monitor Serial Serial.println (""); Serial.print („Conectando“);

Laukiame, kol ESP8266 prisijungs prie tinklo, o po prisijungimo siunčiame tinklo nustatymus. Pakeiskite pagal savo tinklą.

// Esperamos até que o metodulo se conecte à rede while (WiFi.status ()! = WL_CONNECTED) {delay (500); Serijinis atspaudas ("."); } // IP konfigūracijos konfigūravimas. Você pode alterar conforme a sua rede IPAddress ip (192, 168, 3, 11); „IPAddress“vartai (192, 168, 3, 1); IPAddress potinklis (255, 255, 255, 0); Serial.print ("Configurando IP fixo para:"); Serial.println (ip); // Envia a configuração WiFi.config (ip, gateway, potinklis);

Kitos komandos yra tik tuo atveju, jei ESP8266 yra prijungtas prie kompiuterio per seriją, kad gautumėte grįžtamąjį ryšį iš serijinio monitoriaus.

Galite patikrinti ESP8266 gautą IP adresą, kad pamatytumėte, ar jis sutampa su nustatymais.

// 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 ());

Čia mes pradedame apibrėžti, kurios funkcijos bus vykdomos kiekvienai užklausai.

Žemiau esančioje instrukcijoje kiekvieną kartą, kai ESP8266 kelyje / temperatūroje gauna GET tipo HTTP užklausą, bus vykdoma 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 outro ip dependendo da sua configuração) a função getTemperature será executada server.on ("/temperature", HTTP_GET, getTemperature);

Šiame kitame teiginyje kiekvieną kartą, kai ESP8266 kelyje / drėgme gauna GET tipo HTTP užklausą, bus vykdoma 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á executab server.on ("/kosteumas", HTTP_GET, getHumidity);

Šioje instrukcijoje kiekvieną kartą, kai ESP8266 kelyje / monitoriuje gauna GET tipo HTTP užklausą, bus vykdoma funkcija showMonitor.

„ShowMonitor“funkcija yra atsakinga už pagrindinio html, kuriame bus rodomos temperatūros ir drėgmės vertės, grąžinimą.

// 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 princip que mostrará os valores // da temperatura e da umidade and recarregará essas information of temppos em tempos server.on ("/monitor", HTTP_GET, showMonitor);

Čia yra funkcijos apibrėžimas, kuris turėtų būti vykdomas, kai nerastas prašomas kelias.

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

Čia inicijuojame savo serverį, kurį anksčiau deklaravome 80 prievade.

Tai sąrankos pabaiga.

// Inicializamos o server que criamos na porta 80 server.begin (); Serial.println ("Servidor HTTP iniciado"); }

4 žingsnis: ciklas

„Lib ESP8266WebServer“dėka mums nereikia tikrinti, ar yra klientų ir koks yra užklausos kelias. Mums tereikia paskambinti „handleClient“(), o objektas patikrins, ar kuris nors klientas nepateikia užklausų, ir nukreips į atitinkamą funkciją, kurią anksčiau užregistravome.

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

5 veiksmas: užklausa nerasta

Tai funkcija, kurią anksčiau užregistravome vykdyti, kai klientas pateikia užklausas, kurios nebuvo užregistruotos.

Funkcija grąžina tik kodą 404 (numatytasis kodas, kai nerandamas išteklius), grąžintą duomenų tipą (paprasto teksto atveju) ir tekstą su žodžiais „Nerasta“.

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

6 žingsnis: grąžinkite temperatūrą

Tai funkcija, kuri grąžins json su temperatūros duomenimis, kai klientas pateiks GET užklausą esant / temperatūrai.

// 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 modeulo dht float t = dht.readTemperature (); // Cria um json com os dados da temperatura String json = "{" temperatura / ":"+Styga (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); }

7 žingsnis: grąžinkite drėgmę

Tai funkcija, kuri grąžins json su drėgmės duomenimis, kai klientas pateiks GET užklausą / drėgmė.

// 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 metodulo dht float h = dht.readHumidity (); // Cria um json com os dados da umidade String json = "{" drėgmė / ":"+Styga (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 žingsnis: HTML

Tai funkcija, kuri grąžins html, kai klientas eis į prieigą / monitorių. Šiame puslapyje bus rodomos temperatūros ir drėgmės vertės, o laikas nuo laiko duomenys bus įkeliami iš naujo. Dalis, esanti tarp ir ir stilius>

apibrėžia puslapio išvaizdą ir galite jį pakeisti, kaip jums patinka.

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

"kūnas{"

"paminkštinimas: 35 taškų;"

"fono spalva: #222222;" "}"

9 veiksmas: HTML stiliaus tęsinys

"h1 {" "spalva: #FFFFFF;" "font-family: sans-serif;" "}" "p {" "spalva: #EEEEEE;" "font-family: sans-serif;" "šrifto dydis: 18 taškų;" "}" ""

Čia mes turime pagrindinę html dalį. Jame yra dvi pastraipos, kuriose bus rodoma temperatūra ir drėgmė. Atkreipkite dėmesį į pastraipų ID, nes būtent per jas mes atkuriame šias pastraipas, kad po rekvizitų įvestume temperatūros ir drėgmės vertes.

DHT monitorius

Temperatūra:

Drėgmė:

10 veiksmas: „JavaScript“

Čia mes pradedame apibrėžti scenarijų, kuris kartas nuo karto perskaitys temperatūros ir drėgmės vertes. Funkcija refresh () iškviečia funkcijas refreshTemperature () ir refreshHumdity (), o setInterval iškviečia atnaujinimo funkciją kas 5000 milisekundžių (5 sekundes).

"atnaujinti ();" "setInterval (atnaujinimas, 5000);" "function refresh ()" "" "" refreshTemperature () "" "refreshHumidity ();" "}"

Funkcija refreshTemperature () pateikia užklausą / temperatūroje, analizuoja json esančią informaciją ir įtraukia į pastraipą id temperatūrą.

"function refreshTemperature ()" "" "" var xmlhttp = new XMLHttpRequest (); " "xmlhttp.onreadystatechange = function () {" "if (xmlhttp.readyState == XMLHttpRequest. DONE && xmlhttp.status == 200) {" "document.getElementById ('temperatūra'). internalHTML = 'Temperatūra:' + JSON. parsinti (xmlhttp.responseText).temperatūra + 'C'; " "}" "};" "xmlhttp.open ('GET', 'https://192.168.2.8/temperatūra', tiesa);" "xmlhttp.send ();" "}"

Funkcija refreshHumidity () pateikia užklausą / drėgmei, analizuoja json esančią informaciją ir į pastraipą įtraukia ID drėgmę. Ir tai baigiame html, kurį atsiųsime užklausose / monitoriuje.

"function refreshHumidity ()" "{" "var xmlhttp = new XMLHttpRequest ();" "xmlhttp.onreadystatechange = function () {" "if (xmlhttp.readyState == XMLHttpRequest. DONE && xmlhttp.status == 200) {" "document.getElementById ('drėgmė'). internalHTML = 'Drėgmė:' + JSON. parse (xmlhttp.responseText). drėgmė + '%'; " "}" "};" "xmlhttp.open ('GET', 'https://192.168.2.8/humidity', tiesa);" "xmlhttp.send ();" "}"

"";

11 veiksmas: „ShowMonitor“užbaigimas

Dabar, kai eilutė su siųstu html yra paruošta, galime ją nusiųsti klientui. Tai užbaigia „showMonitor“funkciją ir kodą.

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

12 žingsnis: bandymas

Testavimas
Testavimas

Dabar atidarykite naršyklę ir įveskite https://192.168.2.8/monitor (priklausomai nuo jūsų konfigūracijos gali prireikti kitokio IP).

Rekomenduojamas: