Բովանդակություն:

ESP8266. Ինչպես վերահսկել ջերմաստիճանը և խոնավությունը. 12 քայլ
ESP8266. Ինչպես վերահսկել ջերմաստիճանը և խոնավությունը. 12 քայլ

Video: ESP8266. Ինչպես վերահսկել ջերմաստիճանը և խոնավությունը. 12 քայլ

Video: ESP8266. Ինչպես վերահսկել ջերմաստիճանը և խոնավությունը. 12 քայլ
Video: Ինչպես ծրագրավորել ESP8266 ESP-01 Wi-Fi ռելե մոդուլը 2024, Դեկտեմբեր
Anonim
Image
Image
Ժողով
Ժողով

Այսօրվա ձեռնարկում մենք կօգտագործենք ESP-01- ը, որը ESP8266 է 01 կազմաձևով (ընդամենը 2 GPIO- ով), DHT22 տվիչի ջերմաստիճանի և խոնավության ցուցանիշների համար: Ես ձեզ ցույց կտամ էլեկտրական սխեմա և ESP ծրագրավորման մասը Arduino- ով: Օրինակը պարզ է, դյուրըմբռնելի, ինչպես նաև գալիս է տեսանյութում օգտագործված PDF- ի հետ, որն օգնում է հավաքմանը:

Նախագծում մենք այնուհետև ունենք ESP01, աղբյուրը, որը 110 կամ 220 -ը փոխակերպում է 5 վոլտի, 3v3 լարման կարգավորիչը և DHT22- ը, որը սենսորն է: Սմարթֆոնի էկրանին, բացի ESP- ի տրամադրած JavaScript ծածկագրից, կունենաք տեղական IP հասցե: Այս էկրանը, հետևաբար, կստանա ջերմաստիճանի և խոնավության պարամետրերը և կտպագրի այդ արժեքները, որոնք կթարմացվեն յուրաքանչյուր հինգ վայրկյանը մեկ: Դա անելու համար ձեզ հարկավոր չեն որևէ ծրագիր հեռախոսների և պլանշետների վրա, և դա վերաբերում է ինչպես Android OS- ին, այնպես էլ IOS- ին:

Քայլ 1: Հավաքում

Էլեկտրական սխեման բավականին պարզ է, ինչպես նաև հավաքման մասին հատվածը, որը ESP01- ը կներառի որպես սերվեր: ESPO1- ը ծրագրավորվելու է այնպես, ասես դա Arduino- ն է `C լեզվով: Ես նշում եմ, որ կոդի մի մասը տպված է բրաուզերից: Սա նշանակում է, որ այն JavaScript կոդ է ուղարկում դիտարկիչին: Ստորև ես ավելի լավ կբացատրեմ, թե ինչպես է դա աշխատում:

Վերադառնալով էլեկտրագծերի գծապատկերին, ESP01- ը սնուցելու համար ես դնում եմ 5 վոլտ անջատիչ աղբյուր, որը միացված է 3v3 լարման կարգավորիչին: Մենք դեռ ունենք DHT22- ը ՝ չորս կապում: Դրանցից մեկը ՝ տվյալները, չի օգտագործվում: Այնուամենայնիվ, այն տևում է ձգման դիմադրություն:

Քայլ 2: Կոդ

Առաջին քայլը ներառում է այն բեկորները, որոնք մենք կօգտագործենք: DHT lib- ը կարող է ավելացվել Sketch տարբերակով> Ներառել գրադարան> Կառավարել գրադարանները …

Բացվող պատուհանում փնտրեք DHT տվիչների գրադարանը:

Դրանից հետո մենք ստեղծեցինք ESP8266WebServer տիպի փոփոխական, որը կլինի մեր սերվերը և կպատասխանի HTTP- ի հարցերին (նավահանգիստ 80):

Մենք նաև ստեղծում ենք DHT փոփոխական 0 պարամետրերով (որը GPIO- ի 0 փինն է) և տեսակը (մեր դեպքում DHT22):

#ներառել #ներառել #ներառել #ներառել // Criamos uma variável do tipo ESP8266WebServer, որը հնարավորություն է տալիս օգտվել // ինչպես նաև օգնել ESP8266 արագ արձագանքման համար կամ ESP8266 արձագանքողին ESP8266WebServer սերվեր (80); // Variável do tipo DHT que possui funções para controlarmos o módulo dht // թույլ տալ թույլատրել ջերմաստիճանը և բարձրացնել DHT dht (0, DHT22);

Քայլ 3: Կարգավորում

Կարգավորման մեջ մենք սերիալը կսկսենք միայն այնպես, որ գրանցամատյան ունենանք: Դա տեղի կունենա, եթե ESP8266- ը սերիայի միջոցով միացված է համակարգչին `սերիական մոնիտորը օգտագործելու համար:

Մենք կստիպենք ESP8266- ը միանալ մեր ցանցին: Մեր դեպքում մենք օգտագործում ենք TesteESP ցանցը 87654321 գաղտնաբառով, բայց դուք ստիպված կլինեք դա փոխել ըստ ձեր օգտագործած ցանցի:

// Inicialize a Serial apenas caso esteja com o ESP8266 conectado ao computador pela serla queira ter um log // para easalar 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»); // Հետադարձ կապ, օգտագործողի կամ դիտողի սերիական Serial.println (""); Serial.print ("Conectando");

Մենք սպասում ենք, որ ESP8266- ը միանա ցանցին, և այն միանալուց հետո մենք ուղարկում ենք ցանցի կարգավորումները: Փոխեք ըստ ձեր ցանցի:

// Esperamos até que o módulo se conecte à rede while (WiFi.status ()! = WL_CONNECTED) {հետաձգում (500); Serial.print ("."); } // IP ֆիքսման կարգավորումներ: Você pode alterar consae a sua rede IPAddress ip (192, 168, 3, 11); IPAddress դարպաս (192, 168, 3, 1); IPAddress ենթահամակարգ (255, 255, 255, 0); Serial.print ("Configurando IP fixo para:"); Serial.println (ip); // Envia a configuração WiFi.config (ip, gateway, subnet);

Հաջորդ հրամանները միայն այն դեպքում, երբ դուք ունեք ESP8266 համակարգչին սերիայի միջոցով, որպեսզի ունենաք հետադարձ կապ սերիական մոնիտորից:

Կարող եք ստուգել ESP8266- ի ստացած IP- ն ՝ արդյոք այն նույնն է, ինչ պարամետրերում:

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

Այստեղ մենք սկսում ենք սահմանել, թե որ գործառույթները կկատարվեն յուրաքանչյուր հարցման համար:

Ստորև բերված հրահանգում ամեն անգամ, երբ ESP8266- ը ճանապարհին / ջերմաստիճանում GET տիպի HTTP հարցում է ստանում, getTemperature գործառույթը կկատարվի:

// Aqui definimos qual a função será execada 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) a função getTemperature será serverada.on ("/temperature", HTTP_GET, getTemperature);

Այս մյուս հայտարարության մեջ ամեն անգամ, երբ ESP8266- ը ճանապարհին / խոնավության մեջ GET տիպի HTTP հարցում է ստանում, 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á exeada server.on ("/խոնավություն"), HTTP_GET, getHumidity);

Այս հրահանգում, ամեն անգամ, երբ ESP8266- ը ուղու / մոնիտորի մեջ GET տիպի HTTP հարցում է ստանում, showMonitor գործառույթը կկատարվի:

ShowMonitor գործառույթը պատասխանատու է հիմնական html- ի վերադարձի համար, որը կցուցադրի ջերմաստիճանի և խոնավության արժեքները:

// 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) funcão showMonitor ծառայություն կատարման համար: // Esta função retornará a página principal que mostrará os valores // ջերմաստիճանի բարձրացում և վերամշակում ՝ օգտագործելով տեղեկատվական աղբյուրներ tempos em tempos server.on ("/monitor", HTTP_GET, showMonitor);

Ահա ֆունկցիայի սահմանումը, որը պետք է կատարվի, երբ պահանջվող ուղին չգտնվի:

// Aqui definimos qual função será performada caso o caminho que o cliente պահանջել ոչ միայն գրանցել server.onNotFound (onNotFound);

Այստեղ մենք նախաստորագրում ենք մեր սերվերը, որը մենք նախկինում հայտարարել էինք 80 նավահանգստում:

Սա կարգավորման ավարտն է:

// Տեղեկատվական ծառայություն կամ սերվերի առկայություն 80 port.begin (); Serial.println ("Servidor HTTP iniciado"); }

Քայլ 4: Օղակ

Շնորհիվ lib ESP8266WebServer- ի, մենք կարիք չունենք ստուգել, թե արդյոք կան հաճախորդներ և ինչի համար է պահանջվող ուղին: Մենք պարզապես պետք է զանգահարենք handleClient (), և օբյեկտը կստուգի ՝ արդյոք որևէ հաճախորդ ինչ -որ խնդրանք ներկայացնու՞մ է, և կվերաուղղորդի այն գործառույթին, որը մենք գրանցել էինք նախկինում:

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

Քայլ 5. Հարցումը չի գտնվել

Սա այն գործառույթն է, որը մենք նախկինում մուտք ենք գործել `կատարելու համար, երբ հաճախորդը կատարում է չգրված որևէ պահանջ:

Ֆունկցիան վերադարձնում է միայն 404 կոդը (կանխադրված կոդը, երբ ռեսուրսը չի գտնվում), վերադարձված տվյալների տեսակը (պարզ տեքստի դեպքում) և տեքստ «Չգտնվեց» բառերով:

// Funվարճանք, որը թույլ է տալիս պարզել ձեր պահանջները կամ պահանջել, որ գրանցումը չեղարկվի onNotFound () {server.send (404, "text/plain", "Not Found"); }

Քայլ 6: Retերմաստիճանի վերադարձ

Սա այն գործառույթն է, որը կվերադարձնի json ջերմաստիճանի տվյալները, երբ հաճախորդը GET հարցում / ջերմաստիճանի դեպքում:

// Função que definimos que será exeada 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 Լարային json = "{" ջերմաստիճան / ":"+Լար (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: Խոնավության վերադարձ

Սա այն գործառույթն է, որը կվերադարձնի json- ը խոնավության տվյալներով, երբ հաճախորդը GET հարցում / խոնավություն:

// Função que definimos que será exeada 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 = "{" խոնավություն / ":"+Լար (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: HTML

Սա այն գործառույթն է, որը կվերադարձնի html- ը, երբ հաճախորդը գնում է մուտք / մոնիտոր: Այս էջը կցուցադրի ջերմաստիճանի և խոնավության արժեքները, և այն ժամանակ առ ժամանակ կբեռնաթափի տվյալները: Հատվածը և ոճի միջև> և

սահմանում է էջի տեսքը, և դուք կարող եք փոխել այն, ինչպես ցանկանում եք:

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

«DHT մոնիտոր»

"մարմին {"

"լիցքավորում` 35px;"

"ֆոնի գույնը` #222222; " "}"

Քայլ 9. HTML ոճի շարունակություն

"h1 {" "գույն: #FFFFFF;" "font-family: sans-serif;" "}" "p {" "գույնը ՝ #EEEEEE;" "font-family: sans-serif;" "տառատեսակի չափը` 18px; " "}" ""

Այստեղ մենք ունենք html- ի հիմնական մասը: Դրա մեջ մենք ունենք երկու պարբերություն, որոնք ցույց կտան ջերմաստիճանը և խոնավությունը: Ուշադրություն դարձրեք պարբերությունների ID- ներին, քանի որ դրանց միջոցով մենք կվերականգնենք այս պարբերությունները `պահանջներից հետո ջերմաստիճանի և խոնավության արժեքները մուտքագրելու համար:

DHT մոնիտոր

Երմաստիճանը:

Խոնավություն:

Քայլ 10: JavaScript

Այստեղ մենք սկսում ենք սահմանել այն սցենարը, որը ժամանակ առ ժամանակ կկարդա ջերմաստիճանի և խոնավության արժեքները: Թարմացման () գործառույթը կանչում է refreshTemperature () և refreshHumdity () գործառույթները, իսկ setInterval- ը թարմացման գործառույթ է կանչում յուրաքանչյուր 5000 միլիվայրկյանում (5 վայրկյան):

"թարմացնել ();" "setInterval (թարմացում, 5000);" "գործառույթը թարմացնել ()" "{" "refreshTemperature ()" "refreshHumidity ();" "}"

RefreshTemperature () գործառույթը դիմում է / ջերմաստիճանի դեպքում, վերլուծում է json- ում պարունակվող տեղեկատվությունը և պարբերության մեջ ավելացնում id ջերմաստիճանը:

"գործառույթը refreshTemperature ()" "{" "var xmlhttp = new XMLHttpRequest ();" "xmlhttp.onreadystatechange = գործառույթը () {" "if (xmlhttp.readyState == XMLHttpRequest. DONE && xmlhttp.status == 200) {" "document.getElementById (" ջերմաստիճան "). innerHTML = 'peratերմաստիճանը.' + JSON: վերլուծել (xmlhttp.responseText). ջերմաստիճան + 'C'; " "}" "};" "xmlhttp.open ('GET', 'https://192.168.2.8/temperature', true);" "xmlhttp.send ();" "}"

RefreshHumidity () գործառույթը դիմում է / խոնավության, վերլուծում է json- ում պարունակվող տեղեկատվությունը և պարբերության մեջ ավելացնում id խոնավությունը: Եվ դրանով մենք ավարտում ենք այն html- ը, որը մենք ուղարկելու ենք հարցումները / մոնիտոր:

"գործառույթը refreshHumidity ()" "{" "var xmlhttp = new XMLHttpRequest ();" "xmlhttp.onreadystatechange = գործառույթը () {" "if (xmlhttp.readyState == XMLHttpRequest. DONE && xmlhttp.status == 200) {" "document.getElementById (" խոնավություն "). innerHTML = 'Խոնավություն.' + JSON: վերլուծել (xmlhttp.responseText). խոնավություն + '%'; " "}" "};" "xmlhttp.open (" GET "," https://192.168.2.8/humidity ", true);") "xmlhttp.send ();" "}"

"";

Քայլ 11: Ավարտելով ShowMonitor- ը

Այժմ, երբ html- ով տողը, որը մենք կուղարկենք, պատրաստ է, կարող ենք այն ուղարկել հաճախորդին: Սա ավարտում է showMonitor գործառույթը և ծածկագիրը:

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

Քայլ 12: Փորձարկում

Փորձարկում
Փորձարկում

Այժմ բացեք ձեր դիտարկիչը և մուտքագրեք https://192.168.2.8/monitor (ձեզ կարող է անհրաժեշտ լինել այլ ip ՝ կախված ձեր կազմաձևից):

Խորհուրդ ենք տալիս: