Taula de continguts:

Una estació meteorològica ESP-Now Home: 9 passos (amb imatges)
Una estació meteorològica ESP-Now Home: 9 passos (amb imatges)

Vídeo: Una estació meteorològica ESP-Now Home: 9 passos (amb imatges)

Vídeo: Una estació meteorològica ESP-Now Home: 9 passos (amb imatges)
Vídeo: ESP32 + HomeAssistant con ESPHome 2024, Desembre
Anonim
Una estació meteorològica ESP-Now Home
Una estació meteorològica ESP-Now Home

Volia tenir una estació meteorològica a casa durant força temps i que tothom de la família pogués comprovar fàcilment si hi havia temperatura i humitat. A més de controlar les condicions exteriors, també volia controlar habitacions específiques de la casa i el taller del meu garatge. Això ens permetria saber quan és un bon moment per airejar la casa o fer funcionar el deshumidificador (aquí plou molt durant l’hivern). El que he creat és un sistema de sensors basat en ESP-Now que informa a un servidor web local que tothom pot comprovar des del seu ordinador o telèfon. Per al telèfon vaig escriure una simple aplicació d'Android per fer-ho encara més fàcil.

Pas 1: detalls del disseny

Detalls del disseny
Detalls del disseny

Volia tenir diverses estacions de sensors que pogués situar en llocs diferents i que les informessin a una estació principal (o concentrador) que permetés desar la informació. Després de provar diverses idees, vaig decidir utilitzar el protocol ESP-Now d'Espressif, ja que permetia una comunicació ràpida directament entre dispositius. Podeu llegir una mica sobre ESP-Now aquí i aquest repositori de GitHub va ser una gran part de la meva inspiració.

La primera imatge mostra el disseny del sistema. Cada sensor informa de les seves mesures a un dispositiu de passarel·la que reenvia les dades al servidor principal mitjançant una connexió serial amb cable dur. La raó és que el protocol ESP-Now no pot estar actiu al mateix temps que la connexió WIFI. Perquè un usuari accedís a la pàgina web, el WIFI hauria d’estar activat en tot moment i això impossibilita l’ús de les comunicacions ESP-Now al mateix dispositiu. Tot i que el dispositiu de passarel·la ha de ser un dispositiu basat en Espressif (capaç d’ESP-Now), el servidor principal pot ser qualsevol dispositiu capaç d’executar una pàgina web.

Algunes estacions de sensors s’esgotarien les bateries (o bateries carregades amb energia solar) i d’altres simplement tindrien energia elèctrica. Tanmateix, volia que tots utilitzessin el mínim d’energia possible i és aquí on la funció "deepsleep" disponible per als dispositius ESP8266 i ESP32 és extremadament útil. Les estacions sensorials es despertaven periòdicament, prenien mesures i les enviaven al dispositiu de passarel·la i tornaven a dormir durant algun període de temps preprogramat. El seu període de vigília de només uns 300 ms cada 5 minuts (en el meu cas) redueix significativament el seu consum d'energia.

Pas 2: Sensors

Sensors
Sensors
Sensors
Sensors

Hi ha diversos sensors per triar per mesurar paràmetres ambientals. Vaig decidir quedar-me només amb sensors capaços de comunicacions I2C, ja que permetia mesures ràpides i funcionaria en qualsevol dels dispositius que tenia. En lloc de treballar directament amb circuits integrats, vaig buscar mòduls preparats per utilitzar que tinguessin els mateixos pin-outs per simplificar els meus dissenys. Vaig començar amb només voler mesurar la temperatura i la humitat i, per tant, vaig triar un mòdul basat en SI7021. Més tard, vaig voler un sensor que també pogués mesurar la pressió i vaig decidir provar els mòduls de sensor basats en BME280. Per a algunes ubicacions, fins i tot volia controlar els nivells de llum i el mòdul BH1750 era ideal per a això com a mòdul de sensor independent. He comprat els meus mòduls sensorials a ebay i aquests són els mòduls que he rebut:

  • BME280 (GY-BMP / E280), mesura la temperatura, la humitat i la pressió
  • SI7021 (GY-21), mesura la temperatura i la humitat
  • BH1750 (GY-302), mesura la llum

Hi ha dos estils de mòduls PCB GY-BMP / E280. Tots dos comparteixen el mateix pin per als pins 1 a 4. Un mòdul té dos pins addicionals, CSB i SDO. Aquests dos pins estan preconnectats a la versió de 4 pins del mòdul. El nivell del pin SDO determina l'adreça I2C (terra = predeterminat de 0x76, VCC = 0x77). El pin CSB ha d’estar connectat a VCC per seleccionar la interfície I2C. Prefereixo el mòdul de 4 pins, ja que està llest per utilitzar tal com és per al meu propòsit.

En general, aquests mòduls són molt còmodes d’utilitzar ja que ja tenen instal·lades resistències de tracció per a les línies de comunicacions i funcionen a 3,3V, de manera que són compatibles amb les plaques basades en l’ESP8266. Tingueu en compte que els pins d’aquests circuits integrats de sensor no solen ser tolerants a 5V, de manera que la interfície directa amb alguna cosa com un Arduino Uno pot danyar-los permanentment.

Pas 3: estacions de sensor

Estacions sensorials
Estacions sensorials

Com es va esmentar, les estacions sensorials serien totes dispositius Espressif que utilitzen el protocol de comunicacions ESP-Now. A partir de projectes i experimentacions anteriors, tenia diversos dispositius disponibles per dur a terme les proves inicials i incorporar-les al disseny final. Tenia a mà els dispositius següents:

  • dos mòduls ESP-01
  • dues mini plaques de desenvolupament Wemos D1
  • una placa de desenvolupament Lolin ESP8266
  • una placa de kit WIFI sèrie ESP12E
  • una placa GOOUUU ESP32 (una placa de desenvolupament de 38 pins)

També tenia una placa de desenvolupament de Wemos D1 R2, però hi va haver problemes que no li permetien despertar del son profund i, com a dispositiu de forma de porta, es bloquejaria i no es reiniciaria correctament. El vaig reparar més endavant i va passar a formar part del projecte d'obertura de portes de garatge. Per tal que funcioni "deepsleep", el pin RST de l'ESP8266 ha d'estar connectat al pin GPIO16, de manera que el temporitzador de repòs pot activar el dispositiu. Idealment, aquesta connexió s'hauria de fer amb un díode Schottky (càtode a GPIO16) perquè el restabliment manual a través de la connexió USB-TLL durant la programació encara funcioni. No obstant això, una resistència de valor baix (300 ish Ohm) o fins i tot una connexió directa per cable encara pot tenir èxit.

Els mòduls ESP-01 no permeten l'accés fàcil al pin GPIO16 i cal soldar-lo directament a l'IC. No és una tasca senzilla i no ho recomanaria a tothom. El tauler del kit WIFI sèrie ESP12E era una cosa novetat i requeria bastants canvis perquè fos útil per al meu propòsit. Els taulers més fàcils d’utilitzar van ser els taulers tipus Wemos D1 mini i el tauler Lolin. Els dispositius ESP32 no requereixen cap modificació perquè el deepsleep funcioni. Andreas Spiess té una bona instrucció sobre això.

Pas 4: Estació del sensor ESP-01

Estació del sensor ESP-01
Estació del sensor ESP-01
Estació del sensor ESP-01
Estació del sensor ESP-01
Estació del sensor ESP-01
Estació del sensor ESP-01

A totes les estacions de sensors, els mòduls de sensors es munten verticalment per reduir la quantitat de pols que es pot acumular. No tots estan inclosos en recintes i és possible que no els pugui muntar en recintes. La raó d'això és que els dispositius poden escalfar-se i afectar les lectures de temperatura i humitat si no estan prou ventilats.

Les plaques ESP-01 són molt compactes i tenen pocs pins d'E / S digitals per treballar, però és suficient per a la interfície I2C. No obstant això, els taulers requereixen una modificació complicada per permetre que el "deepsleep" funcioni. A la foto que es mostra, es va soldar un cable des del pin de la cantonada (GPIO16) fins al pin RST de la capçalera. El fil que he fet servir és de fil de “reparació” aïllat de 0,1 mm de diàmetre. El recobriment d’aïllament es fon quan s’escalfa, de manera que es pot soldar per reparar rastres, etc. en els PCB i, tot i així, no us preocupeu per crear pantalons curts on el fil contacti amb altres components. La seva mida fa que sigui difícil treballar-hi i he soldat aquest filferro al lloc sota un microscopi (estil aficionat / col·leccionista de segells). Tingueu en compte que la capçalera del costat dret té un espaiat de pin de 0,1 "(2,54 mm). Instal·lar un díode Schottky aquí no seria gens fàcil, així que vaig decidir provar el cable sol i les dues unitats funcionen des de fa més un mes sense cap problema.

Els mòduls es van instal·lar en dues taules prototipus que vaig crear. Una (# 1) és una placa de programador que també permet instal·lar i provar mòduls I2C, mentre que l’altra (# 2) és una placa de desenvolupament / prova per a dispositius I2C. Per a la primera placa vaig soldar junts un vell connector USB mascle i un petit PCB per alimentar la unitat directament des d’un adaptador de paret USB. L’altra unitat té una presa de corrent continu modificada per adaptar-se a la capçalera del terminal de cargol i també s’alimenta mitjançant un adaptador de paret.

L’esquema mostra com estan connectats i com funciona el programador. No tinc cap altre mòdul ESP-01, de manera que no he tingut cap necessitat immediata del programador. En el futur probablement faré un PCB per a ells. Ambdues plaques tenen instal·lat el mòdul de sensor SI7021, ja que no m'interessaven tant les mesures de pressió en aquests llocs.

Pas 5: Estació del sensor del kit WIFI ESP 12E

ESP 12E Estació de sensor de kit WIFI de sèrie
ESP 12E Estació de sensor de kit WIFI de sèrie
Estació de sensors de kit WIFI ESP 12E
Estació de sensors de kit WIFI ESP 12E

La placa ESP12E Serial WIFI Kit no estava pensada tant per al desenvolupament com per mostrar el que es podria fer amb aquest dispositiu. El vaig comprar fa molt de temps per aprendre una mica sobre la programació ESP8266 i finalment vaig decidir donar-li un nou ús. Vaig eliminar tots els LEDs que hi havia instal·lats per a demostracions i vaig afegir una capçalera de programació USB, així com una capçalera I2C adequada per als mòduls que faig servir. Tenia una resistència fotogràfica CdS connectada al seu pin d’entrada analògica i vaig decidir deixar-la allà. Aquesta unitat en particular anava a controlar el meu taller de garatge i el sensor fotogràfic que tenia era suficient per fer-me saber si s’havien deixat els llums encesos. Per a la mesura de la llum, vaig normalitzar les lectures per donar-me un percentatge de sortida i qualsevol cosa superior a "5" a la nit significava que es deixaven els llums encesos o que la porta de la casa no estava tancada correctament. Els pins RST i GPIO16 estan clarament etiquetats al PCB i el díode Schottky que els connecta es va instal·lar a la part inferior del PCB. S’alimenta mitjançant una placa USB de sèrie que es connecta directament a un carregador de paret USB. Tinc extres d’aquestes plaques de sèrie USB i ara mateix no en necessito cap.

No he fet cap esquema per a aquest tauler i en general no recomano comprar-ne un per fer-ho amb aquest propòsit. Les plaques Wemos D1 Mini són molt més adequades i es parlarà a continuació. Tot i que, si en teniu algun, necessiteu consell, estaré encantat d’ajudar-vos.

Pas 6: mini estacions de sensor D1

Mini estacions de sensor D1
Mini estacions de sensor D1
Mini estacions de sensor D1
Mini estacions de sensor D1
Mini estacions de sensor D1
Mini estacions de sensor D1

Les taules de desenvolupament Wemos D1 Mini tipus ESP8266 són les meves preferides per utilitzar-les i si hagués de fer-ho més, només les faria servir. Tenen un gran nombre de pins IO accessibles, es poden programar directament a través de l’IDE Arduino i encara són bastant compactes. El pin D0 és GPIO16 en aquestes plaques i connectar un díode Schottky és bastant fàcil de fer. L’esquema mostra com he connectat aquestes plaques i ambdues utilitzen el mòdul de sensor BME2808.

Una de les dues plaques s’utilitza per controlar el clima exterior i funciona des d’una bateria d’energia solar. Es connecta un panell solar de 165 mm x 135 mm (6 V, 3,5 W) a un mòdul de càrrega de la bateria d’ió Li TP4056 (consulteu el diagrama de configuració de l’estació del sensor de bateria alimentat per energia solar). Aquest mòdul de càrrega en particular (03962A) inclou un circuit de protecció de la bateria que és necessari si la bateria (paquet) no en conté cap. La bateria de ions de Li es va reciclar a partir d’una antiga bateria de portàtil i encara pot contenir la càrrega suficient per fer funcionar la placa D1 Mini, especialment amb el son profund habilitat. El tauler es va col·locar en un recinte de plàstic per mantenir-lo una mica protegit dels elements. Tanmateix, per tal que l'exterior fos exposat a la temperatura i la humitat exteriors, es van foradar dos forats de 25 mm de diàmetre als costats oposats i es van cobrir (des de l'interior) amb un drap negre de paisatge. El drap està dissenyat per permetre la penetració de la humitat i, per tant, es pot mesurar la humitat. En un dels extrems del recinte es va practicar un petit forat i es va instal·lar una finestra de plàstic transparent. Aquí es va col·locar el mòdul del sensor de llum BH1750. Tota la unitat es col·loca a l’aire lliure a l’ombra (no el sol directe) amb el sensor de llum apuntat a la intempèrie. Fa prop de 4 setmanes que funciona amb la bateria d’energia solar en el nostre temps d’hivern plujós / ennuvolat.

Pas 7: passarel·la i servidor web

Gateway i servidor web
Gateway i servidor web
Gateway i servidor web
Gateway i servidor web
Gateway i servidor web
Gateway i servidor web

Es va utilitzar una placa Lolin NodeMCU V3 (ESP8266) per al dispositiu ESP-Now Gateway i una ESP32 (placa GOOUUU) per al servidor web. Gairebé qualsevol placa ESP8266 o fins i tot ESP32 podria haver servit de dispositiu de passarel·la, simplement era la placa que em quedava després d'utilitzar totes les altres plaques que tenia.

He utilitzat la placa ESP32, ja que necessito una placa amb una mica més de poder informàtic per recollir les dades, ordenar-les, guardar-les a l’emmagatzematge i executar el servidor web. En el futur també pot tenir el seu propi sensor i una pantalla local (OLED). Per emmagatzemar, es va utilitzar una targeta SD amb un adaptador personalitzat. Vaig utilitzar un adaptador de targeta microSD a SD comú i vaig soldar una capçalera macho de 7 pins (0,1 de pas) als contactes xapats. Vaig seguir els consells d'aquest GitHub per fer les connexions.

La configuració de prototips (amb cables Dupont) no inclou cap mòdul de sensor, però la PCB finalitzada que he dissenyat permet tant una com una petita pantalla OLED. Els detalls sobre com he dissenyat aquest PCB formen part d’un instructable diferent.

Pas 8: programari

Programari
Programari

Dispositius ESP8266 (ESP-NOW)

El programari per a tots els dispositius es va escriure mitjançant l'IDE Arduino (v1.87). Cada estació de sensors executa essencialment el mateix codi. Només es diferencien per quins pins s’utilitzen per a les comunicacions I2C i per quin mòdul de sensor estan connectats. El més important és que envien el paquet de dades de mesura idèntic a l’estació de passarel·la ESP-Now, independentment de si tenen el mateix sensor. Això vol dir que algunes estacions de sensors ompliran els valors ficticis per a les mesures de pressió i nivell de llum si no tenen sensors que proporcionin valors reals. El codi de cada estació i passarel·la es va adaptar a partir dels exemples d'Anthony Elder en aquest GitHub.

El codi de dispositiu de passarel·la utilitza SoftwareSerial per comunicar-se amb el servidor web, ja que ESP8266 només té un UART de maquinari completament funcional. Funcionar a una velocitat de transmissió màxima de 9600 sembla bastant fiable i és més que suficient per enviar aquests paquets de dades relativament petits. El dispositiu de passarel·la també es programa amb una adreça MAC privada. El motiu d'això és que, si cal substituir-lo, no cal reprogramar totes les estacions de sensors amb la nova adreça MAC del destinatari.

ESP32 (servidor web)

Cada estació de sensor envia el seu paquet de dades al dispositiu de passarel·la que el reenvia al servidor web. Juntament amb el paquet de dades, l'adreça MAC de l'estació del sensor també s'envia per identificar cada estació. El servidor web té una taula de "cerca" per determinar la ubicació de cada sensor i ordena les dades en conseqüència. L'interval de temps entre mesures es va establir a 5 min més un factor aleatori per evitar que els sensors "xoquessin" entre si quan s'envia al dispositiu de la porta.

El router WIFI domèstic s’ha configurat per assignar una adreça IP fixa al servidor web quan es connecta a la WIFI. Per a la meva era 192.168.1.111. Si escriviu aquesta adreça en qualsevol navegador, es connectarà al servidor web de l’estació meteorològica sempre que l’usuari estigui dins del rang WIFI (i es connecti a) a la xarxa domèstica. Quan l'usuari es connecta a la pàgina web, el servidor web respon amb una taula de mesures i inclou l'hora de l'última mesura de cada sensor. D'aquesta manera, si una estació de sensor no respon, es pot veure des de la taula si una lectura té més de 5-6 minuts d'antiguitat.

Les dades es guarden en fitxers de text individuals en una targeta SD i també es poden descarregar des de la pàgina web. Es pot importar a Excel o a qualsevol altra aplicació per traçar dades

Aplicació per a Android

Per facilitar la visualització de la informació meteorològica local en un telèfon intel·ligent, vaig crear una aplicació relativament Android amb Android Studio. Està disponible a la meva pàgina de GitHub aquí. Utilitza la classe webview per carregar la pàgina web des del servidor i, per tant, com a funcionalitat limitada. No és capaç de descarregar els fitxers de dades i de tota manera no en tenia cap necessitat.

Pas 9: Resultats

Resultats
Resultats

Finalment, aquí teniu alguns resultats de l’estació meteorològica de casa meva. Les dades es van descarregar en un ordinador portàtil i es van representar a Matlab. He adjuntat els meus scripts Matlab i també els podeu executar a GNU Octave. El sensor exterior funciona amb la bateria carregada solar durant gairebé 4 setmanes i poques vegades tenim sol en aquesta època de l'any. Fins ara tot funciona bé i tots els membres de la família poden buscar el temps ells mateixos en lloc de preguntar-me’ls ara.

Recomanat: