Cuprins:

Senzor de temperatură și umiditate IoT WiFi. Partea: 8 IoT, Home Automation: 9 pași
Senzor de temperatură și umiditate IoT WiFi. Partea: 8 IoT, Home Automation: 9 pași

Video: Senzor de temperatură și umiditate IoT WiFi. Partea: 8 IoT, Home Automation: 9 pași

Video: Senzor de temperatură și umiditate IoT WiFi. Partea: 8 IoT, Home Automation: 9 pași
Video: Antreprenoriat pe Bune - Smart Business & Smart Home 2024, Noiembrie
Anonim
Senzor de temperatură și umiditate IoT WiFi. Partea: 8 IoT, Home Automation
Senzor de temperatură și umiditate IoT WiFi. Partea: 8 IoT, Home Automation

Preambul

Acest articol documentează rezistența practică și dezvoltarea ulterioară a unui Instructable anterior: „Pimping” primul dispozitiv WiFi IoT. Partea 4: IoT, Home Automation, care include toate funcționalitățile software necesare pentru a permite desfășurarea cu succes într-un mediu casnic intern.

Introducere

Așa cum s-a menționat mai sus, acest Instructable descrie reunirea unui exemplu IoT anterior cu un design de sistem fiabil care să permită gestionarea cu succes a cazurilor de utilizare practică, cum ar fi; Pierderea catastrofală de energie, eșecul brokerului MQTT, eșecul WiFi N / W, reconfigurarea senzorului de la distanță, strategia de raportare configurabilă pentru a reduce traficul de rețea și calibrarea senzorului personalizat.

Un total de 6 dispozitive oprite au fost create (a se vedea imaginea 1 de mai sus) și distribuite în jurul casei mele pentru a forma prima mea rețea de senzori IoT.

Instructable vede, de asemenea, o revizuire a convenției de denumire MQTT, așa cum este utilizată în seria inițială IoT Home Automation, dând loc unei structuri mai echilibrate și practice care să permită depanarea mai simplă a traficului IoT într-un mediu cu dispozitive multi IoT.

Ceea ce urmează sunt detalii complete de proiectare ale senzorului IoT, inclusiv; construcție, cod sursă, strategie de testare și configurații OpenHAB.

De ce piese am nevoie?

  1. 1 reducere ESP8266-01,
  2. 2 off 1uF condensatori electrolitici,
  3. 3 rezistențe de 10K,
  4. 1 rezistor 330R,
  5. 1 off 3mm dia. LED,
  6. 1 off LD1117-33v, 3v3 LDO VReg. (Farnell aici),
  7. 1 off senzor de temperatură / umiditate DHT22,
  8. 1 off Dual 4way 0.1 "Conector,
  9. 1 off CAMDENBOSS RX2008 / S-5 Carcasă din plastic, cutie pentru vase, ABS, 38 mm, 23 mm (Farnell aici),
  10. 1 off conector de alimentare DC, mufă, 1 A, 2 mm, montare pe panou (Farnell aici),
  11. 1 off TO-220 Radiator 24,4 ° C / W (Farnell aici),
  12. Diverse tuburi termocontractabile (galben, Ebay aici),
  13. Cablu panglică IDC de diferite lungimi,
  14. Compus pentru radiator,
  15. Veroboard,
  16. Dispozitiv de programare ESP8266-01. Vezi aici; Construcție practică a circuitului cu placă de bandă, pasul 9 în continuare.

De ce software am nevoie?

  1. Arduino IDE 1.6.9
  2. Arduino IDE configurat pentru a programa ESP8266-01. Vezi aici; Configurarea IDE Arduino pentru a programa ESP8266-01

De ce instrumente am nevoie?

  1. Ciocan de lipit,
  2. Burghiu și diverse biți,
  3. Dosare,
  4. Ferăstrău,
  5. Viciu robust,
  6. Pistol cu aer cald,
  7. DMM.

De ce abilități am nevoie?

  1. O înțelegere minimă a electronicii,
  2. Cunoașterea Arduino și a IDE-ului său,
  3. Abilități de fabricare Rudimentare (lipire, tăiere, tăiere, găurire etc.),
  4. Un pic de răbdare,
  5. O oarecare înțelegere a rețelei dvs. de domiciliu.

Subiecte acoperite

  1. Prezentare generală a circuitului
  2. Prezentare generală a sistemului software
  3. Prezentare generală a software-ului
  4. Calibrarea senzorului
  5. Convenția de denumire a subiectelor MQTT
  6. Configurare OpenHAB
  7. Testarea proiectării
  8. Concluzie
  9. Referințe utilizate

Link-uri de serie

La partea 7: Controlul luminilor de studiu (refăcut). Partea 7: IoT, Home Automation

La partea 9: IoT Mains Controller. Partea 9: IoT, Home Automation

Pasul 1: Prezentare generală a circuitului

Prezentare generală a circuitului
Prezentare generală a circuitului
Prezentare generală a circuitului
Prezentare generală a circuitului
Prezentare generală a circuitului
Prezentare generală a circuitului
Prezentare generală a circuitului
Prezentare generală a circuitului

Imaginea 1 de mai sus prezintă designul complet al circuitului pentru senzorul IoT.

În centrul dispozitivului IoT se află ESP8266-01, care este conectat la un senzor de temperatură / umiditate DHT22 printr-un rezistor de 10K la GPIO2. Un 5v extern este furnizat cu o sursă de comutare și este alimentat dispozitivului printr-o priză de montare pe panou DC de 2 mm și este reglat local cu un regulator de tensiune LD1117-33v, 3v3 LDO montat pe un radiator extern cu un șurub și panou BZP M3.

Designul include un led roșu de 3 mm conectat la GPIO0 care este utilizat pentru a oferi indicații locale despre starea dispozitivului IoT în timpul pornirii sau a oricărei condiții de eroare ulterioare. Poate fi, de asemenea, utilizat pentru a identifica dispozitivul prin activarea manuală prin intermediul interfeței openHAB.

Designul complet se potrivește perfect într-o cutie de vase ABS așa cum se arată mai sus în imaginea 2 și a fost prevăzut special pentru a se asigura că senzorul este cât mai departe posibil de regulator pentru a preveni polarizarea din cauza efectelor de încălzire locală (imaginea 7 de mai sus).

Placa de circuite este o singură bucată de veroboard, tăiată în formă și făcută pentru a se potrivi în incintă (imaginea 3 de mai sus). Această placă este fixată în poziție cu un șurub de nailon în formă de M3 și două piulițe care se potrivește cu partea inferioară a senzorului, permițându-i astfel să stea pe o suprafață plană.

Imaginile 4… 6 prezintă diferite stări de construcție.

Pasul 2: Prezentare generală a sistemului software

Prezentare generală a sistemului software
Prezentare generală a sistemului software
Prezentare generală a sistemului software
Prezentare generală a sistemului software

Acest dispozitiv de detectare a temperaturii și umidității IoT conține șase componente software cheie, așa cum se arată în imaginea 1 de mai sus.

SPIFFS

Acesta este sistemul SPI Flash Filing de la bord și este utilizat pentru a păstra următoarele informații (a se vedea imaginea 2 de mai sus);

  • Pictograme și „Pagina principală de configurare a senzorului” html: servit de dispozitivul IoT atunci când acesta nu se poate conecta la rețeaua WiFi IoT (de obicei din cauza informațiilor incorecte de securitate) și oferă utilizatorului un mijloc de configurare de la distanță a senzorului fără a fi nevoie pentru a reprograma sau încărca conținut SPIFFS nou.
  • Informații de securitate: Deține informațiile utilizate la pornirea dispozitivului IoT pentru a vă conecta la rețeaua WiFi IoT și la brokerul MQTT. Informațiile trimise prin „Pagina principală a configurării senzorului” sunt scrise în acest fișier („secvals.txt”).
  • Informații de calibrare: Informațiile conținute în acest fișier („calvals.txt”) sunt utilizate pentru calibrarea senzorului de temperatură / umiditate de la bord, dacă este necesar. Constantele de calibrare pot fi scrise numai pe dispozitivul IoT prin comenzi MQTT de la un broker MQTT.

Notă: Pentru a configura inițial dispozitivul, consultați aici detalii complete despre modul de utilizare a SPIFFS cu IDE-ul Arduino.

Server mDNS

Această funcționalitate este invocată atunci când dispozitivul IoT nu a reușit să se conecteze la rețeaua WiFi ca stație WiFi și, în schimb, a devenit un punct de acces WiFi ceva asemănător cu un router WiFi intern. În cazul unui astfel de router, vă veți conecta în mod obișnuit introducând adresa IP a ceva de genul 192.168.1.1 (tipărită de obicei pe o etichetă atașată la casetă) direct în bara URL a browserului, după care veți primi o pagină de autentificare pentru a intra numele de utilizator și parola pentru a vă permite să configurați dispozitivul.

Pentru ESP8266 în modul AP (modul Punct de acces) dispozitivul implicit este adresa IP 192.168.4.1, cu toate acestea, cu serverul mDNS care rulează, trebuie să introduceți numai numele prietenos uman „SENSORSVR.local” în bara URL a browserului. „Pagina principală de configurare a senzorului”.

Client MQTT

Clientul MQTT oferă toate funcționalitățile necesare pentru; conectați-vă la rețeaua dvs. IoT broker MQTT, abonați-vă la subiectele la alegere și publicați sarcini utile la un subiect dat. Pe scurt, prevede funcționalitatea de bază IoT.

Server Web

După cum sa menționat mai sus, dacă dispozitivul IoT nu se poate conecta la rețeaua WiFi al cărui SSID, P / W etc. este definit în fișierul cu informații de securitate deținut în SPIFFS, dispozitivul va deveni un punct de acces. Odată conectat la rețeaua WiFi furnizată de Access Point, prezența unui server web HTTP vă permite să vă conectați direct la dispozitiv și să modificați configurația acestuia prin utilizarea unui browser Web HTTP, scopul fiind de a servi „Acasă configurare senzor” Pagina web a paginii, care este, de asemenea, păstrată în SPIFFS.

Stație WiFi

Această funcționalitate oferă dispozitivului IoT capacitatea de a se conecta la o rețea WiFi internă utilizând parametrii din fișierul Informații de securitate, fără aceasta dispozitivul dvs. IoT nu va putea să se aboneze / să publice la MQTT Broker

Punct de acces WiFi

Capacitatea de a deveni un punct de acces WiFi este un mijloc prin care dispozitivul IoT vă permite să vă conectați la acesta și să efectuați modificări de configurare printr-o stație WiFi și un browser (cum ar fi Safari pe Apple iPad).

Acest punct de acces difuzează un SSID = "SENSOR" + ultimele 6 cifre ale adresei MAC a dispozitivului IoT. Parola pentru această rețea închisă este numită imaginațional „PAROLĂ”

Pasul 3: Prezentare generală a software-ului

Prezentare generală a software-ului
Prezentare generală a software-ului
Prezentare generală a software-ului
Prezentare generală a software-ului

Preambul Pentru a compila cu succes acest cod sursă, veți avea nevoie de următoarele biblioteci suplimentare;

PubSubClient.h

  • De: Nick O'Leary
  • Scop: Permite dispozitivului să publice sau să se aboneze la subiecte MQTT cu un anumit Broker
  • De la:

DHT.h

  • De: Adafruit
  • Scop: Biblioteca pentru senzor de temperatură / umiditate DHT
  • De la:

Prezentare generală a codului

Software-ul folosește mașina de stat așa cum se arată în imaginea 1 de mai sus (o copie completă a sursei de mai jos). Există 5 stări principale ca mai jos;

  • INIT

    Această stare de inițializare este prima stare introdusă după pornire

  • NOCONFIG

    Această stare este introdusă dacă după pornire este detectat un fișier secvals.txt nevalid sau lipsă

  • PENDENT NW

    Această stare este tranzitorie, a intrat în timp ce nu există o conexiune de rețea WiFi

  • MQTT PENDENT

    Această stare este tranzitorie, introdusă după ce s-a făcut o conexiune de rețea WiFi și, deși nu există nicio conexiune la un broker MQTT din acea rețea

  • ACTIV

    Aceasta este starea operațională normală introdusă după stabilirea atât a unei conexiuni de rețea WiFi, cât și a unei conexiuni MQTT Broker. În această stare, funcționalitatea de temperatură și umiditate a senzorului este publicată către Brokerul MQTT

Evenimentele care controlează tranzițiile între stări sunt descrise în imaginea 1 de mai sus. Tranzițiile între state sunt, de asemenea, guvernate de următorii parametri SecVals;

  • Prima adresă IP a brokerului MQTT. În formă zecimală punctată AAA. BBB. CCC. DDD
  • Al doilea port de broker MQTT. În formă de număr întreg.
  • A treia conexiune broker MQTT încearcă să se facă înainte de a trece de la modul STA la modul AP. În formă de număr întreg.
  • Al 4-lea rețea WiFi SSID. În text liber.
  • A 5-a parolă de rețea WiFi. În text liber.

Așa cum s-a menționat mai sus, dacă dispozitivul IoT nu se poate conecta ca stație WiFi la rețeaua WiFi care are SSID și P / W este definit în secvals.txt deținut în SPIFFS, dispozitivul IoT va deveni un punct de acces. Odată conectat la acest punct de acces, acesta va afișa „Pagina principală a configurării senzorului”, așa cum se arată mai sus în imaginea 2 (introducând fie „SENSORSVR.local”, fie 192.168.4.1 în bara de adrese URL a browserului dvs.). Această pagină de start permite reconfigurarea senzorului printr-un browser

Acces la distanță în timp ce se află în starea ACTIVĂ

Odată conectat la Brokerul MQTT, este de asemenea posibil să recalibrați și să reconfigurați dispozitivul prin intermediul publicațiilor tematice MQTT. Fișierul calvals.txt are acces R / W și secvals.txt are acces doar la scriere expus.

Depanare utilizator

În timpul secvenței de boot, ledul dispozitivului IoT oferă următorul feedback de depanare

  • 1 Bliț scurt: Nu există fișier de configurare localizat în SPIFFS (secvals.txt)
  • 2 Blițuri scurte: dispozitivul IoT încearcă să se conecteze la rețeaua WiFi
  • Iluminare continuă: dispozitivul IoT încearcă să se conecteze la MQTT Broker
  • Off: Dispozitivul este activ
  • Notă 1: „Pagina principală de configurare a senzorului” nu folosește prize securizate și, prin urmare, se bazează pe securitatea rețelei.
  • Notă 2: Pentru a programa fiecare dispozitiv IoT, șirul MQTT va necesita editare înainte de descărcare. Acest lucru se datorează faptului că numărul senzorului a fost încorporat în șirul de subiecte MQTT. adică „WFD / THSen / 100 / HumdStatus / 1” pentru cele 6 dispozitive ale mele sunt numerotate respectiv 1 … 6.

Pasul 4: Calibrarea senzorului

Calibrarea senzorului
Calibrarea senzorului
Calibrarea senzorului
Calibrarea senzorului

Când dispozitivul IoT se pornește, ca parte a secvenței de boot, un fișier numit „cavals.txt” este citit din SPIFFS. Conținutul acestui fișier sunt constante de calibrare, așa cum este indicat mai sus în imaginea 1. Aceste constante de calibrare sunt utilizate pentru a regla citirile dobândite de la senzor pentru a le alinia cu un dispozitiv de referință. Există o altă valoare care definește o strategie de raportare pentru dispozitiv și este descrisă mai jos împreună cu procedura urmată pentru calibrarea senzorilor.

Strategie de raportare Acest parametru determină modul în care senzorul de la distanță raportează orice modificări parametrice ambientale locale. Dacă este selectată o valoare 0, senzorul de la distanță va publica orice modificare pe care o va vedea în valorile de temperatură sau umiditate de fiecare dată când senzorul este citit (aproximativ la fiecare 10 secunde). Orice altă valoare va întârzia publicarea unei modificări cu 1 … 60 de minute. Modificarea acestui parametru permite optimizarea traficului de rețea MQTT.

Calibrarea temperaturii

Pentru a calibra senzorii, aceștia au fost plasați în apropiere fizică strânsă unul cu celălalt, așa cum se arată mai sus în imaginea 2. De-a lungul lor, am plasat un DMM cu un termocuplu calibrat atașat (Fluke 87 V) și apoi am monitorizat ieșirile de la fiecare dispozitiv prin temperatura OpenHAB pagina tendințelor pe parcursul unei zile pentru a obține o schimbare bună a temperaturii. Am observat atât offset-ul static ("C" ridicat la zero), cât și rata de schimbare a fiecărui dispozitiv (câștig sau panta graficului "M") în raport cu valoarea valorii provenite de la termocuplul calibrat. Am calculat apoi relația simplă y = mx + c (am găsit că era suficient de liniară pentru a fi o aproximare apropiată a unui grafic liniar) și am programat orice corecții necesare în constantele de calibrare prin MQTTSpy.

Dispozitivele au fost apoi monitorizate încă 24 de ore pentru a se asigura că calibrarea a avut succes. O indicație a urmelor de temperatură de pe pagina de tendință a temperaturii OpenHAB erau aproape una peste alta.

Desigur, dacă sunteți interesat doar de o aproximare la temperatură, puteți lăsa toate valorile de calibrare ca implicite.

Calibrarea umidității

Deoarece nu am mijloace pentru a înregistra cu precizie sau chiar pentru a controla umiditatea ambientală locală, pentru a calibra senzorii, am folosit o abordare similară cu cea de mai sus, plasând toate dispozitivele în apropiere fizică strânsă (imaginea 2) și monitorizând pur și simplu ieșirea lor prin OpenHAB Umiditatea tinde pagina. Am ales apoi dispozitivul nr. 1 ca referință de calibrare și am calibrat toate dispozitivele în raport cu acesta.

Pasul 5: Convenția de numire a subiectelor MQTT

Convenția de denumire a subiectelor MQTT
Convenția de denumire a subiectelor MQTT
Convenția de denumire a subiectelor MQTT
Convenția de denumire a subiectelor MQTT

După multe încercări și erori, m-am stabilit asupra convenției de numire a subiectului prezentată în imaginea 1 de mai sus.

Anume, „AccessMethod / DeviceType / WhichDevice / Action / SubDevice”

Nu este perfect, dar permite aplicarea de filtre utile pentru a vedea toate ieșirile senzorilor pentru o anumită valoare parametrică, permițând astfel o comparație ușoară, ca în imaginea 2 de mai sus cu MQTTSpy. De asemenea, acceptă grupări logice de funcționalitate extensibile în mod rezonabil într-un anumit dispozitiv IoT.

În implementarea acestor subiecte în software, am folosit șiruri de subiecte codate cu coduri de identificare numerice fixe, încorporate pentru fiecare dispozitiv, spre deosebire de generarea dinamică a subiectelor în timpul rulării, astfel încât să economisesc RAM și să mențin performanța ridicată.

Notă: Dacă nu sunteți sigur cum să utilizați MQTTSpy, consultați aici „Configurarea unui broker MQTT. Partea 2: IoT, Home Automation '

Pasul 6: Configurare OpenHAB

Configurare OpenHAB
Configurare OpenHAB
Configurare OpenHAB
Configurare OpenHAB
Configurare OpenHAB
Configurare OpenHAB

Am modificat configurația OpenHAB dată în Instructable-ul meu anterior (aici) și am adăugat în intrări individuale pentru;

  • Garaj,
  • Hall,
  • Sufragerie,
  • Bucătărie
  • Dormitor pentru oaspeti
  • Dormitor matrimonial

În harta site-ului, a se vedea imaginea 1 de mai sus.

Pentru fiecare dintre aceste intrări am adăugat sitemapuri individuale expunând valorile ambientale locale (a se vedea imaginea 2 de mai sus);

  • Temperatura
  • Umiditate
  • Index de caldura

Am inclus și un comutator pentru a controla ledul local montat în senzor.

Imaginile 3… 5 prezintă urme individuale live pe o perioadă de 24 de ore pentru temperatură, umiditate și RSSI (Indicarea puterii semnalului recepționat, practic o măsură a cât de bine poate vedea senzorul rețeaua WiFi).

Imaginea 6 oferă un exemplu de tendință de umiditate pe termen lung pe parcursul unei săptămâni.

Notă 1: Dacă nu sunteți sigur cum să utilizați OpenHAB, consultați aici „Configurarea și configurarea OpenHAB. Partea 6: IoT, Home Automation '

Notă 2: O copie a sitemap-ului modificat, a fișierelor cu reguli și articole, pictograme etc. este prezentată mai jos.

Pasul 7: Testarea designului

Testarea proiectării
Testarea proiectării
Testarea proiectării
Testarea proiectării

În cea mai mare parte am testat dispozitivul IoT prin conexiunea MQTT cu MQTT Spy, monitorizând ieșirea ledului și depanând traficul pe interfața serială. Acest lucru mi-a permis să exercit toate subiectele abonate disponibile și să verific răspunsurile publicate. Deși acest lucru a fost realizat manual și a devenit uneori puțin obositor, a permis o acoperire de 100%.

Cu toate acestea, mașina de stat principală sa dovedit a fi puțin dificilă de testat, deoarece se bazează pe prezența sau absența unei rețele WiFi, accesul la care necesită seturi de parametri specifici. Pur și simplu nu era practic să folosiți rețeaua de domiciliu pentru acest lucru.

Pentru a rezolva această problemă, mi-am creat propriul set de rețele fictive folosind ESP8266-01 configurat ca puncte de acces (foto 1) cu SSID-uri „DummyNet1” și respectiv „DummyNet2”. Utilizarea circuitului din imaginea 2 de deasupra ledului a indicat dacă un dispozitiv IoT s-a conectat la acesta. În timp ce aceasta nu a fost o soluție de testare perfectă (de exemplu, fiecare dintre aceste rețele WiFi fictive nu conținea un server MQTT) a fost posibilă testarea completă a mașinii de stare.

Am inclus mai jos o copie a codului sursă.

Pasul 8: Concluzie

General

Software-ul din dispozitivele IoT a funcționat în mod fiabil de mai multe luni, recuperându-se după întreruperile de curent ale gospodăriei (cauzate în principal de mine). În general, acestea sunt dispozitive destul de robuste care oferă date consistente și exacte.

Îmbunătățiri

În dezvoltarea rutinelor software pentru citirea și scrierea la SPIFFS am scris cod care, din spate, ar putea fi puțin mai avansat decât intenționasem, folosind pointeri void, reformare și pointeri către pointeri. Deși este foarte flexibil și face treaba bine, data viitoare aș putea folosi JSON într-un mod similar cu ConfigFile.ino pentru a-l menține puțin mai simplu.

  • Arduino GIT HUB Core

    https://github.com/esp8266/Arduino

  • Sursa ConfigFile.ino

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

Lista de dorințe

Intenționasem să folosesc un client mDNS pentru a mă conecta la Broker, dar biblioteca era prea slabă. Acesta este motivul pentru care este necesar să specificați adresa IP a brokerului MQTT, spre deosebire de „MQTTSVR.local”. În cazul în care biblioteca mDNS va deveni mai stabilă în viitor, voi adăuga această capacitate dispozitivului.

Ar fi fost frumos să existe un mijloc atât de monitorizare cu precizie, cât și de control al umidității ambientale pentru a calibra senzorii. Cu toate acestea, a spus că metoda de calibrare aleasă oferă citiri relative bune și pare rezonabil de exactă, în conformitate cu specificațiile din foaia de date DHT22.

În cele din urmă, având în vedere complexitatea software-ului, am găsit testarea completă a codului după ce o schimbare majoră a devenit consumatoare de timp. Aș putea lua în considerare testarea automată la o dată ulterioară.

Pasul 9: Referințe utilizate

Am folosit următoarele surse pentru a pune acest Instructable împreună;

PubSubClient.h

  • De: Nick O'Leary
  • De la:

DHT.h

  • De: Adafruit
  • De la:

Foaie de date DHT22

Recomandat: