Mundarija:

ESP8266: Harorat va namlikni qanday kuzatish mumkin: 12 qadam
ESP8266: Harorat va namlikni qanday kuzatish mumkin: 12 qadam

Video: ESP8266: Harorat va namlikni qanday kuzatish mumkin: 12 qadam

Video: ESP8266: Harorat va namlikni qanday kuzatish mumkin: 12 qadam
Video: How to use DHT11 DHT22 with NodeMCU ESP8266 to read temperature over WiFi - IoT 2024, Iyul
Anonim
Image
Image
O'rnatish
O'rnatish

Bugungi qo'llanmada biz DHT22 sensorining harorat va namlik ko'rsatkichlari uchun 01 konfiguratsiyasida ESP8266 bo'lgan ESP-01 dan foydalanamiz (faqat 2 GPIO bilan). Men sizga elektr sxemasini va Arduino bilan ESP dasturlash qismini ko'rsataman. Misol oddiy, tushunish oson, shuningdek montajda yordam berish uchun videoda ishlatilgan PDF bilan birga keladi.

Dizaynda bizda ESP01, 110 yoki 220 ni 5 voltga aylantiruvchi manba, 3v3 kuchlanish regulyatori va sensori bo'lgan DHT22 bor. Smartfon ekranida siz ESP tomonidan taqdim etilgan JavaScript kodidan tashqari mahalliy IP -manzilga ega bo'lasiz. Shunday qilib, bu ekran harorat va namlik parametrlarini oladi va har besh soniyada yangilanib turadigan bu qiymatlarni chop etadi. Buning uchun sizga telefon va planshetlarda hech qanday dastur kerak bo'lmaydi va bu Android OS va IOS uchun amal qiladi.

1 -qadam: yig'ish

Elektr sxemasi, ESP01 -ni server sifatida o'z ichiga oladigan yig'ilish qismi kabi, juda oddiy. ESPO1 xuddi Arduino kabi dasturlashtiriladi: C tili orqali. Shuni ta'kidlaymanki, kodning bir qismi brauzerdan bosilgan. Bu shuni anglatadiki, u JavaScript kodini brauzerga yuboradi. Quyida, bu qanday ishlashi haqida yaxshiroq tushuntiraman.

Ulanish sxemasiga qaytsam, ESP01ni quvvatlantirish uchun 3v3 kuchlanish regulyatoriga ulangan 5 voltli kalitni qo'ydim. Bizda hali ham to'rtta pinli DHT22 bor. Ulardan biri, ma'lumotlar ishlatilmaydi. Shu bilan birga, tortishish qarshiligi talab qilinadi.

2 -qadam: kod

Birinchi qadam, biz ishlatadigan liblarni kiritishdir. DHT libini Sketch opsiyasi> Kutubxonani qo'shish> Kutubxonalarni boshqarish orqali qo'shish mumkin.

Ochilgan oynada DHT sensor kutubxonasini toping.

Shundan so'ng, biz ESP8266WebServer tipidagi o'zgaruvchini yaratdik, u bizning serverimiz bo'ladi va HTTP so'rovlariga javob beradi (80 -port).

Shuningdek, biz parametrlari 0 (bu GPIO pin 0) va turi (bizning holatda DHT22) bo'lgan DHT o'zgaruvchisini yaratamiz.

#include #include #include #include // ESP8266WebServer -ni ishga tushirish // ESP8266 -ga tez javob beradigan ESP8266WebServer serveri (80); // DHT -ning turli xil variantlari, masalan, DHT dht (0, DHT22) haroratini o'zgartirish uchun ruxsat beradi;

3 -qadam: sozlash

O'rnatishda biz faqat jurnalga ega bo'lishimiz uchun Serialni ishga tushiramiz. Agar ESP8266 ketma -ket monitordan foydalanish uchun kompyuterga ketma -ket ulangan bo'lsa, bu sodir bo'ladi.

Biz ESP8266 -ni o'z tarmog'imizga ulaymiz. Bizning holatda, biz 87654321 parol bilan TesteESP tarmog'idan foydalanamiz, lekin siz buni ishlatayotgan tarmoqqa qarab o'zgartirishingiz kerak bo'ladi.

// Informize a Serial apenas caso esteja com or ESP8266 conectado ao computador pere a log log // aforiches de la este acontecendo com ESP8266 Serial.begin (115200); // ESP8266 buyrug'i bo'yicha ko'rsatmalar. // Yo'q, hech qanday savol yo'q 87654321. // Teskari aloqa Serial.println ("") ni kuzatib boring; Serial.print ("Konektando");

Biz ESP8266 tarmoqqa ulanishini kutamiz va u ulangandan so'ng tarmoq sozlamalarini yuboramiz. O'z tarmog'ingizga qarab o'zgartiring.

// Esperamos até que o módulo se conecte aà rede while (WiFi.status ()! = WL_CONNECTED) {kechiktirish (500); Serial.print ("."); } // IP -tuzatishni sozlash. Boshqa IPAddress ip (192, 168, 3, 11) mos keladi; IP -manzil shlyuzi (192, 168, 3, 1); IPAddress pastki tarmog'i (255, 255, 255, 0); Serial.print ("Configurando IP fixo para:"); Serial.println (ip); // WiFi.config konfiguratsiyasi (IP, shlyuz, pastki tarmoq);

Keyingi buyruqlar faqat ESP8266 kompyuterga ketma -ket ulangan bo'lsa, sizda ketma -ket monitordan fikrlar bo'ladi.

ESP8266 qabul qilingan IP -ni sozlamalarda bo'lgani kabi tekshirish mumkin.

// Mostramos yo'q monitor seriyali, chunki u yuqori sifatli yoki esp8266 ulangan bo'lishi mumkin, bu Serial.println ("") konfiguratsiyasini ta'minlaydi; Serial.println ("Connectado"); Serial.print ("IP:"); Serial.println (WiFi.localIP ());

Bu erda biz har bir so'rov uchun qaysi funktsiyalar bajarilishini aniqlashni boshlaymiz.

Quyidagi yo'riqnomada, har safar ESP8266 yo'l / haroratda GET turidagi HTTP so'rovini olganda, getTemperature funktsiyasi bajariladi.

// Aniq ta'riflar, bu sizning vazifangizni bajarishga imkon beradi. // Bu erda hech qanday ma'lumot olish mumkin emas https://192.168.2.8/temperature // (masalan, konfiguratsiyani o'rnatish) serverni ishga tushirish serverining "GetTemperature" funktsiyasi ("/harorat", HTTP_GET), getTemperature);

Boshqa bayonotda, har safar ESP8266 yo'lda / namlikda GET turidagi HTTP so'rovini olganda, getHumidity funktsiyasi bajariladi.

// Bu erda hech qanday ma'lumot olish mumkin emas https://192.168.2.8/ namlik // (masalan, serverni o'rnatish) serverni ishga tushirish serveri ("namlik" uchun). HTTP_GET, getHumidity);

Ushbu yo'riqnomada, har safar ESP8266 yo'l / monitorda GET turidagi HTTP so'rovini olganda, showMonitor funktsiyasi bajariladi.

ShowMonitor funktsiyasi harorat va namlik qiymatlarini aks ettiruvchi asosiy html -ni qaytarish uchun javobgardir.

// Bu erda hech qanday ma'lumot yo'q https://192.168.2.8/monitor // GET bo'lmaguncha // (bu sizning konfiguratsiyangizga bog'liq emas) showMonitor -ni ishga tushiradi. // Ma'lumotlarni qayta ishlashning asosiy vazifasi // haroratni o'zgartirish yoki o'chirish server.on ("monitor", HTTP_GET, showMonitor) ma'lumotlarini qayta yozish;

Bu erda so'ralgan yo'l topilmaganda bajarilishi kerak bo'lgan funktsiya ta'rifi.

// Muvaffaqiyatli mijozlar ro'yxatini ro'yxatdan o'tkazish server.onNotFound (onNotFound);

Bu erda biz ilgari 80 -portda e'lon qilgan serverimizni ishga tushiramiz.

Bu sozlashning oxiri.

// 80 server.begin () serverini ishga tushirish; Serial.println ("Servidor HTTP iniciado"); }

4 -qadam: Loop

ESP8266WebServer lib tufayli biz mijozlar borligini va so'rov yo'lini aniqlashimiz shart emas. Biz faqat handleClient () ni chaqirishimiz kerak, va ob'ekt har qanday mijoz so'rov yuborayotganligini tekshiradi va biz ilgari ro'yxatdan o'tgan tegishli funktsiyaga yo'naltiradi.

void loop () {// Server serveri.handleClient () ni tekshirish kerak; }

5 -qadam: So'rov topilmadi

Mijoz ro'yxatdan o'tmagan har qanday so'rovlarni bajarganda, bu biz ilgari kirgan funktsiyadir.

Funktsiya faqat 404 kodini (manba topilmaganda ko'rsatuv kod), qaytarilgan ma'lumotlar turini (oddiy matn bo'lsa) va "Topilmadi" so'zlari bo'lgan matnni qaytaradi.

// Funksiyalar aniqlanmagan bo'lsa, ro'yxatdan o'tish bekor qilinadi ()NotFound () {server.send (404, "matn/oddiy", "Topilmadi"); }

6 -qadam: haroratni qaytarish

Bu mijoz harorat rejimida GET so'rovini yuborganida harorat ma'lumoti bilan jsonni qaytaradigan funksiya.

// Mijozlar talablariga javob beradigan vazifalar bajarilmasligi uchun // hech qanday ma'lumot olmang https://192.168.2.8/temperature da temperatura através do módulo dht float t = dht.readTemperature (); // Crus um json com os dados da temperatura String json = "{" harorat / ":"+String (t)+"}"; // Envia yoki mijoz uchun 200 dan ortiq mijoz, server.send (200, "application/json", json) buyrug'ini bajaring. }

7 -qadam: namlikni qaytarish

Bu mijoz namlik / namlikda GET so'rovini yuborganida namlik ma'lumoti bilan jsonni qaytaradigan funksiya.

// Mijozlar talablariga javob beradigan vazifalar bajarilmasligi uchun // hech qanday ma'lumotni olmang https://192.168.2.8/ namlik (bo'sh joyni sozlash konfiguratsiyasi) bo'sh 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 = "{" namlik / ":"+String (h)+"}"; // Envia yoki mijoz uchun 200 dan ortiq mijoz, server.send (200, "application/json", json) buyrug'ini bajaring. }

8 -qadam: HTML

Bu mijoz kirish / monitorga kirganda html -ni qaytaradigan funksiya. Bu sahifa harorat va namlik qiymatlarini ko'rsatadi va vaqti -vaqti bilan ma'lumotlarni qayta yuklaydi. Va uslubi o'rtasida joylashgan qism

sahifaning ko'rinishini belgilaydi va uni xohlaganingizcha o'zgartirishingiz mumkin.

// Mijozlar uchun zarur bo'lgan vazifalar bajarilsa, // hech qanday ma'lumotni olmang https://192.168.2.8/monitor (bu sizning konfiguratsiyangizga bog'liq emas) showMonitor void showMonitor () {String html = "" "" ""

"DHT monitor"

"tana {"

"to'ldirish: 35 piksel;"

"fon rangi: #222222;" "}"

9 -qadam: HTML uslubining davomi

"h1 {" "rangi: #FFFFFF;" "font-family: sans-serif;" "}" "p {" "rangi: #EEEEEE;" "font-family: sans-serif;" "shrift o'lchami: 18 piksel;" "}" ""

Bu erda html -ning asosiy qismi bor. Unda bizda harorat va namlikni ko'rsatadigan ikkita paragraf mavjud. Paragraflarning identifikatorlariga e'tibor bering, chunki ular orqali biz talab qilingan talablardan keyin harorat va namlik qiymatlarini kiritish uchun ushbu paragraflarni tiklaymiz.

DHT monitor

Harorat:

Namlik:

10 -qadam: JavaScript

Bu erda biz vaqti -vaqti bilan harorat va namlik qiymatlarini o'qiy oladigan skriptni aniqlashni boshlaymiz. Refresh () funktsiyasi refreshTemperature () va refreshHumdity () funktsiyalarini chaqiradi va setInterval yangilanish funktsiyasini har 5000 millisekundda (5 soniya) chaqiradi.

"yangilash ();" "setInterval (yangilash, 5000);" "funktsiyani yangilash ()" "{" "refreshTemperature ()" "refreshHumidity ();" "}"

RefreshTemperature () funktsiyasi haroratda so'rov yuboradi, json tarkibidagi ma'lumotlarni tahlil qiladi va paragrafga id haroratini qo'shadi.

"refreshTemperature () funktsiyasi" "" "" xmlhttp = yangi XMLHttpRequest (); " "xmlhttp.onreadystatechange = function () {" "if (xmlhttp.readyState == XMLHttpRequest. DONE && xmlhttp.status == 200) {" "document.getElementById ('harorat'). innerHTML = 'Harorat:' + JSON. tahlil (xmlhttp.responseText). harorat + 'C'; " "}" "};" "xmlhttp.open (" Oling "," https://192.168.2.8/temperatur ", to'g'ri);" "xmlhttp.send ();" "}"

RefreshHumidity () funktsiyasi namlik uchun so'rov yuboradi, json tarkibidagi ma'lumotlarni tahlil qiladi va paragrafga namlik idini qo'shadi. Va shu bilan biz / monitorda so'rovlarni yuboradigan html -ni tugatamiz.

"refreshHumidity () funktsiyasi" "" {"" var xmlhttp = new XMLHttpRequest (); " "xmlhttp.onreadystatechange = function () {" "if (xmlhttp.readyState == XMLHttpRequest. DONE && xmlhttp.status == 200) {" "document.getElementById ('namlik'). innerHTML = 'Namlik:' + JSON. tahlil (xmlhttp.responseText). namlik + '%'; " "}" "};" "xmlhttp.open (" Oling "," https://192.168.2.8/ namlik ", to'g'ri);" "xmlhttp.send ();" "}"

"";

11 -qadam: ShowMonitor -ni tugatish

Endi biz yuboradigan html satri tayyor, biz uni mijozga yuborishimiz mumkin. Bu showMonitor funktsiyasini va kodni yakunlaydi.

// Envia yoki html mijoz uchun 200 dan ortiq, server.send (200, "text/html", html) buyrug'ini bajaring. }

12 -qadam: Sinov

Sinov
Sinov

Endi brauzeringizni oching va https://192.168.2.8/monitor kiriting (konfiguratsiyangizga qarab sizga boshqa ip kerak bo'lishi mumkin).

Tavsiya: