Სარჩევი:

ESP8266: როგორ ვაკონტროლოთ ტემპერატურა და ტენიანობა: 12 ნაბიჯი
ESP8266: როგორ ვაკონტროლოთ ტემპერატურა და ტენიანობა: 12 ნაბიჯი

ვიდეო: ESP8266: როგორ ვაკონტროლოთ ტემპერატურა და ტენიანობა: 12 ნაბიჯი

ვიდეო: ESP8266: როგორ ვაკონტროლოთ ტემპერატურა და ტენიანობა: 12 ნაბიჯი
ვიდეო: ESP8266 + DHT22 + Blynk ტენიანობის და ტემპერატურის სენსრორი ქლაუდზე და ტელეფონში. ჩუქდება მულტიმეტრი 2024, ივლისი
Anonim
Image
Image
შეკრება
შეკრება

დღევანდელ გაკვეთილში ჩვენ გამოვიყენებთ ESP-01, რომელიც არის ESP8266 კონფიგურაციის 01-ში (მხოლოდ 2 GPIO), DHT22 სენსორის ტემპერატურისა და ტენიანობის კითხვისთვის. მე გაჩვენებთ ელექტრო სქემას და ESP პროგრამირების ნაწილს არდუინოსთან ერთად. მაგალითი არის მარტივი, ადვილად გასაგები და ასევე მოყვება PDF– ში გამოყენებული ვიდეოში ასამბლეის დასახმარებლად.

დიზაინში ჩვენ გვაქვს ESP01, წყარო, რომელიც გარდაქმნის 110 ან 220 5 ვოლტად, ძაბვის რეგულატორს 3v3 და DHT22, რომელიც არის სენსორი. სმარტფონის ეკრანზე თქვენ გექნებათ ადგილობრივი IP მისამართი ESP– ის მიერ მოწოდებული JavaScript კოდის გარდა. ეს ეკრანი მიიღებს ტემპერატურისა და ტენიანობის პარამეტრებს და დაბეჭდავს ამ მნიშვნელობებს, რომლებიც განახლდება ყოველ ხუთ წამში. ამისათვის თქვენ არ დაგჭირდებათ პროგრამები ტელეფონებსა და ტაბლეტებზე და ეს ეხება როგორც Android OS- ს, ასევე IOS- ს.

ნაბიჯი 1: შეკრება

ელექტრო სქემა საკმაოდ მარტივია, ისევე როგორც ნაწილი ასამბლეის შესახებ, რომელიც ჩართავს ESP01 როგორც სერვერს. ESPO1 დაპროგრამდება თითქოს არდუინო: C ენაზე. მე აღვნიშნავ, რომ კოდის ნაწილი დაბეჭდილია ბრაუზერიდან. ეს ნიშნავს, რომ ის აგზავნის JavaScript კოდს ბრაუზერში. ქვემოთ, მე უკეთ აგიხსნით, თუ როგორ მუშაობს ეს.

დავბრუნდი გაყვანილობის დიაგრამაზე, მე დავამატე 5 ვოლტიანი გადამრთველი წყარო, რომელიც დაკავშირებულია 3v3 ძაბვის რეგულატორთან ESP01- ის დასაყენებლად. ჩვენ ჯერ კიდევ გვაქვს DHT22 ოთხი ქინძისთავით. ერთი მათგანი, მონაცემები, არ გამოიყენება. თუმცა, ამას სჭირდება გამწევი რეზისტორი.

ნაბიჯი 2: კოდი

პირველი ნაბიჯი არის ლიბების ჩართვა, რომელსაც ჩვენ გამოვიყენებთ. DHT lib შეიძლება დაემატოს ესკიზის ვარიანტი> ბიბლიოთეკის ჩართვა> ბიბლიოთეკების მართვა…

ფანჯარაში, რომელიც იხსნება, მოძებნეთ DHT სენსორების ბიბლიოთეკა.

ამის შემდეგ, ჩვენ შევქმენით ცვლადი ტიპის ESP8266WebServer, რომელიც იქნება ჩვენი სერვერი და უპასუხებს HTTP მოთხოვნებს (პორტი 80).

ჩვენ ასევე ვქმნით DHT ცვლადს პარამეტრებით 0 (რაც არის GPIO pin 0) და ტიპი (ჩვენს შემთხვევაში DHT22).

#ჩართეთ #ჩართეთ #ჩართეთ #ჩართეთ // Criamos uma variável do tipo ESP8266WebServer რომ ეს შესაძლებელია იყოს ფუნქციები // que auxiliam na criação das rotas que o ESP8266 vai responder ESP8266WebServer server (80); // Variável do tipo DHT que possui funções para controlarmos o módulo dht // ნებადართული ტემპერატურისა და umidade DHT dht (0, DHT22);

ნაბიჯი 3: დაყენება

დაყენებისას ჩვენ დავიწყებთ სერიალის ინიციალიზაციას მხოლოდ ისე, რომ ჩვენ გვქონდეს ჟურნალი. ეს მოხდება, თუ ESP8266 უკავშირდება კომპიუტერს სერიული საშუალებით სერიული მონიტორის გამოსაყენებლად.

ჩვენ დავაკავშირებთ ESP8266 ჩვენს ქსელს. ჩვენს შემთხვევაში, ჩვენ ვიყენებთ TesteESP ქსელს პაროლით 87654321, მაგრამ თქვენ მოგიწევთ ამის შეცვლა ქსელის მიხედვით, რომელსაც თქვენ იყენებთ.

// ინიციალიზაცია Serial apenas caso esteja com o ESP8266 conectado ao computador pela serla queira ter um log // para easyar 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 fixo. Você pode alterar conforme 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 configuração WiFi.config (ip, gateway, subnet);

შემდეგი ბრძანებები მხოლოდ იმ შემთხვევაშია, თუ თქვენ გაქვთ ESP8266 კომპიუტერთან დაკავშირებული სერიული საშუალებით, ასე რომ თქვენ გაქვთ უკუკავშირი სერიული მონიტორისგან.

თქვენ შეგიძლიათ შეამოწმოთ IP, რომელიც მიიღო ESP8266, რომ იგივე იყოს, როგორც პარამეტრებში.

// 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 ("კონექადო"); Serial.print ("IP:"); Serial.println (WiFi.localIP ());

აქ ჩვენ ვიწყებთ განსაზღვრას რომელი ფუნქციები შესრულდება თითოეული მოთხოვნისათვის.

ქვემოთ მოცემულ ინსტრუქციაში, ყოველ ჯერზე, როდესაც ESP8266 მიიღებს HTTP მოთხოვნას GET– ის ტიპის გზაზე / ტემპერატურაზე, მიიღება getTemperature ფუნქცია.

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

ამ სხვა განცხადებაში, ყოველ ჯერზე, როდესაც ESP8266 მიიღებს HTTP მოთხოვნას GET– ის ტიპის გზაზე / ტენიანობაში, getHumidity ფუნქცია შესრულდება.

// Nesse outo caso quando houver uma requisição http do tipo GET no caminho https://192.168.2.8/humidity // (pode ser out out ip dependendo da sua configuração) funchão getHumidity serada შესრულებული სერვერი. ("/ტენიანობა", HTTP_GET, getHumidity);

ამ ინსტრუქციაში, ყოველ ჯერზე, როდესაც ESP8266 მიიღებს HTTP მოთხოვნას GET– ის ტიპის გზაზე / მონიტორზე, ფუნქცია showMonitor შესრულდება.

ShowMonitor ფუნქცია პასუხისმგებელია მთავარი html- ის დაბრუნებაზე, რომელიც აჩვენებს ტემპერატურისა და ტენიანობის მნიშვნელობებს.

// Nesse caso quando houver uma requisição http do tipo GET no caminho https://192.168.2.8/monitor // (pode ser out out ip dependendo da sua configuração) funshão showMonitor será შესრულება. // Esta função retornará a página principal que mostrará os valores // da temperatura e da umidade e recarregará essas informações de tempos em tempos server.on ("/მონიტორი", HTTP_GET, showMonitor);

აქ არის ფუნქციის განმარტება, რომელიც უნდა შესრულდეს მაშინ, როდესაც მოთხოვნილი გზა არ არის ნაპოვნი.

// Aqui definimos qual função será შესრულება ნებისმიერ დროს ან კლიენტის მოთხოვნით, რომ არ იყოს რეგისტრირებული server.onNotFound (onNotFound);

აქ ჩვენ ვაყენებთ ჩვენს სერვერს, რომელიც ადრე გამოვაცხადეთ 80 პორტზე.

ეს არის კონფიგურაციის დასასრული.

// ოფიციალური სერვერი და პორტა 80 server.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 (ნაგულისხმევი კოდი, როდესაც რესურსი არ არის ნაპოვნი), დაბრუნებული მონაცემების ტიპი (უბრალო ტექსტის შემთხვევაში) და ტექსტი სიტყვებით "არ მოიძებნა".

// ფუნქცია, რომელიც განსაზღვრულია იმის შესახებ, თუ როგორ უნდა შეასრულოს იგი საჭიროებისამებრ, რომ რეგისტრაცია გაუქმდეს onNotFound () {server.send (404, "text/plain", "Not found"); }

ნაბიჯი 6: ტემპერატურის დაბრუნება

ეს არის ფუნქცია, რომელიც დააბრუნებს json- ს ტემპერატურის მონაცემებით, როდესაც კლიენტი GET მოთხოვნას / ტემპერატურაზე აკეთებს.

// ფუნქცია, რომელიც განსაზღვრულია, თუ როგორ უნდა შეასრულოს ის კლიენტებთან ერთად, რაც მოითხოვს მოთხოვნას // გააკეთეთ რეკომენდაცია არ მიიღოთ https://192.168.2.8/temperature (pode ser out out 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á შესრულებული 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 = "{" ტენიანობა / ":"+სიმებიანი (თ)+"}"; // 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 როდესაც კლიენტი მიდის წვდომა / მონიტორზე. ეს გვერდი აჩვენებს ტემპერატურისა და ტენიანობის მნიშვნელობებს და დროდადრო განაახლებს მონაცემებს. ნაწილი, რომელიც არის და და> სტილს შორის>

განსაზღვრავს გვერდის გარეგნობას და თქვენ შეგიძლიათ შეცვალოთ ის, როგორც გსურთ.

// ფუნქცია, რომელიც განსაზღვრავს თქვენს კლიენტებს, რომლებიც საჭიროებენ თქვენს მოთხოვნას // გააკეთეთ რეკომენდაცია არ მიიღოთ 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 = ახალი XMLHttpRequest ();" "xmlhttp.onreadystatechange = ფუნქცია () {" "if (xmlhttp.readyState == XMLHttpRequest. DONE && xmlhttp.status == 200) {" "document.getElementById (" ტემპერატურა "). innerHTML = 'ტემპერატურა:' + JSON ანალიზი (xmlhttp.responseText). ტემპერატურა + 'C'; " "}" "};" "xmlhttp.open (" GET "," https://192.168.2.8/temperature ", true);" "xmlhttp.send ();" "}"

RefreshHumidity () ფუნქცია ითხოვს / ტენიანობას, აანალიზებს json– ში არსებულ ინფორმაციას და აბზაცს ამატებს id ტენიანობას. და ამით, ჩვენ ვამთავრებთ html– ს, რომელსაც ჩვენ გამოგიგზავნით მოთხოვნებს / მონიტორში.

"ფუნქცია refreshHumidity ()" "{" "var xmlhttp = ახალი XMLHttpRequest ();" "xmlhttp.onreadystatechange = ფუნქცია () {" "if (xmlhttp.readyState == XMLHttpRequest. DONE && xmlhttp.status == 200) {" "document.getElementById (" ტენიანობა "). innerHTML = 'ტენიანობა:' + JSON parse (xmlhttp.responseText). ტენიანობა + '%'; " "}" "};" "xmlhttp.open (" GET "," https://192.168.2.8/humidity ", true);" "xmlhttp.send ();" "}"

"";

ნაბიჯი 11: ShowMonitor– ის დასრულება

ახლა, როდესაც სტრიქონი html– ით, რომელსაც ჩვენ გამოგიგზავნით, მზადაა, შეგვიძლია გავუგზავნოთ კლიენტს. ეს ასრულებს showMonitor ფუნქციას და კოდს.

// Envia o html para or 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: ტესტირება

ტესტირება
ტესტირება

ახლა გახსენით თქვენი ბრაუზერი და შეიყვანეთ https://192.168.2.8/monitor (შეიძლება დაგჭირდეთ განსხვავებული ip თქვენი კონფიგურაციის მიხედვით).

გირჩევთ: