Мазмуну:

ESP8266: Температураны жана нымдуулукту кантип көзөмөлдөө керек: 12 кадам
ESP8266: Температураны жана нымдуулукту кантип көзөмөлдөө керек: 12 кадам

Video: ESP8266: Температураны жана нымдуулукту кантип көзөмөлдөө керек: 12 кадам

Video: ESP8266: Температураны жана нымдуулукту кантип көзөмөлдөө керек: 12 кадам
Video: MAX6675 Температура термопары через WiFi с ESP8266 NodeMCU D1 Mini 2024, Ноябрь
Anonim
Image
Image
Ассамблея
Ассамблея

Бүгүнкү үйрөткүчтө биз DHT22 сенсорунун температурасы жана нымдуулугу үчүн 01 конфигурациясындагы ESP8266 ESP-01 колдонобуз (болгону 2 GPIO менен). Мен сизге Arduino менен электр схемасын жана ESP программалоо бөлүгүн көрсөтөм. Мисал жөнөкөй, түшүнүүгө оңой, ошондой эле видеодо чогултууга жардам берүү үчүн PDF менен коштолот.

Дизайнда бизде ESP01 бар, 110 же 220ны 5 вольтко айландыруучу булак, 3v3 чыңалуу жөндөгүчү жана DHT22, бул сенсор. Смартфондун экранында ESP тарабынан берилген JavaScript кодунан тышкары жергиликтүү IP дарегиңиз болот. Бул экран температуранын жана нымдуулуктун параметрлерин алат жана бул баалуулуктарды басып чыгарат, алар ар бир беш секунд сайын жаңыртылып турат. Бул үчүн телефондордо жана планшеттерде эч кандай колдонмолордун кереги жок, бул Android OS жана IOS экөөнө тең тиешелүү.

1 -кадам: Ассамблея

Электр схемасы абдан жөнөкөй, ошондой эле ESP01ди сервер катары камтыган жыйындын бөлүгү. ESPO1 Arduino болгондой программаланат: C тили аркылуу. Мен коддун бир бөлүгү браузерден басылганын белгилейм. Бул браузерге JavaScript кодун жөнөтөт дегенди билдирет. Төмөндө, мен бул кантип иштээрин жакшыраак түшүндүрөм.

Электр схемасына кайтып келип, ESP01ди иштетүү үчүн 3v3 чыңалуу жөндөгүчүнө туташкан 5 вольттуу которулган булакты койдум. Бизде дагы төрт казык менен DHT22 бар. Булардын бири, маалыматтар колдонулбайт. Ошентсе да, бул үчүн каршылаш резистор керек.

2 -кадам: Код

Биринчи кадам - биз колдоно турган либдерди кошуу. DHT lib эскиз опциясы> Китепкана кошуу> Китепканаларды башкаруу аркылуу кошсо болот …

Ачылган терезеде DHT сенсор китепканасын издеңиз.

Андан кийин, биз ESP8266WebServer түрүнүн өзгөрмөсүн түздүк, ал биздин сервер болот жана HTTP сурамдарына жооп берет (порт 80).

Биз ошондой эле 0 параметрлери бар DHT өзгөрмөсүн түзөбүз (бул GPIO пин 0) жана түрү (биздин учурда DHT22).

#кошуу #кошуу #кошуу #кошуу // ESP8266WebServer сервисинин мүмкүнчүлүктөрү // ESP8266 жана жооп берүүчү ESP8266WebServer сервери (80); // DHTдин ар кандай варианттары контролдоо үчүн зарыл болгон нерселердин бири // DHT dht (0, DHT22);

3 -кадам: Орнотуу

Орнотууда биз серияны журналга ээ болуу үчүн гана баштайбыз. Бул ESP8266 сериялык мониторду колдонуу үчүн сериал аркылуу компьютерге туташкан учурда пайда болот.

Биз ESP8266 тармагына туташтырабыз. Биздин учурда, биз TesteESP тармагын 87654321 сырсөзү менен колдонобуз, бирок сиз муну сиз колдонгон тармакка жараша өзгөртүүгө туура келет.

// ESP8266 сериясындагы информациялоону жүргүзүү же эсепке алуу же эсепке алуу // ESP8266 Serial.begin (115200); // ESP8266 үчүн нускамалар. // No nosso caso o nome da rede é TesteESP e a senha vé 87654321. // Маалыматты алмаштыруу WiFi.begin ("TesteESP", "87654321"); // Пикирлер сериялык Serial.println ("") мониторинги; Serial.print ("Conectando");

Биз ESP8266нын тармакка туташуусун күтөбүз, ал туташкандан кийин биз тармактын жөндөөлөрүн жөнөтөбүз. Тармагыңызга жараша өзгөртүңүз.

// Esperamos até que que módulo se conecte aà rede while (WiFi.status ()! = WL_CONNECTED) {кечигүү (500); Serial.print ("."); } // IP оңдоону конфигурациялоо. Башка IPAddress IP (192, 168, 3, 11) IP -даректерин өзгөртүү; IPAddress шлюзу (192, 168, 3, 1); IPAddress субнети (255, 255, 255, 0); Serial.print ("Configurando IP fixo para:"); Serial.println (ip); // WiFi конфигурациясын конфигурациялоо (ip, шлюз, субнет);

Кийинки буйруктар сизде ESP8266 компьютерге сериал аркылуу туташкан учурда гана болот, андыктан сизде сериялык монитордон пикир бар.

Сиз ESP8266 алган IP текшере аласыз, бул жөндөөлөрдөгүдөй экенин текшерүү үчүн.

// Mostramos жок Monitor Serial o ip com o qual or esp8266 se conectou for your está de acordo com configuramos Serial.println (""); Serial.println ("Connectado"); Serial.print ("IP:"); Serial.println (WiFi.localIP ());

Бул жерде биз ар бир суроо үчүн кайсы функциялар аткарыларын аныктай баштайбыз.

Төмөнкү нускамада, ESP8266 жол / температурада GET түрүндөгү HTTP суранычын алган сайын, getTemperature функциясы аткарылат.

// Активдүү аныктамалар сизди кызыктырат. // Эч нерсе талап кылынбайт https://192.168.2.8/temperature алуу үчүн https://192.168.2.8/temperature //, getTemperature);

Бул башка билдирүүдө, ESP8266 жол / нымдуулукта GET түрүндөгү HTTP суранычын алган сайын, getHumidity функциясы аткарылат.

// Эч кандай шарт жок https://192.168.2.8/ humidity // GET жок алуу (https://192.168.2.8/ humidity // HTTP_GET, getHumidity);

Бул нускамада, ESP8266 жол / монитордо GET түрүндөгү HTTP суранычын алган сайын, showMonitor функциясы аткарылат.

ShowMonitor функциясы температуранын жана нымдуулуктун маанилерин көрсөтө турган негизги htmlди кайтаруу үчүн жооптуу.

// Nesse caso quando houver uma recuisção http to tipo GET no caminho https://192.168.2.8/monitor // (pode ser out ip ip dependendo da sua configuração) a função showMonitor сериясында. // Негизги функциялар кайра иштетилгенден кийин негизги маанилерге ээ болот // температура да, үмүт да сервер.on ("/монитор", HTTP_GET, showMonitor) темптеринин маалыматтарын жаңыртып турат;

Бул жерде суралган жол табылбай калганда аткарылышы керек болгон функция аныктамасы.

// Активдүү функциялар аткарылганда, сиз кардарды каттоону талап кыласыз, server.onNotFound (onNotFound);

Бул жерде биз мурда 80 портунда жарыялаган серверибизди баштайбыз.

Бул орнотуунун аягы.

// 80 server.begin () серверине кирүү; Serial.println ("Servidor HTTP iniciado"); }

4 -кадам: Loop

Lib ESP8266WebServerдин жардамы менен, эгер кардарлар бар болсо жана сурамдын жолу кандай болсо, текшерүүдөн өтүүнүн кажети жок. Биз жөн гана handleClient () чакырышыбыз керек, жана объект кандайдыр бир кардар кандайдыр бир суроо -талап кылып жаткандыгын текшерет жана биз мурда катталган тиешелүү функцияга багытталат.

void loop () {// Алгоритмдин кардарларынын серверин текшерүү.handleClient (); }

5 -кадам: Сурам табылган жок

Бул кардар катталбаган сурамдарды бергенде аткаруу үчүн биз мурун киргенбиз.

Функция 404 кодун (ресурс табылбаган учурдагы демейки код), кайтарылган маалыматтын түрүн (жөнөкөй текстте) жана "Табылган жок" деген текстти гана кайтарат.

// FunNão que a némosos de la de los de los de los de los de los de la nesto de registrado void onNotFound () {server.send (404, "text/plain", "Not Found"); }

6 -кадам: Температураны кайтаруу

Бул кардар / температурада GET сурамын бергенде, jsonду температура маалыматы менен кайтара турган функция.

// Функцияларды аныктоо үчүн сиз кардарыңыз менен иштешиңиз керек // бул жерде эч кандай маалымат жок https://192.168.2.8/temperature da temperatura através módulo dht float t = dht.readTemperature (); // Cria um json com os dados da temperatura String json = "{" температура / ":"+Стринг (t)+"}"; // Envia o csondate 200 үчүн кардар, server.send (200, "application/json", json); }

7 -кадам: Нымдуулукту кайтаруу

Бул кардар / нымдуулукта GET өтүнүчүн билдиргенде, нымдуулук маалыматы менен json кайтарып бере турган функция.

// Функцияларды аныктоо үчүн сиз кардарыңыз менен иштешиңиз керек // бул жерде эч нерсе болбошу керек https://192.168.2.8/ humidity (pode ser ip ip dependendo da sua configuração) void getHumidity () {// Fazemos a leitura үмүттөндүргөн атравалар m = mdolo dht float h = dht.readHumidity (); // Cria um json com os dados да umidade String json = "{" нымдуулук / ":"+Стринг (h)+"}"; // Envia o json para cligo 200 үчүн, server.send (200, "application/json", json); }

8 -кадам: HTML

Бул кардар кирүүгө / мониторго барганда htmlди кайтара турган функция. Бул баракча температура менен нымдуулукту көрсөтөт жана мезгил -мезгили менен маалыматтарды кайра жүктөйт. Жана стили> ортосундагы бөлүк

беттин көрүнүшүн аныктайт, жана сиз каалагандай өзгөртө аласыз.

// Тапшырмалар аткарылганда, кардарлар үчүн зарыл болгон нерселердин бардыгы // https://192.168.2.8/monitor GET жок "" ""

"DHT Monitor"

"дене {"

"толтуруу: 35px;"

"background-color: #222222;" "}"

9 -кадам: HTML стилинин уландысы

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

Бул жерде бизде htmlдин негизги бөлүгү бар. Анда бизде температура менен нымдуулукту көрсөтө турган эки пункт бар. Абзацтардын идентификаторлоруна көңүл буруңуз, анткени алар аркылуу биз бул параграфтарды калыбына келтирип, талаптардан кийин температуранын жана нымдуулуктун маанилерин киргизебиз.

DHT Monitor

Температура:

Нымдуулук:

10 -кадам: JavaScript

Бул жерде биз мезгил -мезгили менен температуранын жана нымдуулуктун маанилерин окуй турган скриптти аныктай баштайбыз. Refresh () функциясы refreshTemperature () жана refreshHumdity () функцияларын чакырат жана setInterval жаңыртуу функциясын ар 5000 миллисекундта (5 секунд) чакырат.

"refresh ();" "setInterval (жаңыртуу, 5000);" "function refresh ()" "{" "refreshTemperature ()" "refreshHumidity ();" "}"

RefreshTemperature () функциясы / температурада суроо -талап кылат, jsonдо камтылган маалыматты талдайт жана абзацка id температурасын кошот.

"function refreshTemperature ()" "{" "var xmlhttp = new XMLHttpRequest ();" "xmlhttp.onreadystatechange = function () {" "if (xmlhttp.readyState == XMLHttpRequest. DONE && xmlhttp.status == 200) {" "document.getElementById ('температура)). innerHTML =' Температура: ' + JSON. талдоо (xmlhttp.responseText).temperature + 'C'; " "}" "};" "xmlhttp.open ('GET', 'https://192.168.2.8/temperature', true);" "xmlhttp.send ();" "}"

RefreshHumidity () функциясы / нымдуулукка суроо -талап кылат, jsonдо камтылган маалыматты талдайт жана параграфка id нымдуулугун кошот. Муну менен биз / монитордогу сурамдарды жөнөтө турган html аяктайбыз.

"function refreshHumidity ()" "{" "var xmlhttp = new XMLHttpRequest ();" "xmlhttp.onreadystatechange = function () {" "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 же html үчүн кардар 200гө жетет, server.send (200, "text/html", html) үчүн сиз өзүңүздү талап кыласыз. }

12 -кадам: Тестирлөө

Тестирлөө
Тестирлөө

Эми браузериңизди ачыңыз жана https://192.168.2.8/monitor киргизиңиз (конфигурацияңызга жараша башка IP керек болушу мүмкүн).

Сунушталууда: