Cuprins:
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-13 06:58
Am vrut să am o stație meteo acasă pentru ceva timp și una pe care toată lumea din familie să o poată verifica cu ușurință pentru temperatură și umiditate. Pe lângă monitorizarea condițiilor exterioare, am vrut să monitorizez și anumite camere din casă și atelierul meu de garaj. Asta ne-ar anunța când este un moment bun pentru a aerisi casa sau pentru a rula dezumidificatorul (plouă mult aici în timpul iernii). Ceea ce am creat este un sistem de senzori bazat pe ESP-Now, care raportează la un server web local pe care oricine îl poate verifica de pe computer sau telefon. Pentru telefon am scris ca o aplicație Android simplă pentru a face asta și mai ușor.
Pasul 1: Detalii de proiectare
Am vrut să am diverse stații de senzori pe care să le pot amplasa în locații diferite și să le raportez la o stație principală (sau hub) care să salveze informațiile. După ce am încercat diverse idei, am decis să folosesc protocolul ESP-Now de la Espressif, deoarece permite comunicarea rapidă direct între dispozitive. Puteți citi un pic despre ESP-Now aici și această repo GitHub a fost o mare parte din inspirația mea.
Prima imagine prezintă aspectul sistemului. Fiecare senzor își raportează măsurătorile către un dispozitiv gateway care transmite datele către serverul principal prin conexiune serială cu fir. Motivul este că protocolul ESP-Now nu poate fi activ în același timp cu conexiunea WIFI. Pentru ca un utilizator să acceseze pagina web, WIFI ar trebui să fie activat în orice moment, ceea ce face imposibilă utilizarea comunicărilor ESP-Now pe același dispozitiv. În timp ce dispozitivul gateway trebuie să fie un dispozitiv bazat pe Espressif (capabil de ESP-Now), serverul principal ar putea fi orice dispozitiv capabil să ruleze o pagină web.
Unele stații de senzori ar descărca bateriile (sau bateriile încărcate cu energie solară), iar altele ar avea pur și simplu energie electrică. Cu toate acestea, am vrut ca toți să folosească cât mai puțină energie posibil și tocmai aici este extrem de utilă funcția „deepsleep” disponibilă pentru dispozitivele ESP8266 și ESP32. Stațiile senzorului se trezeau periodic, făceau măsurători și le trimiteau la dispozitivul gateway și se întorceau în repaus pentru o perioadă de timp preprogramată. Perioada lor de veghe de numai aproximativ 300 ms la fiecare 5 minute (în cazul meu) le reduce semnificativ consumul de energie.
Pasul 2: senzori
Există diferiți senzori din care puteți alege pentru măsurarea parametrilor de mediu. Am decis să rămân doar cu senzori capabili de comunicații I2C, deoarece permitea măsurători rapide și ar funcționa pe oricare dintre dispozitivele pe care le aveam. În loc să lucrez direct cu circuite integrate, am căutat module gata de utilizare care aveau aceleași pin-out-uri pentru a-mi simplifica proiectele. Am început doar cu dorința de a măsura temperatura și umiditatea și, prin urmare, am ales un modul bazat pe SI7021. Mai târziu am dorit un senzor care să poată măsura și presiunea și am decis să încerc modulele de senzori bazate pe BME280. Pentru unele locații am vrut chiar să monitorizez nivelurile de lumină, iar modulul BH1750 a fost ideal pentru aceasta ca un modul senzor separat. Mi-am cumpărat modulele senzorilor de pe eBay și acestea sunt modulele pe care le-am primit:
- BME280 (GY-BMP / E280), măsoară temperatura, umiditatea și presiunea
- SI7021 (GY-21), măsoară temperatura și umiditatea
- BH1750 (GY-302), măsoară lumina
Există două stiluri ale modulelor PCB GY-BMP / E280. Ambele partajează același pin pentru pinii 1 la 4. Un modul are doi pini suplimentari, CSB și SDO. Acești doi pini sunt pre-conectați la versiunea cu 4 pini a modulului. Nivelul pinului SDO determină adresa I2C (Ground = implicit 0x76, VCC = 0x77). Pinul CSB trebuie să fie conectat la VCC pentru a selecta interfața I2C. Prefer modulul cu 4 pini, deoarece este gata de utilizare așa cum este pentru scopul meu.
În general, aceste module sunt foarte convenabile de utilizat deoarece au deja instalate rezistențe de tracțiune pentru liniile de comunicații și toate rulează pe 3,3V, deci sunt compatibile cu plăcile bazate pe ESP8266. Rețineți că pinii acestor circuite integrate ale senzorilor nu sunt, în general, toleranți la 5V, astfel încât interfața lor directă cu ceva de genul unui Arduino Uno le poate deteriora permanent.
Pasul 3: Stații de senzori
După cum sa menționat, stațiile senzorilor ar fi toate dispozitive Espressif care utilizează protocolul de comunicații ESP-Now. Din proiectele și experimentările anterioare, am avut la dispoziție mai multe dispozitive diferite pentru a-mi desfășura testele inițiale și a le încorpora în designul final. Aveam următoarele dispozitive la îndemână:
- două module ESP-01
- două plăci de dezvoltare Wemos D1
- o placă de dezvoltare Lolin ESP8266
- o placă de kit WIFI serial ESP12E
- o placă GOOUUU ESP32 (o placă de dezvoltare cu 38 de pini)
Am avut, de asemenea, o placă de dezvoltare Wemos D1 R2, dar au existat probleme cu aceasta care nu i-au permis să se trezească din somn profund și ca dispozitiv de cale poartă se va prăbuși și nu va reporni corect. L-am reparat mai târziu și a devenit parte a proiectului de deschidere a ușii de garaj. Pentru ca „deepsleep” să funcționeze, pinul RST al ESP8266 trebuie conectat la pinul GPIO16, astfel încât temporizatorul de repaus să poată trezi dispozitivul. În mod ideal, această conexiune ar trebui făcută cu o diodă Schottky (catod la GPIO16), astfel încât resetarea manuală prin conexiunea USB-TLL în timpul programării să funcționeze în continuare. Cu toate acestea, un rezistor cu valoare mică (300 ish Ohm) sau chiar o conexiune directă prin cablu poate avea în continuare succes.
Modulele ESP-01 nu permit accesul ușor la pinul GPIO16 și trebuie să se lipească direct la IC. Aceasta nu este o sarcină simplă și nu aș recomanda asta tuturor. Placa de kit WIFI serial ESP12E a fost un element un pic noutate și a necesitat câteva modificări pentru ca aceasta să fie utilă scopului meu. Cele mai ușoare plăci de utilizat au fost plăcile de tip Wemos D1 mini și placa Lolin. Dispozitivele ESP32 nu necesită modificări pentru ca deepsleep să funcționeze. Andreas Spiess are un instructiv frumos în acest sens.
Pasul 4: Stația senzorului ESP-01
Pe toate stațiile de senzori, modulele senzorilor sunt montate vertical pentru a reduce cantitatea de praf care se poate colecta pe ele. Nu toate sunt în incinte și este posibil să nu le montez în incinte. Motivul pentru aceasta este că dispozitivele se pot încălzi și pot afecta citirile de temperatură și umiditate dacă nu sunt ventilate suficient.
Plăcile ESP-01 sunt foarte compacte și au puțini pini IO digitali cu care să funcționeze, dar este suficient pentru interfața I2C. Cu toate acestea, plăcile necesită o modificare dificilă pentru a permite „adormirea profundă” să funcționeze. În fotografia prezentată, un fir a fost lipit de la pinul de colț (GPIO16) la pinul RST de pe antet. Firul pe care l-am folosit este un fir de "reparare" izolat cu diametru de 0,1 mm. Învelișul de izolație se topește la încălzire, astfel încât poate fi lipit pentru a repara urmele, etc în PCB-uri și totuși nu vă faceți griji cu privire la crearea de pantaloni scurți unde firul intră în contact cu alte componente. Dimensiunea sa face dificilă lucrul cu acesta și am lipit acest fir sub un microscop (hobbyist / colecționar de timbre). Rețineți că antetul din partea dreaptă are o distanță între pini de 0,1 "(2,54 mm). Instalarea unei diode Schottky aici nu ar fi deloc ușoară, așa că am decis să încerc doar firul și ambele unități funcționează de peste o lună fără probleme.
Modulele au fost instalate pe două plăci prototip pe care le-am creat. Una (# 1) este o placă de programare care permite și instalarea și testarea modulelor I2C, în timp ce cealaltă (# 2) este o placă de dezvoltare / test pentru dispozitivele I2C. Pentru prima placă am lipit împreună un vechi conector tată USB și un mic PCB pentru a alimenta unitatea direct de la un adaptor de perete USB. Cealaltă unitate are o mufă DC regulată modificată pentru a se potrivi în antetul terminalului cu șurub și este alimentată și printr-un adaptor de perete.
Schema arată cum sunt conectate și cum funcționează programatorul. Nu am alte module ESP-01, deci nu am avut nevoie imediată de programator. În viitor, probabil voi face un PCB pentru ei. Ambele plăci au instalat modulul senzor SI7021, deoarece nu m-a interesat la fel de mult măsurarea presiunii în acele locații.
Pasul 5: Stația senzorului kitului ESP 12E Serial WIFI
Placa ESP12E Serial WIFI Kit nu a fost concepută atât pentru dezvoltare, cât și pentru prezentarea a ceea ce se putea face cu acest dispozitiv. L-am cumpărat cu mult timp în urmă pentru a afla un pic despre programarea ESP8266 și în cele din urmă am decis să-i dau o nouă utilizare. Am eliminat toate LED-urile care au fost instalate pentru demonstrații și am adăugat un antet de programare USB, precum și un antet I2C potrivit pentru modulele pe care le folosesc. Avea un rezistor foto CdS conectat la pinul de intrare analogic și am decis să-l las acolo. Această unitate anume urma să-mi monitorizeze atelierul de garaj și senzorul foto pe care îl avea era suficient pentru a mă anunța dacă luminile au fost lăsate accidental aprinse. Pentru măsurarea luminii am normalizat citirile pentru a-mi oferi un procent de ieșire și orice peste „5” pe timp de noapte însemna luminile aprinse sau o ușă a casei nu era închisă corect. Pinii RST și GPIO16 sunt etichetați clar pe PCB, iar dioda Schottky care le conectează a fost instalată pe partea inferioară a PCB-ului. Este alimentat printr-o placă serial USB care este conectată direct la un încărcător de perete USB. Am extras de pe aceste plăci serial USB și nu am nevoie de acesta chiar acum.
Nu am făcut o schemă pentru această placă și, în general, nu recomand să cumpărați una pentru a fi folosită în acest scop. Plăcile Wemos D1 Mini sunt mult mai potrivite și vor fi discutate în continuare. Deși, dacă aveți unul dintre acestea și aveți nevoie de sfaturi, aș fi bucuros să vă ajut.
Pasul 6: Stații mini senzor D1
Plăcile de dezvoltare Wemos D1 Mini de tip ESP8266 sunt cele preferate de mine și dacă ar fi trebuit să o fac, aș folosi-le doar. Acestea au un număr mare de pini IO accesibile, pot fi programate direct prin Arduino IDE și sunt încă destul de compacte. Pinul D0 este GPIO16 pe aceste plăci și conectarea unei diode Schottky este destul de ușor de făcut. Schema arată cum am conectat aceste plăci și amândouă folosesc modulul senzor BME2808.
Una dintre cele două plăci este utilizată pentru a monitoriza vremea exterioară și funcționează de la o baterie cu energie solară. Un panou solar de 165 mm x 135 mm (6 V, 3.5 W) este conectat la un modul de încărcare a bateriei Li-ion TP4056 (consultați diagrama de configurare a stației senzorului de baterie alimentată cu energie solară). Acest modul de încărcare special (03962A) are un circuit de protecție a bateriei, care este necesar dacă bateria (pachetul) nu conține unul. Bateria Li-ion a fost reciclată dintr-un pachet de baterii vechi pentru laptop și încă poate reține suficientă încărcare pentru a rula placa D1 Mini, mai ales cu modul de somn profund activat. Placa a fost plasată într-o carcasă din plastic pentru a o păstra oarecum în siguranță de elemente. Cu toate acestea, pentru ca interiorul să fie expus la temperatura și umiditatea exterioare, au fost găurite două găuri cu diametrul de 25 mm pe părțile opuse și acoperite (din interior) cu o cârpă neagră de peisaj. Cârpa este proiectată pentru a permite pătrunderea umezelii și astfel poate fi măsurată umiditatea. La un capăt al incintei a fost găurită o mică gaură și s-a instalat o fereastră din plastic transparent. Aici a fost amplasat modulul senzorului de lumină BH1750. Întreaga unitate este plasată în aer liber la umbră (nu soare direct), cu senzorul de lumină îndreptat în aer liber. Funcționează de la bateria alimentată cu energie solară de aproape 4 săptămâni în vremea de iarnă ploioasă / înnorată de aici.
Pasul 7: Gateway și Webserver
A fost utilizată o placă Lolin NodeMCU V3 (ESP8266) pentru dispozitivul ESP-Now Gateway și o ESP32 (placă GOOUUU) pentru Webserver. Aproape orice placă ESP8266 sau chiar ESP32 ar fi putut servi drept dispozitiv gateway, aceasta a fost pur și simplu placa pe care o „rămăsesem” după ce am folosit toate celelalte plăci pe care le aveam.
Am folosit placa ESP32, deoarece am nevoie de o placă cu ceva mai multă putere de calcul pentru a colecta datele, a le sorta, a le salva în stocare și a rula serverul web. În viitor, poate avea și propriul senzor și un ecran local (OLED). Pentru stocare s-a folosit un card SD cu un adaptor personalizat. Am folosit un adaptor comun de card microSD la SD și am lipit un antet de 7 pini tată (0.1 pitch) la contactele placate. Am urmat sfaturile acestui GitHub pentru a face conexiunile.
Configurarea prototipurilor (cu fire Dupont) nu include un modul senzor, dar PCB-ul finalizat pe care l-am proiectat permite atât unul cât și un mic ecran OLED. Detaliile despre modul în care am proiectat acel PCB fac parte dintr-un alt Instructable.
Pasul 8: Software
Dispozitive ESP8266 (ESP-ACUM)
Software-ul pentru toate dispozitivele a fost scris folosind Arduino IDE (v1.87). Fiecare stație de senzori rulează în esență codul identic. Ele diferă doar de pinii utilizați pentru comunicațiile I2C și de modulul senzor la care sunt conectați. Cel mai important, ei trimit pachetul de date de măsurare identic către stația ESP-Now Gateway, indiferent dacă au același senzor. Ceea ce înseamnă acest lucru este că unele stații de senzori vor completa valori false pentru măsurătorile de presiune și nivel de lumină dacă nu au senzori care să ofere valori reale. Codul pentru fiecare stație și gateway a fost adaptat din exemplele lui Anthony Elder de pe acest GitHub.
Codul dispozitivului gateway a folosit SoftwareSerial pentru a comunica cu serverul web, deoarece ESP8266 are un singur UART hardware complet funcțional. Funcționând la o viteză maximă de 9600, pare destul de fiabil și este mai mult decât suficient pentru trimiterea acestor pachete de date relativ mici. Dispozitivul gateway este de asemenea programat cu o adresă MAC privată. Motivul pentru aceasta este că, dacă trebuie înlocuit, atunci stațiile senzorilor nu trebuie să fie reprogramate cu noua adresă MAC a destinatarului.
ESP32 (server web)
Fiecare stație de senzori trimite pachetul de date către dispozitivul gateway care îl transmite către serverul web. Împreună cu pachetul de date, adresa MAC a stației senzorului este trimisă și pentru a identifica fiecare stație. Serverul web are un tabel „căutare” pentru a determina locația fiecărui senzor și sortează datele în consecință. Intervalul de timp dintre măsurători a fost setat la 5 minute plus un factor aleatoriu pentru a evita ca senzorii să „se ciocnească” unul cu celălalt atunci când se trimitea către dispozitivul de poartă.
Routerul WIFI de acasă a fost setat să aloce o adresă IP fixă la serverul web atunci când se conectează la WIFI. Pentru al meu a fost 192.168.1.111. Dacă introduceți această adresă în orice browser, se va conecta la serverul web al stației meteo atâta timp cât utilizatorul se află în raza WIFI (și se conectează la) rețeaua de domiciliu. Când utilizatorul se conectează la pagina web, serverul web răspunde cu un tabel al măsurătorilor și include ora ultimei măsurători a fiecărui senzor. În acest fel, dacă o stație de senzori devine neacceptabilă, se poate vedea acest lucru din tabel dacă o citire are mai mult de 5-6 minute.
Datele sunt salvate în fișiere text individuale pe un card SD și pot fi descărcate și de pe pagina web. Poate fi importat în Excel sau în orice altă aplicație pentru trasarea datelor
Aplicația Android
Pentru a ușura vizualizarea informațiilor meteo locale pe un smartphone, am creat o aplicație relativ Android folosind Android Studio. Este disponibil pe pagina mea GitHub aici. Utilizează clasa webview pentru a încărca pagina web de pe server și, ca atare, ca funcționalitate limitată. Nu este capabil să descarce fișierele de date și oricum nu aveam nevoie de cei de pe telefonul meu.
Pasul 9: Rezultate
În cele din urmă, iată câteva rezultate pentru stația meteo de acasă. Datele au fost descărcate pe un laptop și trasate în Matlab. Am atașat scripturile mele Matlab și le puteți rula și în GNU Octave. Senzorul de exterior funcționează cu bateria sa încărcată cu energie solară de aproape 4 săptămâni și rareori avem soare în această perioadă a anului. Până acum totul funcționează bine și toată lumea din familie poate căuta singuri vremea decât să mă întrebe acum!