INHOUDSOPGAWE:

Huiswaarskuwing: Arduino + wolkboodskappe op 'n groot skerm: 14 stappe (met foto's)
Huiswaarskuwing: Arduino + wolkboodskappe op 'n groot skerm: 14 stappe (met foto's)

Video: Huiswaarskuwing: Arduino + wolkboodskappe op 'n groot skerm: 14 stappe (met foto's)

Video: Huiswaarskuwing: Arduino + wolkboodskappe op 'n groot skerm: 14 stappe (met foto's)
Video: Web Programming - Computer Science for Business Leaders 2016 2024, November
Anonim
Huiswaarskuwing: Arduino + wolkboodskappe op 'n groot skerm
Huiswaarskuwing: Arduino + wolkboodskappe op 'n groot skerm
Huiswaarskuwing: Arduino + wolkboodskappe op 'n groot skerm
Huiswaarskuwing: Arduino + wolkboodskappe op 'n groot skerm
Huiswaarskuwing: Arduino + wolkboodskappe op 'n groot skerm
Huiswaarskuwing: Arduino + wolkboodskappe op 'n groot skerm

In die tyd van selfone sou u verwag dat mense 24/7 op u oproep reageer.

Of nie. As my vrou eers by die huis kom, bly die telefoon in haar handsak begrawe, of die battery is leeg. Ons het nie 'n landlyn nie. Om op 'n reënerige nag te bel of te sms om 'n hysbak van die treinstasie af huis toe te vra of te bel of my sleutels nog op my lessenaar is, is letterlik wensdenkery.

Ek het hierdie probleem gereeld genoeg om 'n oplossing te regverdig. 'N Bietjie geknoei met 'n Arduino en 'n Freetronics Dot Matrix Display (DMD) het tot 'n baie irriterende (vir my vrou) gadget gelei, maar 'n ongelooflike kommunikasietoestel en inligtingsentrum vir my. Ek is mal daaroor, en dit is slegs weergawe 1!

Home Alert bestaan uit hierdie dele:

  • 'N Freetronics Dot Matrix Display, wat 'n verskeidenheid 16x32 LED's is. Hulle kom in verskillende kleure, maar ek gebruik rooi om te beklemtoon dat hierdie gadget 'kritieke' kennisgewings is.
  • 'N Arduino Uno met 'n Ethernet -skild.
  • 'N Real-time klokbreek, soos hierdie of hierdie.
  • 'N Piezo -zoemer
  • 'N DHT22 temperatuur- en humiditeitsensor.

Home Alert word beheer via 'n webblad wat op Heroku, 'n wolkgebaseerde programgasheer, aangebied word. Die webbladsy is in Ruby gekodeer, met behulp van die Sinatra-webprogramraamwerk en die Redis-sleutelwaarde-winkel.

Kyk na die tuisblad (wys in die eerste aangehegte prent in hierdie stap), waar die vorm op 'n nuwe boodskap van die gebruiker wag.

Die eerste veld aanvaar 'n numeriese hardeware kode. Dit is 'n kode waarmee u 'n spesifieke Home Alert -stelsel kan rig, aangesien elkeen 'n unieke kode kan kry. Of u kan verskeie huiswaarskuwings hê wat dieselfde kode deel, sodat dieselfde boodskap op verskeie plekke vertoon word.

Die boodskap wat u wil vertoon, gaan na die tweede veld. Enige teks wat u daar invoer, sal in die DMD vertoon word.

As u wil raas, kyk na die Ja! boks, en die gonser sal beslis die aandag van almal in die buurt kry.

In hierdie artikel sal ek u wys hoe u u eie Home Alert -stelsel kan bou, beide Arduino -hardeware en sagteware, sowel as die Sinatra mini -webtoepassing.

Laat ons begin!

Stap 1: Die hardeware

Die hardeware
Die hardeware
Die hardeware
Die hardeware
Die hardeware
Die hardeware

Die DMD is die fokuspunt van die toestel. Ek sou met 'n klein LCD -skerm kon gaan, maar die hoofgedagte vir hierdie projek was om iets te produseer wat van ver af gesien en gehoor kan word. Vir die visuele deel het ek iets groot en helder nodig gehad, en hierdie Freetronics -skerm was presies wat ek nodig gehad het. Elke paneel bevat 'n verskeidenheid 16x32 LED's, en u kan verskeie hiervan aan mekaar plak om baie groter skerms te skep. Dit is iets wat ek graag in die nabye toekoms wil doen.

Die DMD bevat 'n maklik om te gebruik Arduino -biblioteek. dit kommunikeer met die Arduino via hoëspoed-SPI. Ek kon die biblioteek van die Freetronics Github -bladsy af kry, en dan die demo -skets aan die gang sit en dit binne enkele minute nadat ek die boks oopgemaak het, laat werk. Ek was verbaas om so 'n helder skerm te sien wat slegs die krag van die Arduino gebruik. As u u kykers tydelik wil verblind, kan u 'n spesiale kragbron aan hierdie DMD koppel. As dit nie hul aandag trek nie, sal niks gebeur nie!

Fisies meet hierdie skerm 320 mm (W), 160 mm (H) en 14 mm (D).

Die agterpaneel bevat die aansluitings vir die eksterne krag, 5V met 'n kapasiteit van ten minste 4 ampère, die Arduino-aansluiting gemerk HUB1, en die aansluiting vir bykomende skerms aan die teenoorgestelde kant. Volgens die dokumentasie kan u tot vier DMD's verbind.

Die DMD word beheer deur 'n Arduino Uno. Freetronics bied 'n baie handige "DMDCON" -aansluiting wat net direk op die regte SPI en datapennetjies klik.

Behalwe die DMD, het ek 'n Arduino Uno, 'n Ethernet-skild, 'n real-time klokbreek, 'n zoemer en 'n DHT22 gebruik. Vir al hierdie komponente het ek lesings geskep wat die werking daarvan beskryf in my Udemy -kursus. (Skaamtelose selfpromosie: teken aan by my e-poslys op arduinosbs.com en ontvang 'n koepon wat u toegang tot al 55 lesings met afslag gee).

Die intydse horlosie, 'n uitbraak gebaseer op die DS18072 klok IC, is 'n I2C-toestel, sodat dit gekoppel is aan die Uno se analoog penne 1 en 2, wat die I2C-bus implementeer.

Die zoemer is gekoppel aan die digitale pen 3, vanwaar ek dit beheer met behulp van die toon () -funksie.

Die DHT22-sensor is gekoppel aan 'n digitale pen 2. Wees versigtig om die 10KΩ-optrekweerstand tussen die 5V-lyn en die datalyn aan te sluit.

Stap 2: Die Arduino -skets

Die skets is nie groot in terme van die lyntelling nie, maar dit maak die Uno se beskikbare flitsgeheue amper leeg danksy al die biblioteke wat ingesluit is. Daar is baie ruimte vir geheue -optimalisering, maar aangesien ek in die prototiperingsfase is, is dit 'n projek vir 'n ander dag. Hierdie kode is beskikbaar op Github.

Hier is die skets met ingeslote kommentaar (sien PDF -aanhangsel).

Die hoofverantwoordelikheid van hierdie skets is om van die Arduino 'n verbruiker van 'n webdiens te maak. Die webdiens is 'n eenvoudige webwerf met twee eindpunte, een vir 'n menslike gebruiker om toegang te verkry via 'n webblaaier en 'n teksstring in te dien wat hulle op die DMD wil vertoon, en 'n ander een waar die Arduino toegang tot kan kry haal die teksstring op.

Laai die aangehegte PDF -lêer af en lees dit; dit bevat ingebedde kommentaar wat die werking daarvan beskryf.

Stap 3: Sinatra neem die verhoog

Sinatra neem die verhoog op!
Sinatra neem die verhoog op!

Daar is baie maniere om webwerwe en webdienste te skep. Van programmeertale met webondersteunende biblioteke tot volledige raamwerke, dit kan verwarrend en moeilik wees om een vir hierdie werk te kies.

Ek het 'n groot aantal webtoepassingstegnologieë gebruik en daarmee gespeel, en vind dat Sinatra ideaal is vir die bou van webdienste en klein webwerwe. As ek veral 'n webdiens bou om 'n Arduino -gadget te ondersteun, is Sinatra 'n baie goeie keuse.

Wat is Sinatra, en waarom is dit so 'n goeie keuse? Ek is bly jy het gevra!

Sinatra is 'n taal vir die vinnige ontwikkeling van webtoepassings. Dit is gebou bo -op Ruby, 'n baie gewilde en ekspressiewe algemene taal vir algemene doeleindes. U hoor miskien dat Sinatra 'DSL' genoem word, 'n domeinspesifieke taal. Die domein hier is die web. Die sleutelwoorde (woorde) en die sintaksis wat vir Sinatra geskep is, is van so 'n aard dat dit dit maklik maak vir mense om webtoepassings te maak.

In 'n tyd waarin sogenaamde 'opinie'-raamwerke vir die ontwikkeling van webapps soos Ruby on Rails en Django baie gewild is, vang Sinatra die teenoorgestelde kant van die spektrum. Terwyl Ruby on Rails en Django van die programmeerder vereis dat hulle 'n spesifieke konvensie en manier van doen volg (wat op sy beurt 'n steil en lang leerkurwe impliseer), stel Sinatra nie sulke vereistes nie.

Sinatra is konseptueel baie eenvoudiger as die Rails en Djangos van die wêreld. U kan aan die gang kom met 'n webtoepassing wat binne enkele minute met u Arduino kan kommunikeer.

Ek sal demonstreer met 'n voorbeeld. So lyk 'n minimale Sinatra -webapp (lees nou eers die volgende, doen dit nie eintlik op u rekenaar nie, want u het waarskynlik nog nie die voorvereistes hiervoor nie):

Laat ons dit in 'n enkele lêer my_app.rb noem, voeg hierdie teks by:

vereis 'sinatra'get'/'doen' einde "Hallo, wêreld!"

Begin die app op die opdragreël so:

robyn my_app.rb

Jou program sal begin, en jy sal hierdie teks in die konsole sien:

peter@ubuntu-dev: ~/arduino/sinatra_demo $ ruby my_app.rbPuma 2.8.1 begin …* Min drade: 0, maksimum drade: 16* Omgewing: ontwikkeling* Luister op tcp: // localhost: 4567 == Sinatra/1.4.4 het die verhoog op 4567 geneem vir ontwikkeling met rugsteun van Puma

Die app is nou gereed om versoeke van 'n kliënt te ontvang. Maak 'n blaaier oop, wys dit na https:// localhost: 4567, en dit is wat u sal sien (sien aangehegte skermkiekie).

Dit is vier eenvoudige reëls kode in 'n enkele lêer. Daarteenoor sou Rails meer as honderd lêers benodig het, bloot gegenereer om aan die vereistes van die raamwerk te voldoen. Moenie my verkeerd verstaan nie, ek hou van Rails, maar regtig? …

Sinatra is dus eenvoudig en vinnig om te bestuur. Ek neem aan dat u niks weet van Ruby, Sinatra en die implementering van toepassings in die wolk nie, so in die volgende afdeling neem ek u stap vir stap van nul na die implementering van u Arduino -webdiens na die wolk.

Stap 4: Stel u ontwikkelingsmasjien op

Sinatra is gebaseer op die Ruby -programmeertaal. U moet dus Ruby installeer voordat u Sinatra installeer.

U moet ook 'n winkelbediener met die belangrikste waarde, Redis, installeer. Beskou Redis as 'n databasis wat data teen 'n sleutel stoor. U gebruik die sleutel om die data op te haal, en dit is geoptimaliseer vir spoed eerder as buigsaamheid van die datastrukture waarvoor 'n tradisionele verhoudingsdatabasis ontwerp is. Home Alert stoor sy boodskappe in Redis.

Stap 5: Ruby op Mac of Linux

As u 'n Mac- of Linux -rekenaar gebruik, beveel ek aan dat u RVM gebruik om u Ruby -installasie te installeer en te bestuur (RVM: Ruby Version Manager). Die instruksies vir die installering van Ruby met RVM is op hierdie bladsy, of kopieer en plak hierdie opdrag in u dop:

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

Sit, rus, ontspan en wag totdat die aflaai, opstel en installering van RVM en Ruby voltooi is.

Stap 6: Ruby op Windows

As u Windows gebruik, beveel ek aan dat u hierdie gids op die Ruby Installer for Windows -webwerf volg en die opstelprogram gebruik.

Stap 7: Kontroleer en stel u robyn in

By die skryf hiervan is die nuutste stabiele Ruby -weergawe 2.1.1.p76. U kan die weergawe wat met RVM geïnstalleer is, kontroleer deur dit te tik:

rvm inligting

Baie inligting oor RVM en Ruby sal verskyn. In my geval is dit die Ruby -afdeling:

ruby: tolk: "ruby" weergawe: "2.1.1p76" datum: "2014-02-24" platform: "x86_64-linux" patchlevel: "2014-02-24 hersiening 45161" full_version: "ruby 2.1.1p76 (2014 -02-24 hersiening 45161) [x86_64-linux]"

Ek beveel aan dat u ook Ruby 2.1.1 gebruik, so as u iets ouer as dit sien, moet u so opgradeer:

rvm installeer 2.1.1

Dit sal Ruby 2.1.1 installeer. Die RVM -projekwerf bevat baie inligting oor RVM en hoe u u Ruby -installasie kan bestuur.

Stap 8: Installeer Sinatra (alle platforms)

In Ruby word kode gedeel as pakkette genaamd "juwele". Die kode van Sinatra kan op u rekenaar geïnstalleer word as 'n juweel soos hierdie:

juweel installeer sinatra

Hierdie reël sal alle kode en dokumentasie haal en dit op u rekenaar installeer.

Stap 9: Herhaal op Mac of Linux

Dit is maklik om Redis op Mac of Linux op te stel. Die proses word op die Redis -webwerf verduidelik. Maak die dopterminaal oop en tik hierdie opdragte in:

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

Begin Redis deur te tik:

$ src/redis-bediener

… en jy is klaar!

Stap 10: Herhaal op Windows

Redis op Windows word slegs aanbeveel vir ontwikkeling, en u moet dit saamstel met behulp van die gratis Visual Studio Express -ontwikkelingsomgewing. Dit verg 'n bietjie tyd om dit aan die gang te kry, maar dit werk goed en is die moeite werd. Volg die instruksies op die Github -bladsy van die projek. Daar vind u ook 'n skakel na die Visual Studio Express -bladsy.

Stap 11: Skep die webdiensprogram

Skep die webdiensprogram
Skep die webdiensprogram

Kom ons bou die toepassing en voer dit op u ontwikkelingsmasjien uit. Ons sal die Arduino -skets aanpas om aan hierdie instansie van die toepassing te koppel terwyl ons dit toets. As ons tevrede is dat alles goed werk, implementeer ons die wolk en werk ons die skets by om die wolk -instansie te gebruik.

Hier is die Ruby -kode, alles in 'n enkele lêer met die naam "web.rb" (hierdie kode is beskikbaar op Github).

Belangrik: laai die aangehegte PDF -lêer af en lees dit bevat gedetailleerde ingeslote opmerkings (doen dit asseblief voordat u verder gaan!).

U kan nou u Home Alert -stelsel probeer. Verander die WEBSITE- en WEBBLADKONSTANT in u skets om na u ontwikkelingsmasjien en poortnommer vir u Sinatra -bediener te wys. In my geval het ek 'n ontwikkelingsmasjien op IP 172.16.115.136, en die ontwikkeling Sinatra -bediener luister na poort 5000, so my sketsinstellings is:

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

Hierdie IP -adres is slegs toeganklik vir toestelle in my tuisnetwerk.

Die HW_ID -instelling verteenwoordig die 'hardeware -ID', dit wil sê die ID waartoe die Arduino wat die DMD beheer, hom in die Sinatra -toepassing sal identifiseer. Dit is 'n baie basiese soort verifikasie. Die webtoepassing sal 'n boodskap aan 'n Arduino oorhandig wat dit vra op grond van die verskafde HW_ID. U kan verskeie toestelle met dieselfde HW_ID hê, in welke geval alle toestelle dieselfde boodskap sal vertoon. As u 'privaatheid' wil hê, kies 'n ID met baie ewekansige karakters wat ander mense nie kan raai nie. Pasop ook, geen kommunikasie word geïnkripteer nie.

Begin nou met u Sinatra -app, tik dit (as u in die Sinatra -projekmap is):

robyn web.rb

… en jy sal so iets sien (sommige besonderhede kan verskil, solank dit nie ineenstort nie, is dit goed):

10:42:18 web.1 | begin met pid 4911910: 42: 18 web.1 | Puma 2.8.1 begin … 10: 42: 18 web.1 | * Min drade: 0, maksimum drade: 1610: 42: 18 web.1 | * Omgewing: ontwikkeling10: 42: 18 web.1 | * Luister op tcp: //0.0.0.0: 5000

Wys u webblaaier na die plek waarna die bediener luister, en u sal dit sien (sien tweede aanhangsel).

Laai u skets op na die Arduino, maak seker dat dit aan u plaaslike netwerk gekoppel is. As alles goed gaan, sal die Arduino elke minuut u webdiens ondervra. Gee dit 'n boodskap om te wys: Tik in die HW -kodeveld dieselfde ID in wat u vir die HW_ID -konstante in die skets gestel het. Tik enigiets in die veld 'U boodskap' en merk die 'Buzz?' boks.

Dien in, wag 'n oomblik en sien hoe u boodskap in die DMD verskyn!

Stap 12: Implementeer in die wolk met behulp van Heroku

Noudat Home Alert aan die ontwikkel is, laat ons dit op die wolk laat werk. Daar is talle opsies beskikbaar vir die implementering van webtoepassings. Op grond van die omvang en kompleksiteit van Home Alert, het ek besluit dat die oprigting van my eie virtuele privaat bediener nie die moeite werd is nie. In plaas daarvan is dit beter om 'n diens soos Heroku, 'n programgasheer, te gebruik. Vir my skaal is die gratis vlak van Heroku meer as genoeg. Selfs vir die Redis -komponent kon ek 'n gratis plan kies by een van die vele Redis -verskaffers wat saam met Heroku werk.

Tog is daar 'n bietjie moeite nodig, wat verband hou met die effens wysiging van my aansoek sodat dit aan die spesifikasies van Heroku kan voldoen. Die besonderhede is hier, maar in wese moet u hierdie lêers by u Sinatra -projek voeg (al die volgende lêers kan van my Github -rekening afgelaai word):

* config.ru: Dit vertel Heroku watter lêer die toepassing bevat. Hier is die inhoud:

vereis './web'run Sinatra:: Aansoek

Die eerste reël dui op web.rb, en die tweede reël werk eintlik met u toepassing.

* Gemfile: dit bevat die juwele (pakkette met robynkode) wat deur die toepassing vereis word. Heroku sal in hierdie lêer kyk om uit te vind watter ander kode dit moet installeer sodat u toepassing werk. 'N Ander manier om na Gemfile te kyk, is 'n lys met afhanklikhede vir u projek. As een van hierdie afhanklikes nie beskikbaar is nie, werk u aansoek nie. Dit is wat in die Gemfile vir hierdie app is:

bron "https://rubygems.org" robyn "2.1.1" gem 'sinatra'gem' puma'gem 'redis'

Eerstens stel dit die bronbewaarplek van alle Gem -kode in op rubygems.org. Vervolgens moet die Ruby -weergawe 2.1.1 gebruik word om die toepassing uit te voer. Dan bevat dit die vereiste juwele: Sinatra, Puma ('n uitstekende Ruby -webtoepassingsbediener) en Redis.

* Procfile: dit vertel Heroku hoe u u bediener moet begin. Hier is net een reël:

web: opslaan -s puma -p $ PORT

Hierdie reël sê dat 'web' die enigste soort diens is wat benodig word (u kan ander, soos 'werker', vir agtergrondverwerking hê), en om die diens te begin, moet Heroku die opdrag gebruik wat na die ':' kom.

U kan simuleer wat Heroku gaan doen deur hierdie volgorde op u ontwikkelingsmasjien te volg (tik slegs die toets voor die pyltjie; wat volg op die pyl is slegs 'n beskrywing van die opdrag):

$> gem install bundler -> installeer Bundler, wat weet hoe om die Gemfile te hanteer. $> bundelinstallasie -> Bundler verwerk Gemfile en installeer afhanklikes. $> rackup config.ru -> Rackup is 'n instrument wat die config.ru -lêer kan verwerk. Dit kom gewoonlik met die latere weergawe van Ruby, as dit dit nie so installeer nie: juweel -installeringsrek.

Die laaste stap lei daartoe dat u aansoek eintlik begin word. U behoort presies dieselfde uitvoer te sien as toe u dit vroeër met roby web.rb begin het. Dit is dieselfde program wat loop, net met die verskil dat die tweede metode is hoe Heroku dit begin.

Ons is amper gereed om hierdie toepassing op u Heroku -rekening te implementeer. As u nog nie een het nie, maak dan nou een. Volg dan die snelstartgids om u rekening en u plaaslike ontwikkelingsmasjien, en veral die Heroku Toolbelt, op te stel.

Die Heroku Toolbelt installeer die Heroku-opdragreëlkliënt, Git (die open source bronkode-bestuurstelsel) en Foreman ('n Ruby-instrument wat help met die bestuur van op Procfile gebaseerde toepassings).

Nadat u die installering van die Heroku Toolbelt voltooi het volgens die instruksies op die Heroku -webwerf, volg hierdie stappe om u toepassing te ontplooi (alles word in die opdragreël ingetik, in die app -gids):

$> heroku -aanmelding -> Meld aan by Heroku via die opdragreël $> git init -> Begin 'n Git -bewaarplek vir u toepassing $> git add. -> (let op die punt!) Voeg alle lêers in die huidige gids by die Git repository $> git commit -m "init" -> Plaas hierdie lêers in die bewaarplek, met 'n nuwe boodskap $> heroku create -> Skep 'n nuwe app op Heroku. Heroku sal jou program 'n ewekansige naam gee, soos 'blazing-galaxy-997'. Teken die naam en die URL op sodat u dit later via u webblaaier kan verkry. Hierdie URL sal so lyk: "https://blazing-galaxy-997.herokuapp.com/". U moet ook die gasheernaam (die 'blazing-galaxy-997.herokuapp.com' -gedeelte) van u nuwe toepassing kopieer na die WEBSITE-konstante van u Arduino-skets. Doen dit nou sodat u dit nie later vergeet nie. $> heroku -byvoegings: voeg rediscloud by -> Voeg die gratis vlak van die Rediscloud Redis -diens by u toepassing. Konfigurasie -instellings word outomaties geskep en aan u toepassing beskikbaar gestel. $> git push heroku master -> Implementeer u kode by Heroku. Dit sal die kode outomaties oordra, enige afhanklikheid van Heroku opstel en die toepassing begin. Aan die einde van die proses sal u iets soos hierdie sien: "https://blazing-galaxy-997.herokuapp.com ontplooi na Heroku", wat beteken dat u aansoek nou in die openbare wolk beskikbaar is! Baie geluk!

Gaan voort, gee 'n draai!

Stap 13: Alles saamvoeg

Laai die opgedateerde skets na die Arduino toe met u webtoepassing ontplooi (onthou dat u die WEBSITE -konstante opgedateer het om na u produksie -instansie van die webtoepassing te verwys).

Gebruik u blaaier om toegang tot u app op Heroku te verkry. Net soos in die inleiding, tik u hardeware -ID in die eerste tekskassie, u boodskap in die tweede en merk die kassie om die zoemer te aktiveer.

U boodskap sal ongeveer 'n minuut later op die DMD verskyn as alles goed gaan!

Stap 14: Potensiaal

Daar is soveel meer wat u met u Home Alert -stelsel kan doen …

As u 'n Heroku -agterkant het, beteken dit dat u baie logika kan byvoeg wat ongelooflike funksies kan byvoeg. Byvoorbeeld, u kan die program byvoeg om herhaalde kennisgewings, erkennings te bestuur, of om ekstra kennisgewingshardeware soos strobe -ligte, ens. Te beheer. U kan verskeie DMD's byvoeg om verskillende boodskappe in elkeen of 'n enkele boodskap in 'n gekombineerde groter skerm te vertoon. Ek krap net die oppervlak van wat hier moontlik is!

Geniet dit!

Aanbeveel: