Cuprins:

Sistem inteligent de monitorizare a vremii IoT folosind NodeMCU: 11 pași
Sistem inteligent de monitorizare a vremii IoT folosind NodeMCU: 11 pași

Video: Sistem inteligent de monitorizare a vremii IoT folosind NodeMCU: 11 pași

Video: Sistem inteligent de monitorizare a vremii IoT folosind NodeMCU: 11 pași
Video: Smart science IoT kit - Hai sa monitorizam calitatea aerului pe care il respiram 2024, Iulie
Anonim
Sistem inteligent de monitorizare a vremii IoT utilizând NodeMCU
Sistem inteligent de monitorizare a vremii IoT utilizând NodeMCU

S-ar putea să fiți conștienți de stația meteo tradițională; dar v-ați întrebat vreodată cum funcționează de fapt? Deoarece stația meteo tradițională este costisitoare și voluminoasă, densitatea acestor stații pe unitate de suprafață este foarte mică, ceea ce contribuie la inexactitatea datelor. Vă explic cum: Să presupunem că o stație este situată în mijlocul unui oraș și că este singura stație care se află în raza 'x' metru, poate fi ușor părtinitoare dacă există un agent cauzator de poluare în apropiere a stației care arată întreaga suprafață a razei „x” a poluării, deoarece stația respectivă este responsabilă de determinarea datelor meteo a întregii zone.

Pentru a depăși această problemă, densitatea modulelor trebuie mărită, ceea ce este posibil numai dacă modulele sunt mai ieftine și au o amprentă mai mică decât cea existentă.

Acesta este motivul pentru care soluția propusă este soluția perfectă pentru această problemă, costă mai puțin de 10 USD și, de asemenea, se sprijină ușor pe palma mea.

Cum functioneaza…

Există 3 părți majore ale acestui proiect.

Partea dispozitivului:

Dispozitivul este un modul IoT prezentat în imagine care trimite datele meteo către server la fiecare interval de timp „x”. Datele includ datele meteo efective, locația geografică a modulului; adică coordonatele sale, adresa MAC; pentru a identifica în mod unic dispozitivul, versiunea de firmware pe care rulează în prezent. Partea dispozitivului cuprinde N-module distribuite în zonă contribuind în mod activ la server.

Partea de server:

După cum sugerează și numele, este serverul centralizat care gestionează mai multe operațiuni precum primirea datelor de la module și stocarea acestora în baza de date, actualizarea modulului cu cel mai recent firmware dacă rulează pe o versiune mai veche, trimiterea datelor meteo către client la cerere.

Partea client / utilizator:

Utilizatorul final solicită datele meteo de la server. Clientul trimite locația curentă și pe baza locației, serverul calculează distanța dintre client și toate modulele și trimite datele meteo ale celui mai apropiat modul către client, care este considerat corect.

Provizii

  • NodeMCU (ESP8266-12E)
  • DHT11 (senzor de umiditate și temperatură)
  • BMP180 (senzor de presiune și temperatură)
  • MQ-135 (Senzor index calitatea aerului)
  • Cablu USB (pentru a încărca programul)
  • Alimentare de 5 volți
  • Condensatoare (Opțional: pentru a fi plasat paralel cu linia de alimentare)
  • Arduino IDE (Pentru a depana și încărca programul)
  • Aplicație POSTMAN (opțional: pentru depanarea API-ului)
  • Un site web (pentru a găzdui serverul PHP și MySQL)

Pasul 1: lipiți toate componentele și încărcați programul pe NodeMCU

Lipiți toate componentele și încărcați programul pe NodeMCU
Lipiți toate componentele și încărcați programul pe NodeMCU
Lipiți toate componentele și încărcați programul pe NodeMCU
Lipiți toate componentele și încărcați programul pe NodeMCU

Lipiți toate componentele pe NodeMCU așa cum se arată în schema de circuite de pe o placă de perfecționare. De asemenea, lipiți un condensator în paralel cu liniile electrice, deoarece tensiunea crește în timpul transmiterii și primirii active a datelor.

După terminarea lucrărilor de lipire, încărcați codul furnizat în fișierul „code.c”.

Notă: Nu uitați să înlocuiți acreditările cu propriile acreditări. De asemenea, plasați fișierul numit „html_file.h” în dosarul de schițe arduino. Toate fișierele antet utilizate în acest proiect pot fi găsite aici

Caracteristicile codului:

Punct de acces: Deoarece este dificil să programați fiecare modul cu acreditările în producția de masă, modulul găzduiește o pagină web la prima încărcare pentru a accepta acreditările WiFi la care modulele trebuie să se conecteze și stochează în EEPROM pentru utilizare ulterioară.

Odată ce acreditările sunt configurate, NodeMCU verifică acreditările EEPROM și se conectează la acreditările WiFi prezente în EEPROM.

După conectarea cu succes la WiFi, NodeMCU începe să încărce datele pe server la fiecare interval de timp „x”, datele includ date despre vreme, adresa MAC a modulului, versiunea firmware-ului, locația geografică a dispozitivului.

Actualizare OTA: Modulul verifică, de asemenea, actualizarea firmware-ului în fiecare zi la o oră specificată în cod. Această caracteristică este utilă, deoarece nu este posibil ca niciun producător să continue și să schimbe programul unui modul individual în cazul în care vor fi făcute modificări.

Cronometru Watchdog: Atlast trebuie să existe o modalitate de a se recupera fără intervenția umană dacă se blochează sau se blochează. Acest lucru poate fi realizat folosind cronometrul Watchdog. Modul în care funcționează este: Există o sub-rutină de întrerupere care rulează în fiecare secundă. ISR crește contorul de fiecare dată când se execută și verifică dacă contorul a atins numărul maxim. Odată ce contorul atinge valoarea maximă, modulul se resetează presupunând că sa prăbușit. În funcționare normală, contorul este întotdeauna resetat înainte de a atinge numărul maxim.

Pasul 2: Configurarea SQL Server

Configurarea SQL Server
Configurarea SQL Server

Configurarea SQL Server este, de asemenea, foarte simplă. Doar creați o bază de date în serverul SQL și importați setarea importând fișierul numit "database_structure.txt". Puteți găsi fișierul în acest pas. Deoarece instructabilul nu permite încărcarea fișierelor „.sql”, am redenumit fișierul în „.txt”.

Notă: Redenumiți fișierul din „.txt” în „.sql”.

Pasul 3: Configurarea serverului de fișiere

Configurarea serverului este foarte ușoară dacă dețineți un site web și acesta este găzduit online. Nu voi parcurge întreaga procedură de configurare și găzduire a unui site web, deoarece este dincolo de sfera acestui tutorial. Dar îl puteți găzdui în propriul computer ca localhost pentru a încerca funcționarea fișierelor.

Deoarece Instructable nu permite încărcarea fișierelor PHP, am redenumit fișierele în „.txt”.

Notă: Vă rugăm să redenumiți extensia fișierelor la „.php”. De asemenea, nu uitați să modificați acreditările fișierului „config.php”.

Încărcați fișierele pe server și sunteți bine să plecați.

Vă voi oferi informații scurte despre fișierele PHP.

db_config.php:

În acest fișier, sunt stocate toate acreditările necesare pentru conectarea la serverul SQL.

db_connect:

În acest fișier este prezentă clasa necesară pentru conexiunea la baza de date.

insert.php:

NodeMCU numește acest fișier PHP pentru încărcarea datelor pe server folosind metoda GET. Acest fișier este, de asemenea, responsabil pentru stocarea acelorași date pe serverul SQL.

retrieve.php:

Utilizatorul / Clientul apelează acest PHP folosind metoda GET. Serverul calculează distanța dintre utilizator și toate modulele. Apoi, datele celui mai apropiat modul sunt trimise ca răspuns la client în format JSON / XML, după cum preferă clientul.

update.php:

Acest fișier PHP este apelat de modul în fiecare zi la o anumită oră pentru a verifica dacă modulul rulează cea mai recentă versiune a firmware-ului. Plasați cel mai recent fișier „.bin” în serverul de fișiere și specificați directorul fișierului în variabila fișierului.

Dacă aceste multe fișiere par descurajante la început, am inclus documentația pentru utilizator în pasul următor.

Pasul 4: Documentația utilizatorului

Documentația utilizatorului
Documentația utilizatorului
Documentația utilizatorului
Documentația utilizatorului

Introducere:

API-ul Weather oferă o interfață simplă pentru a solicita datele meteo pentru locațiile de pe suprafața pământului. Solicitați informații meteo pentru o anumită pereche de latitudine / longitudine cu formatul de ieșire specificat. API returnează temperatura, umiditatea, presiunea și indicele calității aerului care au fost înregistrate ultima dată de cel mai apropiat modul din locația solicitată.

Înainte de a începe:

Acest document este destinat dezvoltatorilor de site-uri web și mobile care doresc să includă informații meteo pe o aplicație care este în curs de dezvoltare. Acesta introduce utilizarea folosind API-ul și materialul de referință pentru parametrii disponibili.

Cereri de date meteo:

Cererile API meteo sunt construite ca un șir URL. API-ul returnează date meteo pentru un punct de pe pământ, specificat de o pereche de latitudine / longitudine. Rețineți că precizia datelor meteo este direct proporțională cu densitatea modulelor plasate într-o zonă.

O cerere API Meteo ia următoarea formă:

example.com/retrieve.php?lat=25.96446&lon=53.9443&format=json

În cazul în care formatul de ieșire (format) poate fi una dintre următoarele valori:

  • JSON (recomandat), indică ieșirea în JavaScript Object Notation (JSON); sau
  • XML, indică ieșirea în XML, înfășurată în nod.

Parametri de solicitare:

Așa cum este standard în toate adresele URL, parametrii sunt separați utilizând caracterul ampersand (&). Lista parametrilor și valorile posibile ale acestora sunt indicate mai jos.

Parametrii necesari:

  • lat: Reprezintă latitudinea unei locații de căutat. (de ex. lat = 19.56875)
  • lon: Reprezintă o longitudine a unei locații de căutat. (de ex. lon = 72.97568)

Parametrii opționali:

format: Specifică formatul de ieșire a răspunsului datelor meteo. Poate fi JSON sau XML. Valoarea implicită este JSON. (de exemplu, format = json sau format = xml)

Răspunsuri la vreme:

Pentru fiecare solicitare validă, serviciul de fus orar va returna un răspuns în formatul indicat în adresa URL a solicitării. Fiecare răspuns va conține următoarele elemente:

  • succes: o valoare care indică starea răspunsului.

    • 0: Negativ; indică faptul că solicitarea a fost greșită.
    • 1: afirmativ; indică faptul că solicitarea a avut succes.
  • mesaj: un șir care indică motivul malformității cererii. Disponibil numai când starea este negativă.
  • date: o matrice cu parametri meteorologici multipli.

    • temp: datele de temperatură.
    • zumzet: datele privind prezența umidității.
    • pres: datele de presiune absolută.
    • aqi: indicele actual al calității aerului.

Exemplele de răspuns ale ambelor formate pot fi văzute în imagini.

Pasul 5: Configurarea modulului

Configurare modul
Configurare modul
Configurare modul
Configurare modul

Un punct de acces este creat și o pagină web este găzduită pe o adresă IP (implicit: 192.168.4.1) pentru a primi acreditările de la managerul / utilizatorul dispozitivului la prima încărcare sau dacă modulul nu găsește acreditările deja stocate în EEPROM.

Utilizatorul trebuie să introducă SSID-ul și parola la care utilizatorul dorește să se conecteze modulul. Latitudinea și longitudinea se completează automat dacă permiteți browserului să acceseze locația.

Odată introduse toate detaliile, faceți clic pe butonul „TRIMITE”, apoi toate acreditările sunt scrise în EEPROM a modulului.

Acest pas este foarte crucial deoarece, în timp ce producem în masă modulele, nu este fezabil să programăm toate modulele cu datele de locație exacte și acreditările WiFi. De asemenea, nu este recomandabil să codificăm hard acreditările din program, deoarece dacă trebuie să mutăm modulul într-o altă locație sau dorim să schimbăm acreditările WiFi, va trebui să reprogramăm modulul. Pentru a evita această problemă, funcția de configurare inițială este implementată.

Pasul 6: Acum este timpul să contribuiți la date în cloud

Acum este timpul să contribuiți la date în cloud
Acum este timpul să contribuiți la date în cloud
Acum este timpul să contribuiți la date în cloud
Acum este timpul să contribuiți la date în cloud

După ce toți pașii anteriori sunt finalizați, acum este timpul să lăsați modulul să încarce datele pe server. Începe automat încărcarea după ce ați salvat acreditările.

Apelează „insert.php” ca apel API cu trecerea tuturor parametrilor de trimis în metoda GET.

Fragmentul de cod de mai jos arată cum sunt procesați parametrii.

if (isset ($ _ GET ['temp']) && isset ($ _ GET ['hum']) && isset ($ _ GET ['pres']) && isset ($ _ GET ['aqi']) && isset ($ _ GET ['mac']) && isset ($ _ GET ['lat']) && isset ($ _ GET ['lon']))) 2. {3. // programul principal 4.}

Astfel, toate modulele încep să încarce datele.

Notă: Reduceți frecvența de încărcare în cod dacă credeți că serverul este supraîncărcat.

Pasul 7: Actualizare Over the Air (OTA)

Actualizare Over the Air (OTA)
Actualizare Over the Air (OTA)

După ce modulul este configurat și începe să încarce datele, acesta verifică dacă există actualizări de firmware în fiecare zi la o anumită oră menționată în program. Dacă găsește vreunul, descarcă și clipește fișierul binar din acesta. Și dacă nu, operația normală de încărcare a datelor este continuată.

Pentru a verifica dacă există o nouă actualizare, modulul apelează „update.php” trimițând adresa MAC în antetul cererii sale. Serverul verifică apoi dacă acea adresă MAC specifică are o nouă actualizare, dacă da, apoi trimite fișierul binar al celui mai recent firmware ca răspuns.

De asemenea, verifică toate anteturile necesare pentru autentificarea de bază a modulului.

Pasul 8: Cum poate utilizatorul / clientul să acceseze datele …

Modul în care utilizatorul / clientul poate accesa datele …
Modul în care utilizatorul / clientul poate accesa datele …
Modul în care utilizatorul / clientul poate accesa datele …
Modul în care utilizatorul / clientul poate accesa datele …
Modul în care utilizatorul / clientul poate accesa datele …
Modul în care utilizatorul / clientul poate accesa datele …

Este destul de simplu să accesați datele de pe server. Doar apelând „retrieve.php”, vom primi datele despre vreme ca răspuns în format JSON. După aceea, este doar o chestiune de analiză a datelor JSON pentru a accesa elementele individuale. Similar este și cu răspunsul XML. Utilizatorul poate specifica întotdeauna formatul de răspuns preferat în care utilizatorul este confortabil să lucreze. Dacă utilizatorul nu specifică formatul, formatul implicit este JSON.

O solicitare eșantion este făcută folosind instrumentul POSTMAN pentru a verifica funcționarea API-ului.

Un exemplu de analiză a răspunsului JSON în javascript este prezentat în fragmentul de cod de mai jos.

var url = "https://example.com/retrieve.php?lat=19.044848&lon=72.8464373";function httpGet (theUrl) {var xmlHttp = new XMLHttpRequest (); xmlHttp.open ("GET", theUrl, false); // false pentru cerere sincronă xmlHttp.send (nul); returnează xmlHttp.responseText; } var myVar = httpGet (url); var obj = JSON.parse (myVar); document.getElementById ("aqi"). innerHTML = obj.data [0].aqi; document.getElementById ("temperature"). innerHTML = Math.round (obj.data [0].temp) + "° C"; document.getElementById ("temp"). innerHTML = Math.round (obj.data [0].temp) + "° C"; document.getElementById ("umiditate"). innerHTML = Math.round (obj.data [0].hum) + "%"; document.getElementById ("presiune"). innerHTML = Math.round (obj.data [0].pres) + "mb";

Codul sursă al paginii HTML de exemplu care analizează răspunsul JSON este disponibil la sfârșitul acestui pas.

Notă: schimbați extensia fișierului la „.html”.

Pasul 9: Limitări ale acestui proiect

  • Proiectul folosește GET pentru a trimite datele; chiar dacă nu se ocupă de date sensibile, datele pot fi manipulate cu ușurință, deoarece nu au niciun mecanism pentru a verifica autenticitatea sursei, în afară de verificarea anteturilor, care pot fi ușor modificate și chiar și un dispozitiv normal poate fi falsificat să pară un modul meteo.
  • Deoarece modulul se bazează exclusiv și depinde de un alt punct de acces (WIFI) pentru a trimite datele care, în majoritatea cazurilor, ar fi ale altor organizații. Dacă, din orice motiv, punctul de acces nu funcționează, modulul nu ar putea trimite date.
  • Chiar dacă proiectul este construit pentru a crește precizia sistemului existent, senzorul disponibil pe piață este mai puțin precis decât se aștepta, ceea ce duce la eșecul principalului său scop.
  • În timp ce planificam proiectul, am planificat să includ un mod în care serverul să medieze valoarea datelor pe baza locației pentru corectarea erorilor. Dar, la implementarea acestei caracteristici, mi-am dat seama că este nevoie de niște API-uri terțe pentru a traduce coordonatele în regiuni geografice.

Pasul 10: Îmbunătățiri suplimentare care pot fi aduse acestui proiect

  • Precizia modulului poate fi îmbunătățită și mai mult prin adaptarea specială a senzorilor pentru scopul specific în loc de utilizarea modulului generic disponibil pe piață.
  • Modulul poate fi modificat pentru a funcționa și mai independent, utilizând un cip special care comunică fără fir cu turnurile celulare pentru a trimite datele, îmbunătățind astfel toleranța la erori.
  • Panoul solar și sistemul de baterii pot fi utilizate împreună cu modul de somn profund al ESP, îmbunătățind astfel eficiența energiei și făcându-l mai independent de o sursă de alimentare externă.
  • POST poate fi utilizat pentru a trimite date cu un anumit mecanism de autentificare, cum ar fi utilizarea codurilor ciclice pentru fiecare transmisie de date.
  • În loc de NodeMCU, care este o placă de prototipare, putem folosi un microcontroler personalizat în producția în masă, care nu numai că reduce costul, ci face și cea mai bună utilizare a resurselor sistemului.
  • Împreună cu API-ul de geolocalizare Google și conectarea la orice WIFI deschis disponibil, modulul poate funcționa fără a-l configura; gata să transmită date din fabrică, fără niciun fel de configurare necesară.

Pasul 11: Câteva cuvinte pentru public

Câteva cuvinte pentru public
Câteva cuvinte pentru public

Hei băieți, îmi dau seama că nu este deloc un tutorial pentru începători, deoarece nu am menționat fiecare detaliu care trebuie acoperit. Și, de asemenea, acest proiect este foarte vast pentru a fi acoperit într-un Instructable. Totuși, am încercat din răsputeri să acopăr fiecare aspect important al proiectului. Știu, de asemenea, că un videoclip care să prezinte funcționarea proiectului ar fi fost cu adevărat grozav, dar, din moment ce acesta este primul meu instructable și, sincer să fiu, aceasta este prima mea publicație de ceva similar cu acesta, eram destul de nervos să mă aflu în fața unui aparat foto.

Dacă aveți nevoie de ajutor în realizarea acestui proiect sau ceva similar cu acesta, contactați-mă la [email protected] sau puteți renunța la un comentariu ca întotdeauna. Voi încerca să vă ajut pe voi, pe cât pot.

Mulțumesc!!

Recomandat: