Mündəricat:

ESP8266: İstilik və Rütubəti Necə İzləmək olar: 12 addım
ESP8266: İstilik və Rütubəti Necə İzləmək olar: 12 addım

Video: ESP8266: İstilik və Rütubəti Necə İzləmək olar: 12 addım

Video: ESP8266: İstilik və Rütubəti Necə İzləmək olar: 12 addım
Video: Measure Temperature and Humidity WiFi with ESP32 DHT11 and DHT22 - Robojax 2024, Iyul
Anonim
Image
Image
Məclis
Məclis

Bugünkü dərsdə, DHT22 sensorunun temperatur və rütubət göstəriciləri üçün 01 konfiqurasiyasında ESP8266 olan ESP-01-dən (yalnız 2 GPIO ilə) istifadə edəcəyik. Sizə bir elektrik sxemini və bir Arduino ilə ESP proqramlaşdırma hissəsini göstərəcəyəm. Nümunə sadə, başa düşüləndir və montajda kömək etmək üçün videoda istifadə olunan PDF ilə gəlir.

Dizaynda 110 və ya 220 -ni 5 volta çevirən ESP01 mənbəyi, 3v3 gərginlik tənzimləyicisi və sensor olan DHT22 var. Smartfon ekranında, ESP tərəfindən verilən JavaScript koduna əlavə olaraq yerli IP ünvanınız olacaq. Bu ekran bu səbəbdən temperatur və rütubət parametrlərini alacaq və hər beş saniyədə bir yenilənəcək bu dəyərləri çap edəcək. Bunu etmək üçün telefonlarda və planşetlərdə heç bir tətbiqə ehtiyacınız olmayacaq və bu həm Android OS, həm də IOS üçün keçərlidir.

Addım 1: Quraşdırma

Elektrik sxemi, ESP01 -in bir server olaraq iştirak edəcəyi montaj haqqında olduğu kimi olduqca sadədir. ESPO1 sanki Arduino kimi proqramlaşdırılacaq: C dili vasitəsilə. Kodun bir hissəsinin brauzerdən çap olunduğunu qeyd edirəm. Bu o deməkdir ki, brauzerə JavaScript kodu göndərir. Aşağıda bunun necə işlədiyini daha yaxşı izah edəcəyəm.

Bağlama sxeminə qayıdaraq, ESP01-i gücləndirmək üçün 3v3 gərginlik tənzimləyicisinə qoşulmuş 5 voltlu açar mənbəyi qoydum. Hələ də dörd sancaqlı DHT22 -ə sahibik. Bunlardan biri olan məlumatlar istifadə edilmir. Bununla birlikdə, bir müqavimət çəkmək lazımdır.

Addım 2: Kod

İlk addım, istifadə edəcəyimiz libləri daxil etməkdir. DHT libini Sketch seçimi> Kitabxanaya Daxil Et> Kitabxanaları İdarə et…

Açılan pəncərədə DHT sensor kitabxanasını axtarın.

Bundan sonra serverimiz olacaq və HTTP sorğularına cavab verəcək ESP8266WebServer tipli bir dəyişən yaratdıq (port 80).

0 parametrləri (GPIO pin 0) və növü (bizim vəziyyətimizdə DHT22) olan bir DHT dəyişənini də yaradırıq.

#include #include #include #daxil edin // ESP8266WebServer və ya ESP8266 və ya ESP8266 xidmətlərinə cavab verən ESP8266WebServer serveri (80); // DHT -nin dəyişdirilməsi və ya dəyişdirilməsi ilə əlaqədar olaraq, DHT -nin (0, DHT22) istiləşməsinə icazə verin;

Addım 3: Quraşdırma

Quraşdırmada, yalnız bir qeydimiz olması üçün Serialı işə salacağıq. Bu, ESP8266 seriyalı monitordan istifadə etmək üçün kompüterə serial vasitəsilə qoşulduqda baş verəcəkdir.

ESP8266 -nı şəbəkəmizə bağlayacağıq. Bizim vəziyyətimizdə 87654321 şifrəsi ilə TesteESP şəbəkəsini istifadə edirik, ancaq istifadə etdiyiniz şəbəkəyə uyğun olaraq bunu dəyişdirməlisiniz.

// ESP8266 ilə əlaqə qurmaq üçün ESP8266 ilə əlaqə qurun və ya ESP8266 Serial.begin (115200) ilə əlaqə qurun; // ESP8266 ilə əlaqədar təlimat. // No 8764321 TesteESP və ya başqa heç bir məlumat yoxdur. // WiFi.begin ("TesteESP", "87654321") məlumatlarını dəyişdirməklə əlaqə qurun; // Əlaqə Serial Serial.println ("") izləmək; Serial.print ("Conectando");

ESP8266 -nın şəbəkəyə qoşulmasını gözləyirik və qoşulduqdan sonra şəbəkə parametrlərini göndəririk. Şəbəkənizə görə dəyişin.

// Esperamos até que o módulo se conecte à rede while (WiFi.status ()! = WL_CONNECTED) {gecikmə (500); Serial.print ("."); } // IP düzeltmeyi konfiqurasiya edin. Əlavə məlumat IPAddress ip -ə uyğun gəlir (192, 168, 3, 11); IP ünvan ünvanı (192, 168, 3, 1); IPAddress alt şəbəkəsi (255, 255, 255, 0); Serial.print ("Configurando IP fixo para:"); Serial.println (ip); // WiFi.config konfiqurasiyasına daxil olun (ip, ağ geçidi, alt şəbəkə);

Növbəti əmrlər yalnız ESP8266 -nı kompüterə serial vasitəsi ilə bağladığınız təqdirdə Serial Monitordan geribildiriminiz olsun.

ESP8266 -nın qəbul etdiyi IP -ni parametrlərdəki ilə eyni olub olmadığını yoxlaya bilərsiniz.

// Mostramos yoxlanılmamış Seriallar və ya Serial.println ("") konfiqurasiyasını yoxlamaqla əlaqədar olaraq, Esp8266 ilə əlaqə qurun; Serial.println ("Connectado"); Serial.print ("IP:"); Serial.println (WiFi.localIP ());

Burada, hər bir istək üçün hansı funksiyaların yerinə yetiriləcəyini təyin etməyə başlayırıq.

Aşağıdakı təlimatda, ESP8266 hər dəfə yol / temperaturda GET tipli bir HTTP sorğusu alanda getTemperature funksiyası yerinə yetiriləcəkdir.

// Şərhlər və tapşırıqların yerinə yetirilməsi üçün müəyyən bir tapşırıq var. // Lazım deyilsə, https://192.168.2.8/temperature əldə etmək üçün https://192.168.2.8/temperature // (serverdən asılı olmayaraq konfiqurasiya etmək üçün) getTemperature server.on ("/temperatur", HTTP_GET), getTemperature);

Bu digər ifadədə, ESP8266 hər dəfə yol / rütubətdə GET tipli bir HTTP sorğusu aldıqda getHumidity funksiyası yerinə yetiriləcək.

// Heç bir şey əldə etməmək üçün https://192.168.2.8/humidity // məlumat əldə etmək üçün serverdən istifadə edə bilərsiniz ("/rütubət") HTTP_GET, getHumidity);

Bu təlimatda, ESP8266 hər dəfə yolda / monitorda GET tipli bir HTTP sorğusu alanda showMonitor funksiyası yerinə yetiriləcək.

ShowMonitor funksiyası, temperatur və rütubət dəyərlərini əks etdirən əsas html -in qaytarılmasından məsuldur.

// Nəzərə almaq lazımdır ki, https://192.168.2.8/monitor əldə etməyin https://192.168.2.8/monitor // (proqram təminatı müstəqil olaraq göstərilir) və ShowMonitor proqramının icrası. // Başlanğıc funksiyalarını yerinə yetirmək üçün əsas şərtlər // həm serverin, həm də temperaturun və ya məlumatların yenilənməsi ilə bağlı məlumatlar ("/monitor", HTTP_GET, showMonitor);

İstədiyiniz yol tapılmadıqda icra edilməli olan funksiya tərifi budur.

// İstifadəçi üçün lazımlı məlumatların qeydiyyatı server.onNotFound (onNotFound);

Burada əvvəllər 80 portda elan etdiyimiz serverimizi işə salırıq.

Bu quraşdırmanın sonudur.

// serverin 80 server.begin () serverini yoxlayın; Serial.println ("Servidor HTTP iniciado"); }

Addım 4: Döngə

Lib ESP8266WebServer sayəsində müştərilərin olub olmadığını və sorğu yolunun nə olduğunu yoxlamaq lazım deyil. Yalnız handleClient () -ə zəng etməliyik və obyekt hər hansı bir müştərinin hər hansı bir sorğu göndərdiyini yoxlayacaq və əvvəllər qeyd etdiyimiz müvafiq funksiyaya yönləndirəcək.

void loop () {// Müştəri serveri.handleClient () məlumatlarını yoxlamaq lazımdır; }

Addım 5: İstək Tapılmadı

Müştəri qeydiyyatdan keçməmiş hər hansı bir sorğu verdikdə yerinə yetirmək üçün əvvəllər daxil olduğumuz funksiyadır.

Funksiya yalnız 404 kodunu (bir qaynaq tapılmadığı üçün standart kod), qaytarılmış məlumat tipini (düz mətn halında) və "Tapılmadı" sözləri olan bir mətni qaytarır.

// Əməliyyat sənədlərinin müəyyən edilməsi üçün onNotFound () {server.send (404, "mətn/düz", "Tapılmadı") qeydiyyatdan keçməməlisiniz; }

Addım 6: Temperaturun qaytarılması

Müştəri / temperaturda GET tələbi verdikdə, temperatur məlumatları ilə bir json qaytaracaq funksiyadır.

// İstifadəçilərə lazım olan bütün məlumatları almaq üçün https://192.168.2.8/temperature (heç bir problem yoxdur) getTemperature () {/Fazemos a leitura da temperatura através módulo dht float t = dht.readTemperature (); // Crus um json com os dados da temperatura String json = "{" temperatur / ":"+String (t)+"}"; // Müştərilər üçün 200 və ya daha çox server, server.send (200, "application/json", json) üçün bir tələb var; }

Addım 7: Rütubətin qaytarılması

Müştəri / rütubətdə GET sorğusu verdikdə nəm məlumatları ilə bir json qaytaracaq funksiyadır.

// İstifadəçilərə lazım olan bütün məlumatları almaq üçün https://192.168.2.8/ rütubətdən (heç bir problem yoxdur) getHumidity () {// Fazemos a leitura float h = dht.readHumidity (); // Cria um json com os dados da umidade String json = "{" rütubət / ":"+String (h)+"}"; // Müştərilər üçün 200 və ya daha çox server, server.send (200, "application/json", json) üçün bir tələb var; }

Addım 8: HTML

Müştəri daxil olmaq / izləmək üçün getdikdə html -i qaytaracaq funksiyadır. Bu səhifə temperatur və rütubət dəyərlərini göstərəcək və zaman zaman məlumatları yenidən yükləyəcək. Və üslubu arasında olan hissə>

səhifənin görünüşünü təyin edir və istədiyiniz kimi dəyişə bilərsiniz.

// İstifadəçilərə lazım olan bütün tapşırıqları yerinə yetirmək üçün // heç bir məlumat əldə etməyin https://192.168.2.8/monitor (hər hansı bir konfiqurasiya konfiqurasiyasından asılı olmayaraq) showMonitor () {String html = "" "" ""

"DHT Monitor"

"bədən {"

"doldurma: 35 piksel;"

"fon rəngi: #222222;" "}"

Addım 9: HTML Stilinin davamı

"h1 {" "color: #FFFFFF;" "font-family: sans-serif;" "}" "p {" "rəng: #EEEEEE;" "font-family: sans-serif;" "font ölçüsü: 18px;" "}" ""

Burada html -in əsas hissəsi var. İçərisində, temperatur və rütubəti göstərən iki paraqrafımız var. Paraqrafların idlərinə diqqət yetirin, çünki istəklərdən sonra temperatur və rütubət dəyərlərini daxil etmək üçün bu paraqrafları bərpa edəcəyik.

DHT Monitoru

Temperatur:

Rütubət:

Addım 10: JavaScript

Burada zaman zaman temperatur və rütubət dəyərlərini oxuyacaq ssenarini təyin etməyə başlayırıq. Yeniləmə () funksiyası refreshTemperature () və refreshHumdity () funksiyalarını çağırır və setInterval yeniləmə funksiyasını hər 5000 millisaniyədə (5 saniyə) çağırır.

"təzələmək();" "setInterval (yeniləmə, 5000);" "funksiya yeniləmə ()" "{" "refreshTemperature ()" "refreshHumidity ();" "}"

RefreshTemperature () funksiyası / temperaturda sorğu göndərir, jsonda olan məlumatları təhlil edir və paraqrafa id temperaturunu əlavə edir.

"funksiya refreshTemperature ()" "{" "var xmlhttp = yeni XMLHttpRequest ();" "xmlhttp.onreadystatechange = function () {" "if (xmlhttp.readyState == XMLHttpRequest. DONE && xmlhttp.status == 200) {" "document.getElementById ('temperatur'). innerHTML = 'Temperatur:' + JSON. təhlil (xmlhttp.responseText).temperature + 'C'; " "}" "};" "xmlhttp.open ('GET', 'https://192.168.2.8/temperature', doğru);" "xmlhttp.send ();" "}"

RefreshHumidity () funksiyası / nəmlik istəyi edir, jsonda olan məlumatları təhlil edir və paraqrafa id nəmliyi əlavə edir. Və bununla da / monitordakı istəklərdə göndərəcəyimiz html -i bitiririk.

"funksiya refreshHumidity ()" "{" "var xmlhttp = yeni XMLHttpRequest ();" "xmlhttp.onreadystatechange = function () {" "if (xmlhttp.readyState == XMLHttpRequest. DONE && xmlhttp.status == 200) {" "document.getElementById ('nem'). innerHTML = 'Rütubət:' + JSON. təhlil (xmlhttp.responseText). rütubət + '%'; " "}" "};" "xmlhttp.open ('GET', 'https://192.168.2.8/humidity', true);" "xmlhttp.send ();" "}"

"";

Addım 11: ShowMonitor -un bitməsi

İndi göndərəcəyimiz html olan sətir hazır olduğu üçün onu müştəriyə göndərə bilərik. Bu, showMonitor funksiyasını və kodu tamamlayır.

// Müştəri üçün 200 -dən çox html, server.send (200, "text/html", html) üçün bir tələb var. }

Addım 12: Test

Test
Test

İndi brauzerinizi açın və https://192.168.2.8/monitor daxil edin (konfiqurasiyanızdan asılı olaraq fərqli bir ipə ehtiyacınız ola bilər).

Tövsiyə: