Ce este Smart House pentru tine?
În articolul „Universal Ethernet-dispozitiv pentru gestionarea casei,“ Am făcut un mic sondaj dintr-o soluție relativ ieftine, care interogheze diferiți senzori și butoane, precum și gestionarea diferitelor încărcături (lămpi, aparate, încălzitoare). În acest articol, aș dori să continuu conversația despre utilizarea rețelei Ethernet în Smart House.
Tot felul de administratori IP gata, cum ar fi IP Power sau NetPing cu toate avantajele au dezavantajele lor. În primul rând, desigur, acesta este prețul. În al doilea rând, absența, din motive evidente, a codurilor sursă de firmware și incapacitatea de a schimba complet logica dispozitivului. În cazul în care prețul este mai mult sau mai puțin clar (vreau să fac un dispozitiv eu cel puțin 5-7 ori mai ieftin), atunci despre logica ar trebui să fie explicat.
Deci, am vrut să fac un dispozitiv care ar avea pricepere:
Evident, funcționalitatea de bază descrisă mai sus nu există în produsele gata făcute pe piață.
Pentru a crea un astfel de dispozitiv am folosit Atmega168 microcontroler (ATmega328 și mai târziu), de la compania Atmel, care are la bord 16K Flash pentru cod și cip ENC28J60 de la Microchip, care a fost sprijinirea rețelei Ethernet și este conectat la MC prin intermediul SPI interfață.
Dispunerea dispozitivului de la Guido Socher (tuxgraphics)
De ce au fost alese aceste cipuri. În primul rând, o schemă de circuit destul de simplă a dispozitivului. În al doilea rând, componente cu cost redus. În al treilea rând, Atmega168 și ENC28J60 sunt disponibile în pachete DIP și au 28 picioare. Acest lucru înseamnă că puteți asambla un astfel de dispozitiv la domiciliu fără abilități și echipamente speciale. Pentru a simplifica și mai mult aspectul dispozitivului, este utilizat conectorul RJ-45 MAG-Jack cu transformator încorporat. De fapt, tot ceea ce aveți nevoie pentru a construi un dispozitiv este un MK, un chip de interfață, un conector, un oscilator cuarț și o pereche de rezistențe.
Rezultatul este un dispozitiv miniatural cu dimensiunile de 75x40 mm. Dar, de fapt, acesta este un server Web cu funcționalitate puternică.
Ce crezi că este? Acesta este un server Web.
Pentru a programa dispozitivul, puteți utiliza un programator simplu, cum ar fi USBasp.
Software de stânga (necesar numai pentru descărcarea firmware-ului, modulul dreapta
Testați firmware-ul. Gestionare de ieșire pe bază de web
Ideea principală este de a putea configura fiecare port al microcontrolerului individual utilizând interfața Web. Astfel, orice port disponibil poate fi configurat ca o intrare (butoane, senzori) ca ieșire (lămpi, dispozitive) sau ca un ADC (diverși senzori, în cazul în care portul are incorporat un MK ADC). Astfel, am un fel de acord cu unitatea terminat în două părți - miez și add-in modulul la terminalele care sunt conectate dispozitivele terminale și senzori. De exemplu, până astăzi aveam nevoie de 10 intrări pentru butoane și 3 ieșiri pentru controlul lămpilor. Dar există o nouă sarcină și acum aveți nevoie de 9 intrări și 4 ieșiri. Tot ceea ce este necesar este de a schimba conexiunea la modulul de expansiune și reconfigureze dispozitivele cu orice browser, dar nici o schimbare în firmware-ul nucleu de cod, nu necesită programare. Pe de altă parte, pot exista mai multe dispozitive în casă care au configurații diferite de intrări și ieșiri, dar cu totul același firmware. În acest sens, în mod individual personalizabil Etnernet în modul vizual, funcția de fiecare port este, în esență, înlocuiește programarea tradițională și cusăturile, care necesită cunoștințe suplimentare, echipamente si cel mai important - de timp.
Există 13 porturi libere în dispozitivul descris de mine. În acest moment, toate porturile au nume asociate cu porturile MK (D0, D1, etc), a fost convenabil pentru dezvoltarea, dar în viitor, puteți renunța la această numerotare în favoarea unora mai tradiționale.
Lista disponibilă pentru gestionarea și configurarea porturilor controlerului
Dând clic pe numele portului, intrăm în modul de configurare. După cum am spus, fiecare port poate fi configurat ca IN, OUT și ADC.
Rețineți că toate setările sunt salvate în EEPROM (memorie nevolatilă), care este, după ce ați oprit dispozitivul este salvat.
Dacă configuram portul ca OUT (ieșire), atunci în interfața Web va fi posibil să vedem starea curentă a ieșirii de stat. care poate fi setat la OFF sau ON, precum și posibilitatea de a porni sau dezactiva sarcina conectată aici.
În cazul în care setăm portul ca ADC, putem vedea o valoare de la 0 la 255, care caracterizează starea senzorului.
Cu toate acestea, cele mai interesante setări pentru port sunt modul IN (intrare).
Valoarea de stat este evidentă - poziția de intrare curentă. Restul necesită o explicație separată.
Principala problemă pentru multe dispozitive Smart House este că nu pot spune comandantului / serverului / controlorului însuși despre declanșarea oricărei intrări. De obicei expertul, în care serverul (PC) acționează în cazul meu, interoghează dispozitivele cu o anumită frecvență. În multe cazuri, frecvența de votare nu este critică, dar nu și în cazul comutatoarelor de lumină. Imaginați-vă o situație în care, după apăsarea comutatorului, lumina se aprinde întârziat (când se folosesc mecanisme cum ar fi zăvorul în 1 fir) sau nu se aprinde deloc (am lovit momentul dintre sondaje). Astfel, pentru a lucra complet cu întrerupătoarele de lumină, este necesar să se interogheze fiecare comutator de câteva ori pe secundă. Acest lucru va crea un trafic decent în orice fel de rețea.
În acest sens, o altă abordare pare logică. Aparatul însuși determină faptul că apasă butonul, informează serverul despre el și întreabă ce trebuie să facă. Această logică este încorporată în firmware-ul dispozitivului nostru Ethernet.
Deci, butonul pentru a lucra, MC a dat presei (de altfel, în firmware-ul pus în aplicare eficientă de protecție a software-ului algoritm de contact de respingere - debouncing) și protocolul HTTP comunică cu serverul, dându-i informațiile necesare. Protocolul HTTP nu a fost ales din întâmplare. Pe de o parte, este într-o anumită măsură de livrare de pachete de garanție, deoarece HTTP trece peste TCP, tu pe de altă parte, mai important, mult mai ușor, mi se pare, pe partea de server de programare. La urma urmei, avem deja un server Web acasă. de lucru pe Apache!
Log Apache. Dispozitivul îi spune serverului să modifice starea de intrare 0 (D0)
Trebuie doar să scriem un script PHP simplu care să răspundă unei solicitări de dispozitiv.
Dacă a fost declanșat intrarea "0", informați-l pe dispozitiv ca răspuns la "6: 2". Dar ce înseamnă această comandă?
Comanda către dispozitiv constă din două câmpuri separate de un colon.
Primul câmp (6) este numărul portului de la 0 la 12 (avem 13 intrări / ieșiri)
Al doilea câmp (2) este o acțiune. Posibile opțiuni (0 - dezactivare, 1 - pornire, 2 - comutare între oprire sau oprire)
Este important să rețineți că serverul poate trimite simultan mai multe comenzi către dispozitiv.
De exemplu, "6: 2; 5: 1", separate de punct și virgulă, ceea ce înseamnă "Comutator de ieșire 6, ieșire 5 pornit". Un singur răspuns de server poate conține până la 13 astfel de comenzi. Simplu, nu-i așa?
Dar dacă rețeaua noastră de domiciliu nu are deloc un server sau este indisponibilă sau defectă dintr-un anumit motiv? Nu eo problemă! Să revenim la configurarea intrării.
Aici în câmpul Cmd, în același format, de exemplu "6: 2", comanda pe care dispozitivul o execută dacă:
1) Serverul nu este înregistrat în configurația dispozitivului
2) Serverul este înregistrat, dar nu răspunde în 3 secunde
Deci, dacă vorbim, de exemplu, despre controlul luminii, putem folosi acest dispozitiv ca atare, fără servere. și în legătură cu serverul. unde comenzile descrise în Cmd acționează ca script implicit. În orice caz, nu vom fi fără lumină. Același lucru se poate spune și pentru aplicațiile relativ mai critice legate de sistemele de securitate și protecție. Există un server - cerem, nu există server - rezolvă o problemă independent.
Dar dacă avem două astfel de dispozitive în rețea și în funcție de scenariul în care intrarea de pe primul dispozitiv declanșează, ieșirea pe cealaltă ar trebui să comute? De exemplu, un senzor de scurgere într-un singur loc și un robinet cu unitatea în celălalt? Pentru aceasta, există ultimul câmp Eth:
Puteți controla dispozitivul nu numai prin intermediul unui browser Web sau prin intermediul unor scripturi, ci și prin orice programe cum ar fi wget, curl, deoarece pentru a trimite informații utilizând un șir de adrese URL și solicitări GET cum ar fi
care cred că este foarte convenabil, deoarece vă permite să utilizați un număr foarte mare de diverse instrumente, utilitare, și facilitează integrarea Ethernet-dispozitive în casă inteligentă, la orice ar fi fost în construcție.
Nu este chiar mai dificil să obțineți starea actuală a portului.
Pentru această solicitare, dispozitivul Ethernet va afișa numai starea (valoarea ON, OFF sau ADC) fără informații inutile. Este convenabil să folosiți comanda "get" în programele de pe server. Deci, de exemplu, pentru a citi starea dispozitivului ADC, este suficientă o singură linie în PHP!
Pentru a compila pe Linux firmware-ul de umplere necesită doar trei pachete: compilatorul în sine gcc-avr, bibliotecă pentru a lucra cu AVR, și programul de lucru cu programator, bine-cunoscutul „țeavă“ avrdude
Pentru a compila firmware-ul, trebuie să despachetați arhiva (în partea de jos a articolului) și să executați comanda make.
Firmware-ul USBasp este programat cu ajutorul comenzii
În momentul de față, tot ce este scris în articol, memoria microcontrolerului ia doar 15252 de octeți.
O altă fotografie a dispozitivului în momentul dezvoltării. Stand pentru depanare și experimente.
Starea de depanare. Dispozitiv Ethernet, programator
Butoane, rezistență variabilă pentru depanarea ADC
Diodele și triacurile (apropo, de la tasta 1-fir) pentru testarea ieșirilor
Firmware pentru Atmega328
Programarea fuzionărilor este un proces FOARTE responsabil, deoarece este ușor să întrerupeți performanța microcontrolerului.
atmega32u4 de la ENC este tactat. (puteți deduce totul de la ea).
Poate firmware-ul așa cum este recompilat în cadrul atmega32u4 nevoie?
Sau aruncați această idee?
Toate celelalte opțiuni de circuite sunt listate aici, cu poltyk lansat.
Schema a fost verificată de mai multe ori, ca și cum totul este bine. Promiți în ce poate fi o problemă? Există o suspiciune privind un cip non-working sau un ENC. Cum pot diagnostica dispozitivul încă?
Poate vizualizarea dvs. din exterior ajuta? Mulțumesc!
PS Mulțumesc pentru articole! Întotdeauna cu plăcere vin la site-ul dvs.