Taula de continguts:

Sensor de temperatura i humitat IoT WiFi. Part: 8 IoT, domòtica: 9 passos
Sensor de temperatura i humitat IoT WiFi. Part: 8 IoT, domòtica: 9 passos

Vídeo: Sensor de temperatura i humitat IoT WiFi. Part: 8 IoT, domòtica: 9 passos

Vídeo: Sensor de temperatura i humitat IoT WiFi. Part: 8 IoT, domòtica: 9 passos
Vídeo: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, De novembre
Anonim
Sensor de temperatura i humitat IoT WiFi. Part: 8 IoT, domòtica
Sensor de temperatura i humitat IoT WiFi. Part: 8 IoT, domòtica

Preàmbul

En aquest article es documenta la pràctica robustesa i el desenvolupament d'un anterior Instructable: "Pimping" del seu primer dispositiu WiFi IoT. Part 4: IoT, domòtica que inclou totes les funcions de programari necessàries per permetre el desplegament amb èxit en un entorn domèstic domèstic.

Introducció

Com s'ha esmentat anteriorment, aquest Manual descriu la combinació d'un exemple anterior d'IoT amb un disseny de sistemes fiable que permet gestionar amb èxit casos d'ús pràctics com; Pèrdua de potència catastròfica, fallada del corredor MQTT, fallada WiFi N / W, reconfiguració del sensor remot, estratègia d’informació configurable per reduir el trànsit de la xarxa i el calibratge del sensor a mida.

Es van crear un total de 6 dispositius apagats (vegeu la foto 1 anterior) i es van distribuir per casa meva per formar la meva primera xarxa de sensors IoT.

The Instructable també veu una revisió de la convenció de noms de MQTT tal com s’utilitza a la sèrie inicial d’automatització domèstica de l’IoT donant pas a una estructura més equilibrada i pràctica que permet una depuració més senzilla del trànsit de l’IoT en un entorn de dispositius multi IoT.

A continuació es detallen els detalls de disseny complets del sensor IoT; construcció, codi font, estratègia de proves i configuracions OpenHAB.

Quines parts necessito?

  1. 1 de descompte ESP8266-01,
  2. 2 condensadors electrolítics de 1uF,
  3. 3 resistències de 10 K,
  4. 1 resistència de 330R,
  5. 1 de diàmetre de 3 mm. LED,
  6. 1 de descompte LD1117-33v, 3v3 LDO VReg. (Farnell aquí),
  7. 1 descompte del sensor de temperatura / humitat DHT22,
  8. 1 apagat del connector Dual 4way 0,1 ",
  9. 1 descompte CAMDENBOSS RX2008 / S-5 Tancament de plàstic, caixa d’envasat, ABS, 38 mm, 23 mm (Farnell aquí),
  10. 1 apagat Connector d'alimentació CC, endoll, 1 A, 2 mm, muntatge al panell (Farnell aquí),
  11. 1 descompte TO-220 Dissipador de calor 24,4 ° C / W (Farnell aquí),
  12. Diversos tubs termoretràctils (grocs, Ebay aquí),
  13. Cable de cinta IDC de diverses longituds,
  14. Compost de dissipador de calor,
  15. Veroboard,
  16. Dispositiu de programació ESP8266-01. Vegeu aquí; Pràctica construcció de circuits amb Strip Board, pas 9 en endavant.

Quin programari necessito?

  1. Arduino IDE 1.6.9
  2. Arduino IDE configurat per programar l’ESP8266-01. Vegeu aquí; Configuració de l'IDE Arduino per programar l'ESP8266-01

Quines eines necessito?

  1. Soldador,
  2. Trepant i diversos bits,
  3. Fitxers,
  4. Serra mecànica,
  5. Vici robust,
  6. Pistola de calor,
  7. DMM.

Quines habilitats necessito?

  1. Una comprensió mínima de l’electrònica,
  2. Coneixement d'Arduino i el seu IDE,
  3. Coneixements de fabricació rudimentària (soldar, serrar, llimar, perforar, etc.),
  4. Una mica de paciència,
  5. Alguna comprensió de la vostra xarxa domèstica.

Temes tractats

  1. Visió general del circuit
  2. Descripció general del sistema de programari
  3. Descripció general del programari
  4. Calibració del sensor
  5. Convenció de denominació de temes MQTT
  6. Configuració OpenHAB
  7. Prova del disseny
  8. Conclusió
  9. Referències utilitzades

Enllaços de la sèrie

A la part 7: controlador de llums d'estudi (reelaborat). Part 7: IoT, domòtica

A la part 9: controlador de xarxa IoT. Part 9: IoT, domòtica

Pas 1: Visió general del circuit

Visió general del circuit
Visió general del circuit
Visió general del circuit
Visió general del circuit
Visió general del circuit
Visió general del circuit
Visió general del circuit
Visió general del circuit

La imatge 1 anterior mostra el disseny complet del circuit per al sensor IoT.

Al centre del dispositiu IoT hi ha l’ESP8266-01, que està connectat a un sensor de temperatura / humitat DHT22 mitjançant una resistència d’arrencada de 10K a GPIO2. Un 5v extern s’obté amb un subministrament en mode commutat i s’alimenta al dispositiu mitjançant una presa de muntatge de panell DC de 2 mm i es regula localment amb un regulador de voltatge LD1117-33v, 3v3 LDO muntat en un dissipador de calor extern amb un cargol de capçal BZP M3 i femella.

El disseny inclou un led vermell de 3 mm connectat a GPIO0 que s’utilitza per donar una indicació local de l’estat del dispositiu IoT durant l’arrencada o qualsevol condició d’error posterior. També es pot utilitzar per identificar el dispositiu mitjançant l'activació manual a través de la interfície openHAB.

El disseny complet s’adapta perfectament a una caixa d’embotellament ABS tal com es mostra a la imatge 2 i es va dissenyar específicament per garantir que el sensor estigui el més lluny possible del regulador per evitar polaritzacions a causa dels efectes de calefacció local (imatge 7 anterior).

La placa de circuit és una sola peça de taulell, tallada a la forma i adaptada al recinte (imatge 3 anterior). Aquest tauler es fixa en posició amb un cargol de niló avellinat M3 i dues femelles que s'adapten a la part inferior del sensor, cosa que li permet asseure's sobre una superfície plana.

Les imatges 4… 6 mostren diversos estats de construcció.

Pas 2: Visió general del sistema de programari

Descripció general del sistema de programari
Descripció general del sistema de programari
Descripció general del sistema de programari
Descripció general del sistema de programari

Aquest dispositiu de detecció de temperatura i humitat de l'IoT conté sis components clau del programari, tal com es mostra a la imatge 1 anterior.

SPIFFS

Aquest és el sistema de fitxer flash SPI incorporat i s’utilitza per contenir la informació següent (vegeu la imatge 2 anterior);

  • Icones i "Pàgina d'inici de la configuració del sensor" html: servit pel dispositiu IoT quan no pot connectar-se a la vostra xarxa WiFi IoT (normalment a causa d'una informació de seguretat incorrecta) i proporciona a l'usuari un mitjà per configurar el sensor de manera remota sense necessitat per tornar a programar o penjar contingut SPIFFS nou.
  • Informació de seguretat: conté la informació que s’utilitza en engegar el dispositiu IoT per connectar-se a la vostra xarxa WiFi IoT i MQTT Broker. La informació enviada a través de la "pàgina inicial de configuració del sensor" s'escriu en aquest fitxer ("secvals.txt").
  • Informació de calibratge: la informació continguda en aquest fitxer ('calvals.txt') s'utilitza per calibrar el sensor de temperatura / humitat incorporat en cas que sigui necessari. Les constants de calibració només es poden escriure al dispositiu IoT mitjançant ordres MQTT d'un agent MQTT.

Nota: Per configurar inicialment el dispositiu, consulteu aquí els detalls complets sobre com utilitzar SPIFFS amb l'IDE Arduino.

Servidor mDNS

Aquesta funcionalitat s’invoca quan el dispositiu IoT no ha pogut connectar-se a la vostra xarxa WiFi com a estació WiFi i, en canvi, s’ha convertit en un punt d’accés WiFi similar a un enrutador WiFi domèstic. En el cas d’un enrutador d’aquest tipus, normalment us hi connectareu introduint l’adreça IP d’alguna cosa com 192.168.1.1 (generalment impresa en una etiqueta col·locada al quadre) directament a la barra d’URL del navegador, amb la qual cosa rebreu una pàgina d’inici de sessió per entrar el nom d’usuari i la contrasenya que us permetran configurar el dispositiu.

Per a l’ESP8266 en mode AP (mode de punt d’accés), el dispositiu adopta per defecte l’adreça IP 192.168.4.1, però, amb el servidor mDNS en execució, només heu d’introduir el nom d’usuari "SENSORSVR.local" a la barra d’URL del navegador per veure el "Pàgina inicial de configuració del sensor".

Client MQTT

El client MQTT proporciona totes les funcionalitats necessàries per a; connecteu-vos al vostre corredor MQTT de la vostra xarxa IoT, subscriviu-vos als temes que escolliu i publiqueu càrregues útils a un tema determinat. En resum, subministra la funcionalitat bàsica de l'IoT.

Servidor web

Com s'ha esmentat anteriorment, si el dispositiu IoT no pot connectar-se a la xarxa WiFi el SSID, P / W, etc. del qual es defineix al fitxer d'informació de seguretat que es troba a SPIFFS, el dispositiu es convertirà en un punt d'accés. Un cop connectat a la xarxa WiFi proporcionada pel punt d’accés, la presència d’un servidor web HTTP us permet connectar-vos directament al dispositiu i canviar-ne la configuració mitjançant l’ús d’un navegador web HTTP. Pàgina web de la pàgina que també es manté a SPIFFS.

Estació WiFi

Aquesta funcionalitat proporciona al dispositiu IoT la possibilitat de connectar-se a una xarxa WiFi domèstica mitjançant els paràmetres del fitxer d’informació de seguretat, sense la qual cosa el vostre dispositiu IoT no podrà subscriure / publicar al corredor MQTT.

Punt d'accés WiFi

La possibilitat de convertir-se en un punt d’accés WiFi és un mitjà pel qual el dispositiu IoT us permet connectar-vos-hi i fer canvis de configuració mitjançant una estació WiFi i un navegador (com ara Safari a l’iPad d’Apple).

Aquest punt d'accés emet un SSID = "SENSOR" + els últims 6 dígits de l'adreça MAC del dispositiu IoT. La contrasenya d’aquesta xarxa tancada s’anomena imaginativament "CONTRASENYA"

Pas 3: Visió general del programari

Descripció general del programari
Descripció general del programari
Descripció general del programari
Descripció general del programari

Preàmbul Per compilar amb èxit aquest codi font, necessitareu les següents biblioteques addicionals;

PubSubClient.h

  • Per: Nick O'Leary
  • Finalitat: permet al dispositiu publicar o subscriure's a temes de MQTT amb un corredor determinat
  • De:

DHT.h

  • Per: Adafruit
  • Finalitat: Biblioteca per al sensor de temperatura / humitat DHT
  • De:

Visió general del codi

El programari fa servir la màquina d’estats tal com es mostra a la imatge 1 anterior (còpia completa de la font que es mostra a continuació). Hi ha 5 estats principals a continuació;

  • INIT

    Aquest estat d'inicialització és el primer estat introduït després de l'engegada

  • NOCONFIG

    Aquest estat s'introdueix si després de l'engegada es detecta un fitxer secvals.txt no vàlid o que falta

  • PENDENT NO

    Aquest estat és transitori, s’introdueix mentre no existeix cap connexió de xarxa WiFi

  • MQTT PENDENT

    Aquest estat és transitori, s'introdueix després que s'hagi establert una connexió de xarxa WiFi i, tot i que no existeixi cap connexió amb un intermediari MQTT en aquesta xarxa

  • ACTIU

    Aquest és l'estat operatiu normal introduït un cop s'ha establert una connexió de xarxa WiFi i una connexió MQTT Broker. És durant aquest estat que la funcionalitat de temperatura i humitat del sensor es publica al corredor MQTT

Els esdeveniments que controlen les transicions entre estats es descriuen a la foto 1 anterior. Les transicions entre estats també es regeixen pels següents paràmetres de SecVals;

  • 1a adreça IP del corredor MQTT. En forma decimal amb punts AAA. BBB. CCC. DDD
  • 2n port de corredor MQTT. En forma de enter.
  • Intenta fer la tercera connexió MQTT Broker abans de passar del mode STA al mode AP. En forma de enter.
  • 4t SSID de xarxa WiFi. En text lliure.
  • 5a contrasenya de xarxa WiFi. En text lliure.

Com s'ha esmentat anteriorment, si el dispositiu IoT no pot connectar-se com a estació WiFi a la xarxa WiFi que té SSID i P / W es defineix a secvals.txt que es troba a SPIFFS, el dispositiu IoT es convertirà en un punt d'accés. Un cop connectat a aquest punt d'accés, es mostrarà la "Pàgina d'inici de la configuració del sensor", tal com es mostra a la imatge 2 (introduint "SENSORSVR.local" o 192.168.4.1 a la barra d'adreces URL del navegador). Aquesta pàgina inicial permet reconfigurar el sensor mitjançant un navegador

Accés remot en estat ACTIU

Un cop connectat a MQTT Broker, també és possible tornar a calibrar i reconfigurar el dispositiu mitjançant publicacions temàtiques de MQTT. El fitxer calvals.txt té accés R / W i secvals.txt només té accés d’escriptura exposat.

Depuració d'usuaris

Durant la seqüència d'arrencada, el led del dispositiu IoT proporciona els següents comentaris de depuració

  • 1 Flash curt: no hi ha cap fitxer de configuració a SPIFFS (secvals.txt)
  • 2 parpelleigs curts: el dispositiu IoT intenta connectar-se a la xarxa WiFi
  • Il·luminació contínua: el dispositiu IoT intenta connectar-se a MQTT Broker
  • Desactivat: el dispositiu està actiu
  • Nota 1: La "pàgina d'inici de la configuració del sensor" no utilitza sòcols segurs i, per tant, depèn de la seguretat de la vostra xarxa.
  • Nota 2: Per programar cada dispositiu IoT, la cadena MQTT necessitarà editar-la abans de descarregar-la. Això es deu al fet que el número del sensor s'ha incrustat a la cadena de tema MQTT. és a dir. "WFD / THSen / 100 / HumdStatus / 1" per als meus 6 dispositius tenen un número 1 … 6 respectivament.

Pas 4: calibració del sensor

Calibració del sensor
Calibració del sensor
Calibració del sensor
Calibració del sensor

Quan el dispositiu IoT s'encén, com a part de la seqüència d'arrencada es llegeix un fitxer anomenat "cavals.txt" des de SPIFFS. El contingut d’aquest fitxer són constants de calibratge tal com s’indica a la imatge 1. Aquestes constants de calibratge s’utilitzen per ajustar les lectures adquirides del sensor per alinear-les amb un dispositiu de referència. Hi ha un altre valor que defineix una estratègia d'informes per al dispositiu i que es descriu a continuació juntament amb el procediment seguit per calibrar els sensors.

Estratègia d’informes: aquest paràmetre determina com el sensor remot informa de qualsevol canvi paramètric ambiental local. Si se selecciona un valor de 0, el sensor remot publicarà qualsevol canvi que vegi en els valors de temperatura o humitat cada vegada que es llegeixi el sensor (aproximadament cada 10 segons). Qualsevol altre valor retardarà la publicació d'un canvi en 1 … 60 minuts. La modificació d’aquest paràmetre permet optimitzar el trànsit de la xarxa MQTT.

Calibratge de la temperatura

Per calibrar els sensors, es van col·locar molt a prop entre ells, tal com es mostra a la foto 2. Al costat, vaig col·locar un DMM amb un termopar calibrat connectat (Fluke 87 V) i després vaig controlar les sortides de cada dispositiu mitjançant la temperatura OpenHAB pàgina de tendències al llarg d’un dia per obtenir una bona oscil·lació de la temperatura. Vaig assenyalar tant el desplaçament estàtic (zero elevat "C") com la velocitat de canvi de cada dispositiu (guany o pendent del gràfic "M") en relació amb el valor provinent del termoparell calibrat. A continuació, vaig calcular la relació simple y = mx + c (vaig trobar que era prou lineal per aproximar-se a una gràfica recta) i vaig programar les correccions necessàries a les constants de calibratge mitjançant MQTTSpy.

Els dispositius es van supervisar durant 24 hores més per garantir que el calibratge fos correcte. Una indicació de quins eren els rastres de temperatura a la pàgina de tendències de temperatura d'OpenHAB estaven gairebé superposats.

Per descomptat, si només us interessa una aproximació a la temperatura, podeu deixar tots els valors de calibratge per defecte.

Calibració de la humitat

Com que no tinc cap mitjà per registrar o controlar fins i tot la humitat ambiental local, per calibrar els sensors, he utilitzat un enfocament similar al de l’anterior, col·locant tots els dispositius en una proximitat física propera (foto 2) i simplement supervisant la seva sortida a través de l’OpenHAB. Pàgina de tendència a la humitat. Després vaig escollir el dispositiu núm. 1 com a referència de calibratge i vaig calibrar tots els dispositius relatius a aquest.

Pas 5: Convenció de denominació de tema MQTT

Convenció de denominació de temes MQTT
Convenció de denominació de temes MQTT
Convenció de denominació de temes MQTT
Convenció de denominació de temes MQTT

Després de moltes proves i errors, em vaig fixar en la convenció de noms de tema que es descriu a la foto 1 anterior.

És a dir, "AccessMethod / DeviceType / WhichDevice / Action / SubDevice"

No és perfecte, però permet aplicar filtres útils per veure totes les sortides del sensor per a un valor paramètric donat, permetent així una comparació senzilla com a la foto 2 anterior amb MQTTSpy. També admet agrupacions lògiques de funcionalitats raonablement extensibles dins d’un determinat dispositiu IoT.

En implementar aquests temes en programari, he utilitzat cadenes de temes codificats amb identificadors numèrics fixos i incrustats per a cada dispositiu en lloc de generar dinàmicament els temes en temps d’execució per tal d’estalviar memòria RAM i mantenir el rendiment alt.

Nota: Si no esteu segur de com utilitzar MQTTSpy, consulteu aquí "Configuració d'un corredor MQTT. Part 2: IoT, domòtica"

Pas 6: Configuració d'OpenHAB

Configuració OpenHAB
Configuració OpenHAB
Configuració OpenHAB
Configuració OpenHAB
Configuració OpenHAB
Configuració OpenHAB

He modificat la configuració d'OpenHAB donada al meu anterior Instructable (aquí) i he afegit a entrades individuals per a;

  • Garatge,
  • Hall,
  • Sala d'estar,
  • Cuina
  • Dormitori de convidats
  • Habitació principal

Al mapa del lloc, vegeu la imatge 1 anterior.

Per a cadascuna d’aquestes entrades he afegit mapes del lloc individuals que exposen els valors ambientals locals (vegeu la imatge 2 anterior);

  • Temperatura
  • Humitat
  • Índex de calor

També he inclòs un commutador per controlar el LED local muntat dins del sensor.

Les imatges 3… 5 mostren traces en viu individuals durant el període de 24 hores de temperatura, humitat i RSSI (indicació de força del senyal rebut, bàsicament una mesura del grau de visualització del sensor de la xarxa WiFi).

La imatge 6 dóna un exemple d’una tendència d’humitat a llarg termini durant el període d’una setmana.

Nota 1: Si no esteu segur de com utilitzar OpenHAB, consulteu aquí "Configuració i configuració d'OpenHAB. Part 6: IoT, domòtica"

Nota 2: A continuació es proporciona una còpia del mapa del lloc modificat, fitxers de regles i elements, icones, etc.

Pas 7: provar el disseny

Prova del disseny
Prova del disseny
Prova del disseny
Prova del disseny

En la seva major part, he provat el dispositiu IoT a través de la connexió MQTT amb MQTT Spy, supervisant la sortida del led i depurant el trànsit a la interfície sèrie. Això em va permetre exercir tots els temes subscrits disponibles i comprovar les respostes publicades. Tot i que això es va aconseguir manualment i de vegades es tornava una mica tediós, va permetre una cobertura del 100%.

No obstant això, la màquina d'estat principal va resultar ser una mica difícil de provar, ja que depenia de la presència o absència d'una xarxa WiFi, l'accés al qual requeria conjunts de paràmetres específics. Simplement no era pràctic fer servir la xarxa domèstica per a això.

Per solucionar aquest problema, vaig crear el meu propi conjunt de xarxes fictícies amb ESP8266-01 configurat com a punts d'accés (foto 1) amb SSID de "DummyNet1" i "DummyNet2" respectivament. L’ús del circuit de la foto 2 a sobre del led va indicar si hi havia connectat un dispositiu IoT. Tot i que aquesta no era una solució de prova perfecta (és a dir, cadascuna d’aquestes xarxes WiFi fictícies no contenia un servidor MQTT), era possible provar completament la màquina d’estat.

A continuació he inclòs una còpia del codi font.

Pas 8: Conclusió

General

El programari dels dispositius IoT funciona des de fa molts mesos de manera fiable recuperant-se de les interrupcions elèctriques de la llar (causades principalment per mi mateix). En general, són dispositius força robustos que proporcionen dades consistents i precises.

Millores

En desenvolupar rutines de programari per llegir i escriure a SPIFFS, vaig escriure un codi que, a la vista posterior, pot ser una mica més avançat del que havia previst, utilitzant indicadors de buit, reformulació i indicadors a indicadors. Tot i que és molt flexible i fa bé la feina, la propera vegada puc utilitzar JSON en la línia de ConfigFile.ino per fer-ho una mica més senzill.

  • Arduino GIT HUB Core

    https://github.com/esp8266/Arduino

  • Font ConfigFile.ino

    https://github.com/esp8266/Arduino/tree/master/libraries/esp8266/examples/ConfigFile

Llista de desitjos

Tenia la intenció d’utilitzar un client mDNS per connectar-me al Broker, però la biblioteca era massa desconeguda. Per això, cal especificar l'adreça IP del broker MQTT en lloc de "MQTTSVR.local". Si la biblioteca mDNS es tornés més estable en el futur, afegiré aquesta capacitat al dispositiu.

Hauria estat bo tenir un mitjà per controlar i controlar amb precisió la humitat ambiental per calibrar els sensors. Tot i això, el mètode de calibratge escollit proporciona bones lectures relatives i sembla raonablement precís d'acord amb l'especificació del full de dades DHT22.

Finalment, donada la complexitat del programari, he trobat que provava completament el codi després que un canvi important prengués temps. Puc considerar proves automàtiques més endavant.

Pas 9: referències utilitzades

He utilitzat les fonts següents per combinar aquest instructable;

PubSubClient.h

  • Per: Nick O'Leary
  • De:

DHT.h

  • Per: Adafruit
  • De:

Full de dades DHT22

Recomanat: