Sadržaj:

Kućno upozorenje: Arduino + slanje poruka u oblaku na velikom ekranu: 14 koraka (sa slikama)
Kućno upozorenje: Arduino + slanje poruka u oblaku na velikom ekranu: 14 koraka (sa slikama)

Video: Kućno upozorenje: Arduino + slanje poruka u oblaku na velikom ekranu: 14 koraka (sa slikama)

Video: Kućno upozorenje: Arduino + slanje poruka u oblaku na velikom ekranu: 14 koraka (sa slikama)
Video: Sustav kućne automatizacije za izbjegavanje poplava i curenja vode 2024, Novembar
Anonim
Kućno upozorenje: Arduino + slanje poruka u oblaku na velikom ekranu
Kućno upozorenje: Arduino + slanje poruka u oblaku na velikom ekranu
Kućno upozorenje: Arduino + slanje poruka u oblaku na velikom ekranu
Kućno upozorenje: Arduino + slanje poruka u oblaku na velikom ekranu
Kućno upozorenje: Arduino + slanje poruka u oblaku na velikom ekranu
Kućno upozorenje: Arduino + slanje poruka u oblaku na velikom ekranu

U doba mobilnih telefona očekivali biste da će ljudi reagirati na vaš poziv 24 sata dnevno.

Ili ne. Kada moja žena dođe kući, telefon ostaje zakopan u torbi ili joj je baterija prazna. Nemamo fiksnu liniju. Pozivanje ili slanje SMS -a radi traženja prijevoza kući sa željezničke stanice u kišnoj noći ili pozivanje s pitanjem da li su mi ključevi još na stolu doslovno su želja.

Ovaj problem imam dovoljno često da garantujem rješenje. Malo petljanja s Arduinom i Freetronics Dot Matrix zaslonom (DMD) rezultiralo je vrlo dosadnim (za moju ženu) spravicom, ali za mene nevjerojatnim komunikacijskim uređajem i informacijskim centrom. Obožavam ga i to je samo verzija 1!

Kućno upozorenje se sastoji od ovih dijelova:

  • Freetronics Dot Matrix Display, koji je niz LED dioda od 16x32. Dolaze u različitim bojama, ali ja koristim crvenu da naglasim da je ovaj gadget za "kritične" obavijesti.
  • Arduino Uno sa Ethernet štitom.
  • Proboj sata u realnom vremenu, ovakav ili ovaj.
  • Piezo zujalica
  • Senzor temperature i vlažnosti DHT22.

Kućnim upozorenjem upravlja se putem web stranice koja se nalazi na Heroku-u, hostu aplikacija u oblaku. Web stranica je kodirana u Ruby-u, koristeći okvir web aplikacije Sinatra i Redis-skladište ključ-vrijednost.

Pogledajte početnu stranicu (prikaži na prvoj priloženoj slici u ovom koraku), gdje obrazac čeka novu poruku od korisnika.

Prvo polje prihvaća numerički hardverski kod. To je kôd koji vam omogućuje ciljanje na određeni sistem kućnog upozorenja, jer svaki može dobiti jedinstveni kôd. Ili možete imati više kućnih upozorenja koja dijele isti kôd, tako da se ista poruka prikazuje na više lokacija.

Poruka koju želite prikazati ide u drugo polje. Svaki tekst koji unesete bit će prikazan u DMD -u.

Ako želite napraviti buku, označite Da! polje za potvrdu, a zujalica će zasigurno privući pažnju bilo koga u blizini.

U ovom članku pokazat ću vam kako izgraditi vlastiti sustav kućnog upozorenja, i Arduino hardver i softver, kao i mini web aplikaciju Sinatra.

Hajde da počnemo!

Korak 1: Hardver

Hardver
Hardver
Hardver
Hardver
Hardver
Hardver

DMD je žarište gadžeta. Mogao sam otići s malim LCD ekranom, ali glavna ideja ovog projekta bila je proizvesti nešto što se može vidjeti i čuti iz daljine. Za vizuelni dio, trebalo mi je nešto veliko i svijetlo, a ovaj Freetronics ekran je upravo ono što mi je trebalo. Svaka ploča sadrži niz LED dioda od 16x32, a nekoliko njih možete spojiti zajedno kako biste stvorili mnogo veće zaslone. Ovo je nešto što bih volio raditi u bliskoj budućnosti.

DMD dolazi s Arduino bibliotekom koja se lako koristi. komunicira s Arduinom putem SPI-ja velike brzine. Uspio sam nabaviti biblioteku sa stranice Freetronics Github, zatim pokrenuti demo skicu i pokrenuti je u roku od nekoliko minuta od otvaranja kutije. Iznenadio sam se kada sam video tako svetao ekran koji koristi samo napajanje iz Arduina. Ako želite privremeno zaslijepiti gledatelje, na ovaj DMD možete priključiti namjensko napajanje. Ako ovo ne privuče njihovu pažnju, ništa neće!

Fizički, ovaj ekran ima dimenzije 320 mm (W), 160 mm (H) i 14 mm (D).

Stražnja ploča sadrži konektore za vanjsko napajanje, 5V s kapacitetom od najmanje 4 Ampera, Arduino konektor označen sa HUB1 i konektor za povezivanje dodatnih displeja na suprotnoj strani. Prema dokumentaciji, možete lanac povezati do četiri DMD-a.

DMD kontrolira Arduino Uno. Freetronics pruža vrlo prikladan “DMDCON” konektor koji se jednostavno uklapa u odgovarajući SPI i podatkovne pinove.

Osim DMD-a, koristio sam Arduino Uno, Ethernet štit, prekidač sata u stvarnom vremenu, zujalicu i DHT22. Za sve ove komponente kreirao sam predavanja koja opisuju njihov rad na tečaju Udemy. (Besramna samopromocija: prijavite se na moju listu e-pošte na arduinosbs.com i primite kupon koji vam daje pristup s popustom na svih 55 predavanja).

Sat u stvarnom vremenu, prekid zasnovan na IC-u takta DS18072, je I2C uređaj pa je povezan s Uno-ovim analognim pinovima 1 i 2, koji implementiraju I2C sabirnicu.

Zvučni signal je povezan na digitalni pin 3, odakle upravljam pomoću funkcije tone ().

Senzor DHT22 spojen je na digitalni pin 2. Budite oprezni pri povezivanju otpornika od 10KΩ između 5V linije i podatkovne linije.

Korak 2: Arduino skica

Skica nije velika u smislu broja linija, ali gotovo iscrpljuje Uno -ovu dostupnu flash memoriju zahvaljujući svim uključenim bibliotekama. Ima mnogo prostora za optimizaciju memorije, ali budući da sam u fazi izrade prototipa, to je projekt za još jedan dan. Ovaj kod je dostupan na Githubu.

Evo skice sa ugrađenim komentarima (pogledajte PDF prilog).

Glavna odgovornost ove skice je učiniti Arduino potrošačem web usluge. Web usluga je jednostavna web stranica s dvije krajnje tačke, jednoj za pristup ljudskom korisniku putem web preglednika i podnošenju tekstualnog niza koji želi prikazati na DMD-u, te drugoj na kojoj će Arduino pristupiti kako bi dohvatite taj tekstualni niz.

Preuzmite i pročitajte priloženu PDF datoteku, koja sadrži ugrađene komentare koji opisuju njeno funkcioniranje.

Korak 3: Sinatra stupa na scenu

Sinatra stupa na scenu!
Sinatra stupa na scenu!

Postoji mnogo načina za stvaranje web stranica i web usluga. Od programskih jezika s bibliotekama koje podržavaju web, do potpuno opremljenih okvira, može biti zbunjujuće i teško je odabrati jedan za ovaj posao.

Koristio sam i igrao se s priličnim brojem tehnologija web aplikacija, i otkrio sam da je Sinatra idealan za izgradnju web usluga i malih web stranica. Konkretno, kada napravim web uslugu koja podržava Arduino gadget, Sinatra je zaista dobar izbor.

Šta je Sinatra i zašto je tako dobar izbor? Drago mi je da ste pitali!

Sinatra je jezik za brzi razvoj web aplikacija. Zasnovan je na Rubyju, vrlo popularnom i izražajnom skriptnom jeziku opće namjene. Možda ćete čuti da se Sinatra naziva „DSL“, jezik specifičan za domenu. Domena ovdje je Web. Ključne riječi (riječi) i sintaksa stvorena za Sinatru takve su da ljudima olakšavaju i brze stvaranje web aplikacija.

U vrijeme kada su takozvani „uvjereni“okviri za razvoj web aplikacija poput Ruby on Rails i Django super popularni, Sinatra zahvaća suprotni kraj spektra. Dok Ruby on Rails i Django zahtijevaju od programera da slijedi određenu konvenciju i način rada (što pak podrazumijeva strmu i dugu krivulju učenja), Sinatra ne postavlja takve zahtjeve.

Sinatra je konceptualno mnogo jednostavniji od svjetskih Rails -a i Django -a. Možete se pokrenuti i pokrenuti s web aplikacijom koja može komunicirati s vašim Arduinom u roku od nekoliko minuta.

Pokazat ću na primjeru. Evo kako izgleda minimalna web aplikacija Sinatra (za sada pročitajte sljedeće, nemojte to raditi na svom računaru jer vjerojatno još nemate postavljene preduvjete za ovo):

U jednoj datoteci, nazovimo je my_app.rb, dodamo ovaj tekst:

zahtijevaju 'sinatra'get'/'do "Hello, world!" end

Na komandnoj liniji pokrenite aplikaciju ovako:

ruby my_app.rb

Vaša će se aplikacija pokrenuti, a na konzoli ćete vidjeti ovaj tekst:

peter@ubuntu-dev: ~/arduino/sinatra_demo $ ruby my_app.rbPuma 2.8.1 počinje…* Min niti: 0, max niti: 16* Okruženje: razvoj* Slušanje na tcp: // localhost: 4567 == Sinatra/1.4.4 je stupio na fazu razvoja 4567 sa sigurnosnom kopijom iz Pume

Aplikacija je sada spremna za primanje zahtjeva klijenata. Otvorite preglednik, usmjerite ga na https:// localhost: 4567 i to ćete vidjeti (pogledajte priloženi snimak ekrana).

To su četiri jednostavne linije koda u jednoj datoteci. Nasuprot tome, Rails -u bi bilo potrebno više od stotinu datoteka, generiranih jednostavno kako bi zadovoljili zahtjeve okvira. Nemojte me krivo shvatiti, volim Rails, ali zaista?…

Dakle, Sinatra je jednostavna i brza za pokretanje. Pretpostavit ću da ne znate ništa o Rubyju, Sinatri i implementaciji aplikacija u Cloud, pa ću vas u sljedećem odjeljku odvesti korak po korak od nule do implementacije vaše Arduino web usluge u Cloud.

Korak 4: Postavite svoju razvojnu mašinu

Sinatra je zasnovana na programskom jeziku Ruby. Dakle, morate instalirati Ruby prije nego instalirate Sinatru.

Također ćete morati instalirati poslužitelj skladišta ključ-vrijednost pod nazivom Redis. Zamislite Redis kao bazu podataka koja pohranjuje podatke protiv ključa. Za dohvaćanje podataka koristite ključ koji je optimiziran za brzinu, a ne fleksibilnost struktura podataka za koju je dizajnirana tradicionalna relacijska baza podataka. Home Alert svoje poruke pohranjuje u Redis.

Korak 5: Ruby na Macu ili Linuxu

Ako koristite Mac ili Linux računalo, preporučujem vam da koristite RVM za instaliranje i upravljanje vašom Ruby instalacijom (RVM: Ruby Version Manager). Upute za instaliranje Ruby -a s RVM -om nalaze se na ovoj stranici ili samo kopirajte i zalijepite ovu naredbu u svoju ljusku:

curl -sSL https://get.rvm.io | bash -s stable --ruby

Sjednite, naslonite se, opustite se i pričekajte da se preuzimanje, kompilacija i instalacija RVM -a i Rubyja završe.

Korak 6: Ruby na Windowsima

Ako koristite Windows, preporučujem da slijedite ovaj vodič na web stranici Ruby Installer za Windows i upotrijebite aplikaciju za postavljanje.

Korak 7: Provjerite i postavite svoj Ruby

U vrijeme pisanja ovog članka najnovije stabilno izdanje Ruby je 2.1.1.p76. Možete provjeriti verziju koja je instalirana s RVM -om upisivanjem ovoga:

rvm info

Pojavit će se mnogo informacija o RVM -u i Ruby. U mom slučaju, ovo je Ruby odjeljak:

ruby: interpreter: "ruby" verzija: "2.1.1p76" datum: "2014-02-24" platforma: "x86_64-linux" zakrpa: "2014-02-24 revizija 45161" full_version: "ruby 2.1.1p76 (2014 -02-24 revizija 45161) [x86_64-linux]"

Preporučujem da koristite i Ruby 2.1.1, pa ako vidite nešto starije od toga, nadogradite ovako:

rvm install 2.1.1

Ovo će instalirati Ruby 2.1.1. Web lokacija projekta RVM sadrži mnogo informacija o RVM -u i načinu upravljanja vašom Ruby instalacijom.

Korak 8: Instalirajte Sinatru (sve platforme)

U Ruby -u se kôd deli kao paketi koji se zovu „dragulji“. Kod koji čini Sinatru može se instalirati na vaš računar kao dragulj poput ovog:

gem install sinatra

Ova linija će preuzeti sav kôd i dokumentaciju i instalirati je na vaš računar.

Korak 9: Redis na Macu ili Linuxu

Postavljanje Redisa na Mac ili Linux je jednostavno. Proces je objašnjen na web stranici Redis. Otvorite terminal ljuske i upišite ove naredbe:

$ wget https://download.redis.io/releases/redis-2.8.7.tar…$ tar xzf redis-2.8.7.tar.gz $ cd redis-2.8.7 $ make

Pokrenite Redis upisivanjem:

$ src/redis-server

… i završili ste!

Korak 10: Redis u sustavu Windows

Redis u sustavu Windows preporučuje se samo za razvoj i morat ćete ga sastaviti pomoću besplatnog razvojnog okruženja Visual Studio Express. Za rad je potrebno malo vremena, ali radi dobro i vrijedno je truda. Slijedite upute na stranici projekta Github. Tamo ćete pronaći i vezu do stranice Visual Studio Express.

Korak 11: Kreirajte aplikaciju web usluge

Kreirajte aplikaciju web usluge
Kreirajte aplikaciju web usluge

Izgradimo aplikaciju i pokrenimo je na svom razvojnom stroju. Prilagodit ćemo Arduino skicu za povezivanje s ovom instancom aplikacije dok je testiramo. Nakon što se uvjerimo da sve radi dobro, premjestit ćemo se u oblak i ažurirati skicu za korištenje instance u oblaku.

Ovdje je Ruby kod, sve u jednoj datoteci pod nazivom "web.rb" (ovaj kod je dostupan na Githubu).

Važno: Preuzmite i pročitajte priloženu PDF datoteku, ona sadrži detaljne ugrađene komentare (učinite to prije nego nastavite!).

Sada možete isprobati svoj sistem kućnog upozorenja. U svojoj skici promijenite konstante WEBSITE i WEBPAGE tako da ukazuju na vašu razvojnu mašinu i broj porta za vaš razvojni Sinatra server. U mom slučaju, imam razvojnu mašinu na IP 172.16.115.136, a razvojni Sinatra server osluškuje port 5000, pa su moje postavke skice:

#define HW_ID "123" #define WEBSITE “172.16.115.136:5000"#define WEBPAGE“/get_message/“

Ova IP adresa je dostupna samo za uređaje u mojoj kućnoj mreži.

Postavka HW_ID predstavlja "hardverski ID", odnosno ID na koji će se Arduino koji kontrolira DMD identificirati sa Sinatra aplikacijom. To je vrlo osnovna vrsta autentifikacije. Web aplikacija će predati poruku Arduinu tražeći je na osnovu navedenog HW_ID. Možete imati više uređaja s istim HW_ID, u tom slučaju će svi uređaji prikazati istu poruku. Ako želite "privatnost", odaberite ID s puno nasumičnih znakova koje drugi ljudi neće moći pogoditi. Pazite, komunikacija nije šifrirana.

Sada nastavite i pokrenite svoju Sinatra aplikaciju, upišite ovo (pod pretpostavkom da ste u fascikli Sinatra projekta):

rubin web.rb

… i vidjet ćete nešto poput ovoga (neki detalji mogu varirati, sve dok se ovo ne ruši, u redu ste):

10:42:18 web.1 | počeo sa pid 4911910: 42: 18 web.1 | Puma 2.8.1 počinje… 10: 42: 18 web.1 | * Min niti: 0, maksimalni navoji: 1610: 42: 18 web.1 | * Okruženje: razvoj10: 42: 18 web.1 | * Slušanje na tcp: //0.0.0.0: 5000

Usmjerite svoj web preglednik na lokaciju koju poslužitelj sluša i to ćete vidjeti (pogledajte drugi prilog).

Prenesite svoju skicu na Arduino, provjerite je li povezana s vašom lokalnom mrežom. Ako sve bude u redu, Arduino će pregledavati vašu web uslugu jednom u minuti. Dajte poruku za prikaz: U polje HW koda upišite isti ID koji ste postavili za konstantu HW_ID u skici. Upišite bilo šta u polje "Vaša poruka" i provjerite "Buzz?" checkbox.

Predajte se, pričekajte minutu i pogledajte svoju poruku u DMD -u!

Korak 12: Postavite u oblak pomoću Heroku -a

Sada kada Home Alert radi na razvoju, idemo raditi na Cloudu. Na raspolaganju je bezbroj opcija za implementaciju web aplikacija. Na temelju opsega i složenosti Home Alert -a, odlučio sam da postavljanje vlastitog virtualnog privatnog servera nije vrijedno truda. Umjesto toga, bolje je otići na uslugu poput Herokua, hosta aplikacije. Za moju skalu, Herokuov besplatni nivo je više nego dovoljan. Čak i za komponentu Redis, mogao sam izabrati besplatni plan od jednog od mnogih pružatelja Redisa koji rade s Herokuom.

Ipak, potrebno je uložiti malo truda koji se odnosi na to da se moja aplikacija malo izmijeni kako bi bila u skladu s Heroku -ovim specifikacijama. Detalji su ovdje, ali u osnovi ćete morati dodati ove datoteke u svoj Sinatra projekt (sve datoteke koje slijede mogu se preuzeti s mog Github računa):

* config.ru: Heroku kaže koja datoteka sadrži aplikaciju. Evo sadržaja:

zahtijevaju './web'run Sinatra:: Aplikacija

Prvi red upućuje na web.rb, a drugi redak zapravo pokreće vašu aplikaciju.

* Gemfile: sadrži dragulje (pakete kodova rubina) koji su potrebni aplikaciji. Heroku će pogledati unutar ove datoteke kako bi shvatio koji drugi kôd treba instalirati kako bi vaša aplikacija radila. Drugi način gledanja na Gemfile je taj koji sadrži popis ovisnosti za vaš projekt. Ako neka od ovih ovisnosti nije dostupna, vaša aplikacija neće raditi. Evo što se nalazi u Gemfileu za ovu aplikaciju:

izvor "https://rubygems.org" ruby "2.1.1" dragulj 'sinatra'gem' puma'gem 'redis'

Prvo, postavlja izvorno spremište svih Gem kodova na rubygems.org. Zatim, za pokretanje aplikacije je potrebna Ruby verzija 2.1.1. Zatim navodi potrebne dragulje: Sinatra, Puma (odličan server web aplikacija Ruby) i Redis.

* Procfile: Heroku govori kako pokrenuti vaš server. Ovdje postoji samo jedna linija:

web: rackup -s puma -p $ PORT

Ova linija kaže da je "web" jedina vrsta potrebne usluge (mogli biste imati i druge, poput "radnika", za pozadinsku obradu), te da za pokretanje usluge Heroku mora koristiti naredbu koja dolazi iza ":".

Možete simulirati šta će Heroku učiniti slijedeći ovaj slijed na svom razvojnom stroju (samo upišite test prije strelice; ono što slijedi iza strelice je samo opis naredbe):

$> gem install bundler -> instalira Bundler, koji zna kako se rukuje Gemfile -om. $> bundle install -> Bundler obrađuje Gemfile i instalira zavisnosti. $> rackup config.ru -> Rackup je alat koji može obraditi datoteku config.ru. Obično dolazi s kasnijom verzijom Rubyja, ako ga ne instalira ovako: stalak za instaliranje dragulja.

Posljednji korak rezultira pokretanjem vaše aplikacije. Trebali biste vidjeti potpuno isti izlaz kao kad ste ga ranije pokretali s ruby web.rb. Radi se o istoj aplikaciji, samo s tom razlikom što je druga metoda način na koji ju Heroku pokreće.

Skoro smo spremni za primjenu ove aplikacije na vašem Heroku računu. Ako ga još nemate, kreirajte ga sada. Zatim slijedite vodič za brzi početak kako biste postavili svoj račun i svoju lokalnu razvojnu mašinu, a posebno Heroku Toolbelt.

Heroku Toolbelt instalira klijenta Heroku komandne linije, Git (sistem za upravljanje otvorenim kodom) i Foreman (Ruby alat koji pomaže u upravljanju aplikacijama zasnovanim na Procfile-u).

Nakon što dovršite instalaciju Heroku Toolbelta slijedeći upute na Heroku web stranici, slijedite ove korake da biste instalirali aplikaciju (sve se otkucava u naredbeni redak, unutar direktorija aplikacije):

$> heroku prijava -> Prijavite se na Heroku putem naredbenog retka $> git init -> Inicijalizirajte Git spremište za svoju aplikaciju $> git add. -> (primjetite točku!) Dodajte sve datoteke u trenutnom direktoriju u Git spremište $> git commit -m “init” -> Urežite ove datoteke u spremište, s novom porukom $> heroku create -> Create a new Heroku će dati vašoj aplikaciji nasumičan naziv, nešto poput "blazing-galaxy-997". Zapišite ime i URL kako biste mu kasnije mogli pristupiti putem web preglednika. Ovaj URL izgledat će ovako: „https://blazing-galaxy-997.herokuapp.com/“. Također ćete morati kopirati ime hosta (dio “blazing-galaxy-997.herokuapp.com”) vaše nove aplikacije u konstantu WEBSITE vaše Arduino skice. Učinite to sada kako ne biste zaboravili kasnije. $> heroku addons: add rediscloud -> Dodaje besplatni nivo usluge Rediscloud Redis u vašu aplikaciju. Postavke konfiguracije se automatski kreiraju i stavljaju na raspolaganje vašoj aplikaciji. $> git push heroku master -> Implementirajte svoj kod u Heroku. Ovo će automatski prenijeti kôd, postaviti sve zavisnosti na Heroku i pokrenuti aplikaciju. Na kraju procesa vidjet ćete nešto poput ovoga: “https://blazing-galaxy-997.herokuapp.com raspoređeno na Heroku”, što znači da je vaša aplikacija sada dostupna na javnom oblaku! Čestitamo!

Samo naprijed, zavrtite se!

Korak 13: Sastavite sve zajedno

Dok je vaša web aplikacija implementirana, prenesite ažuriranu skicu na Arduino (zapamtite da ste ažurirali WEBSITE konstantu kako bi ukazali na vašu proizvodnu instancu web aplikacije).

Koristite preglednik za pristup svojoj aplikaciji na Heroku. Baš kao u uvodu, upišite svoj hardverski ID u prvo polje za tekst, svoju poruku u drugo i potvrdite okvir za aktiviranje zujalice.

Vaša poruka će se pojaviti na DMD -u otprilike minutu kasnije ako sve prođe u redu!

Korak 14: Potencijal

Još mnogo toga možete učiniti sa svojim sistemom kućnih upozorenja …

Imati Heroku back end znači da možete dodati mnogo logike koja može dodati nevjerojatnu funkcionalnost. Na primjer, aplikaciji možete dodati mogućnost upravljanja ponovljenim obavještenjima, potvrdama ili kontrolirati dodatni hardver za obavještavanje, poput stroboskopa itd. Možete ga proširiti na područje kućne automatizacije i upravljati svjetlima i vratima. Možete dodati više DMD -ova za prikaz različitih poruka u svakoj ili jednu poruku na kombiniranom većem ekranu. Samo grebem po površini onoga što je ovdje moguće!

Uživajte!

Preporučuje se: