Inhoudsopgave:

Home Alert: Arduino + Cloud Messaging op een groot scherm: 14 stappen (met afbeeldingen)
Home Alert: Arduino + Cloud Messaging op een groot scherm: 14 stappen (met afbeeldingen)

Video: Home Alert: Arduino + Cloud Messaging op een groot scherm: 14 stappen (met afbeeldingen)

Video: Home Alert: Arduino + Cloud Messaging op een groot scherm: 14 stappen (met afbeeldingen)
Video: Words of Cheer for Daily Life | Charles H. Spurgeon | Christian Audiobook 2024, November
Anonim
Home Alert: Arduino + Cloud Messaging op een groot scherm
Home Alert: Arduino + Cloud Messaging op een groot scherm
Home Alert: Arduino + Cloud Messaging op een groot scherm
Home Alert: Arduino + Cloud Messaging op een groot scherm
Home Alert: Arduino + Cloud Messaging op een groot scherm
Home Alert: Arduino + Cloud Messaging op een groot scherm

In het tijdperk van mobiele telefoons zou je verwachten dat mensen 24/7 op je telefoontje zouden reageren.

Of niet. Als mijn vrouw thuiskomt, blijft de telefoon begraven in haar handtas of is de batterij leeg. We hebben geen vaste lijn. Bellen of sms'en om op een regenachtige avond om een lift naar huis te vragen vanaf het treinstation of bellen om te vragen of mijn sleutels nog op mijn bureau liggen, is letterlijk wishful thinking.

Ik heb dit probleem vaak genoeg om een oplossing te rechtvaardigen. Een beetje knutselen met een Arduino en een Freetronics Dot Matrix Display (DMD) resulteerde in een erg irritante (voor mijn vrouw) gadget, maar een geweldig communicatieapparaat en informatiecentrum voor mij. Ik ben er dol op, en het is pas versie 1!

Home Alert is gemaakt van deze onderdelen:

  • Een Freetronics Dot Matrix Display, een reeks van 16x32 LED's. Ze zijn er in verschillende kleuren, maar ik gebruik rood om te benadrukken dat deze gadget voor "kritieke" meldingen is.
  • Een Arduino Uno met een Ethernet-schild.
  • Een realtime klokuitbraak, zoals dit of dit.
  • Een piëzo-zoemer
  • Een DHT22 temperatuur- en vochtigheidssensor.

Home Alert wordt beheerd via een webpagina die wordt gehost op Heroku, een cloudgebaseerde applicatiehost. De webpagina is gecodeerd in Ruby, met behulp van het Sinatra-webapp-framework en de Redis-sleutelwaardewinkel.

Bekijk de startpagina (weergegeven in de eerste bijgevoegde afbeelding in deze stap), waar het formulier wacht op een nieuw bericht van de gebruiker.

Het eerste veld accepteert een numerieke hardwarecode. Het is een code waarmee u een specifiek Home Alert-systeem kunt targeten, omdat elk een unieke code kan krijgen. Of u kunt meerdere Home Alerts hebben die dezelfde code delen, zodat hetzelfde bericht op meerdere locaties wordt weergegeven.

Het bericht dat u wilt weergeven, gaat naar het tweede veld. Alle tekst die u daar typt, wordt weergegeven in de DMD.

Als je wat lawaai wilt maken, vink dan de Yes! selectievakje, en de zoemer zal zeker de aandacht trekken van iedereen in de buurt.

In dit artikel laat ik je zien hoe je je eigen Home Alert-systeem bouwt, zowel Arduino-hardware als -software, evenals de Sinatra mini-webapplicatie.

Laten we beginnen!

Stap 1: De hardware

de hardware
de hardware
de hardware
de hardware
de hardware
de hardware

De DMD is het brandpunt van de gadget. Ik had met een klein LCD-scherm kunnen gaan, maar het belangrijkste idee voor dit project was om iets te produceren dat van een afstand te zien en te horen is. Voor het visuele gedeelte had ik iets groots en helders nodig, en dit Freetronics-scherm is precies wat ik nodig had. Elk paneel bevat een reeks van 16x32 LED's, en u kunt er meerdere aan elkaar plakken om veel grotere schermen te creëren. Dit is iets wat ik in de nabije toekomst zou willen doen.

De DMD wordt geleverd met een gebruiksvriendelijke Arduino-bibliotheek. het communiceert met de Arduino via high-speed SPI. Ik was in staat om de bibliotheek van de Freetronics Github-pagina te krijgen, vervolgens de demo-schets op te starten en binnen enkele minuten na het openen van de doos te laten werken. Ik was verrast om zo'n helder scherm te zien met alleen stroom van de Arduino. Als u uw kijkers tijdelijk wilt verblinden, kunt u een speciale voeding op deze DMD aansluiten. Als dit hun aandacht niet krijgt, zal niets dat doen!

Fysiek meet dit scherm 320 mm (B), 160 mm (H) en 14 mm (D).

Het achterpaneel bevat de connectoren voor de externe voeding, 5V met een capaciteit van minimaal 4 Ampère, de Arduino-connector gemarkeerd met HUB1 en de connector voor het doorlussen van extra schermen aan de andere kant. Volgens de documentatie kunt u maximaal vier DMD's doorlussen.

De DMD wordt bestuurd door een Arduino Uno. Freetronics biedt een zeer handige "DMDCON"-connector die gewoon rechtstreeks op de juiste SPI- en datapinnen klikt.

Anders dan de DMD, gebruikte ik een Arduino Uno, een Ethernet Shield, een realtime klokuitbraak, een zoemer en een DHT22. Voor al deze componenten heb ik lezingen gemaakt die hun werking beschrijven in mijn Udemy-cursus. (Schaamteloze zelfpromotie: meld je aan voor mijn e-maillijst op arduinosbs.com en ontvang een coupon waarmee je met korting toegang krijgt tot alle 55 lezingen).

De real-time klok, een uitbraak op basis van de DS18072 klok-IC, is een I2C-apparaat en is dus verbonden met de analoge pinnen 1 en 2 van de Uno, die de I2C-bus implementeren.

De zoemer is aangesloten op digitale pin 3, van waaruit ik hem bedien met de functie tone().

De DHT22-sensor is aangesloten op digitale pin 2. Zorg ervoor dat u de 10KΩ pull-up-weerstand aansluit tussen de 5V-lijn en de datalijn.

Stap 2: De Arduino-schets

De schets is niet groot in termen van het aantal regels, maar dankzij alle meegeleverde bibliotheken put hij bijna het beschikbare flashgeheugen van de Uno uit. Er is veel ruimte voor geheugenoptimalisatie, maar aangezien ik in de prototypingfase zit, is dat een project voor een andere dag. Deze code is beschikbaar op Github.

Hier is de schets, met ingesloten opmerkingen (zie PDF-bijlage).

De belangrijkste verantwoordelijkheid van deze schets is om van de Arduino een consument van een webservice te maken. De webservice is een eenvoudige website met twee eindpunten, een voor een menselijke gebruiker om toegang te krijgen via een webbrowser en een tekstreeks in te dienen die ze op de DMD willen weergeven, en een andere waar de Arduino toegang toe heeft om haal die tekstreeks op.

Download en lees het bijgevoegde PDF-bestand, het bevat ingesloten opmerkingen die de werking ervan beschrijven.

Stap 3: Sinatra betreedt het podium

Sinatra betreedt het podium!
Sinatra betreedt het podium!

Er zijn veel manieren om websites en webservices te maken. Van programmeertalen met webondersteunde bibliotheken tot volledig uitgeruste frameworks, het kan verwarrend en moeilijk zijn om er een te kiezen voor deze taak.

Ik heb een behoorlijk aantal webtoepassingstechnologieën gebruikt en ermee gespeeld, en vind dat Sinatra ideaal is voor het bouwen van webservices en kleine websites. Vooral als ik een webservice bouw om een Arduino-gadget te ondersteunen, is Sinatra echt een goede keuze.

Wat is Sinatra en waarom is het zo'n goede keuze? Ik ben blij dat je het vraagt!

Sinatra is een taal voor de snelle ontwikkeling van webapplicaties. Het is gebouwd op Ruby, een zeer populaire en expressieve scripttaal voor algemene doeleinden. U hoort misschien dat Sinatra een "DSL" wordt genoemd, een domeinspecifieke taal. Het domein hier is het web. De trefwoorden (woorden) en de syntaxis die voor Sinatra zijn gemaakt, zijn zodanig dat het voor mensen gemakkelijk en snel is om webapplicaties te maken.

In een tijd waarin zogenaamde "eigenwijs" frameworks voor de ontwikkeling van web-apps zoals Ruby on Rails en Django super populair zijn, vangt Sinatra het andere uiteinde van het spectrum. Terwijl Ruby on Rails en Django vereisen dat de programmeur een specifieke conventie en manier van werken volgt (wat op zijn beurt een steile en lange leercurve impliceert), stelt Sinatra dergelijke vereisten niet.

Sinatra is conceptueel veel eenvoudiger dan de Rails en Djangos van de wereld. U kunt binnen enkele minuten aan de slag met een webtoepassing die met uw Arduino kan communiceren.

Ik zal het demonstreren met een voorbeeld. Dit is hoe een minimale web-app van Sinatra eruit ziet (lees het volgende voor nu, doe dit niet echt op je computer omdat je waarschijnlijk nog niet de vereiste instellingen hiervoor hebt):

In een enkel bestand, laten we het my_app.rb noemen, voeg deze tekst toe:

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

Start de app op de opdrachtregel als volgt:

ruby mijn_app.rb

Uw app wordt gestart en u ziet deze tekst in de console:

peter@ubuntu-dev:~/arduino/sinatra_demo$ ruby my_app.rbPuma 2.8.1 startend…* Min threads: 0, max threads: 16* Omgeving: ontwikkeling* Luisteren op tcp://localhost:4567== Sinatra/1.4.4 heeft het podium betreden op 4567 voor ontwikkeling met back-up van Puma

De app is nu klaar om klantverzoeken te ontvangen. Open een browser, wijs deze naar https://localhost:4567, en dit is wat je zult zien (zie bijgevoegde screenshot).

Dat zijn vier eenvoudige regels code in een enkel bestand. Rails daarentegen zou meer dan honderd bestanden nodig hebben gehad, simpelweg gegenereerd om aan de eisen van het framework te voldoen. Begrijp me niet verkeerd, ik hou van Rails, maar echt?…

Sinatra is dus eenvoudig en snel te gebruiken. Ik ga ervan uit dat je niets weet over Ruby, Sinatra en applicatie-implementatie naar de cloud, dus in de volgende sectie zal ik je stap voor stap van nul tot implementatie van je Arduino-webservice naar de cloud brengen.

Stap 4: Stel uw ontwikkelmachine in

Sinatra is gebaseerd op de programmeertaal Ruby. U moet Ruby dus installeren voordat u Sinatra installeert.

U moet ook een key-value store-server installeren met de naam Redis. Zie Redis als een database die gegevens opslaat tegen een sleutel. U gebruikt de sleutel om de gegevens op te halen en deze is geoptimaliseerd voor snelheid in plaats van flexibiliteit van de gegevensstructuren waarvoor een traditionele relationele database is ontworpen. Home Alert slaat zijn berichten op in Redis.

Stap 5: Ruby op Mac of Linux

Als je een Mac- of Linux-computer gebruikt, raad ik je aan RVM te gebruiken om je Ruby-installatie te installeren en te beheren (RVM: Ruby Version Manager). De instructies voor het installeren van Ruby met RVM staan op deze pagina, of kopieer en plak deze opdracht gewoon in je shell:

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

Ga zitten, achterover, ontspan en wacht tot het downloaden, compileren en installeren van RVM en Ruby is voltooid.

Stap 6: Ruby op Windows

Als u Windows gebruikt, raad ik u aan deze handleiding op de Ruby Installer for Windows-website te volgen en de installatietoepassing te gebruiken.

Stap 7: Controleer en stel uw Ruby in

Op het moment van schrijven is de nieuwste stabiele Ruby-release 2.1.1.p76. U kunt de versie controleren die met RVM is geïnstalleerd door dit te typen:

rvm info

Er verschijnt veel informatie over RVM en Ruby. In mijn geval is dit de Ruby-sectie:

ruby: interpreter: "ruby" versie: "2.1.1p76" datum: "2014-02-24" platform: "x86_64-linux" patchlevel: "2014-02-24 revisie 45161" volledige_versie: "ruby 2.1.1p76 (2014 -02-24 revisie 45161) [x86_64-linux]"

Ik raad je aan om ook Ruby 2.1.1 te gebruiken, dus als je iets ouder ziet, upgrade dan als volgt:

rvm installeren 2.1.1

Hiermee wordt Ruby 2.1.1 geïnstalleerd. De RVM-projectsite bevat veel informatie over RVM en hoe u uw Ruby-installatie kunt beheren.

Stap 8: Installeer Sinatra (alle platforms)

In Ruby wordt code gedeeld als pakketten die "edelstenen" worden genoemd. De code waaruit Sinatra bestaat, kan als een juweeltje op uw computer worden geïnstalleerd, zoals dit:

edelsteen installeer sinatra

Deze regel haalt alle code en documentatie op en installeert deze op uw computer.

Stap 9: Redis op Mac of Linux

Het instellen van Redis op Mac of Linux is eenvoudig. Het proces wordt uitgelegd op de Redis-website. Open de shell-terminal en typ deze opdrachten 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$ make

Voer Redis uit door te typen:

$ src/redis-server

… en je bent klaar!

Stap 10: Redis op Windows

Redis op Windows wordt alleen aanbevolen voor ontwikkeling en u moet het compileren met behulp van de gratis Visual Studio Express-ontwikkelomgeving. Het kost wat tijd om het draaiend te krijgen, maar het werkt goed en is de moeite waard. Volg de instructies op de Github-pagina van het project. Daar vindt u ook een link naar de Visual Studio Express-pagina.

Stap 11: Maak de webservicetoepassing

De webservicetoepassing maken
De webservicetoepassing maken

Laten we de applicatie bouwen en uitvoeren op uw ontwikkelmachine. We zullen de Arduino-schets aanpassen om verbinding te maken met dit exemplaar van de applicatie terwijl we deze testen. Zodra we er zeker van zijn dat alles goed werkt, implementeren we in de cloud en werken we de schets bij om de cloudinstantie te gebruiken.

Hier is de Ruby-code, allemaal in een enkel bestand met de naam " web.rb " (deze code is beschikbaar op Github).

Belangrijk: Download en lees het bijgevoegde PDF-bestand, het bevat gedetailleerde ingesloten opmerkingen (doe dit alstublieft voordat u verder gaat!).

U kunt nu uw Home Alert-systeem uitproberen. Wijzig in uw schets de WEBSITE- en WEBPAGE-constanten zodat ze verwijzen naar uw ontwikkelmachine en poortnummer voor uw Sinatra-ontwikkelserver. In mijn geval heb ik een ontwikkelmachine op IP 172.16.115.136 en de Sinatra-ontwikkelingsserver luistert naar poort 5000, dus mijn schetsinstellingen zijn:

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

Dit IP-adres is alleen toegankelijk voor apparaten in mijn thuisnetwerk.

De HW_ID-instelling vertegenwoordigt de "hardware-ID", dat wil zeggen, de ID waarmee de Arduino die de DMD bestuurt, zichzelf zal identificeren met de Sinatra-toepassing. Het is een zeer eenvoudige vorm van authenticatie. De webapplicatie zal een bericht overhandigen aan een Arduino die erom vraagt op basis van de verstrekte HW_ID. U kunt meerdere apparaten hebben met dezelfde HW_ID, in welk geval alle apparaten hetzelfde bericht zullen weergeven. Als je "privacy" wilt, kies dan een ID met veel willekeurige tekens die andere mensen niet kunnen raden. Let ook op, geen enkele communicatie is versleuteld.

Ga nu door en start uw Sinatra-app op, typ dit (ervan uitgaande dat u zich in de Sinatra-projectmap bevindt):

ruby web.rb

… en je ziet zoiets als dit (sommige details kunnen variëren, zolang dit niet crasht, ben je in orde):

10:42:18 web.1 | begonnen met pid 4911910:42:18 web.1 | Puma 2.8.1 start…10:42:18 web.1 | * Min. threads: 0, max. threads: 1610:42:18 web.1 | * Omgeving: ontwikkeling10:42:18 web.1 | * Luisteren op tcp://0.0.0.0:5000

Richt uw webbrowser op de locatie waar de server naar luistert, en u zult dit zien (zie tweede bijlage).

Upload je schets naar de Arduino, zorg ervoor dat deze is aangesloten op je lokale netwerk. Als alles goed gaat, zal de Arduino eens per minuut je webservice pollen. Geef het een bericht om te laten zien: Typ in het veld HW-code dezelfde ID die u hebt ingesteld voor de HW_ID-constante in de schets. Typ iets in het veld "Uw bericht" en controleer de "Buzz?" selectievakje.

Verstuur, wacht even en zie je bericht verschijnen in de DMD!

Stap 12: Implementeer naar de cloud met Heroku

Nu Home Alert in ontwikkeling is, laten we het werken in de cloud. Er zijn talloze mogelijkheden om webapplicaties in te zetten. Op basis van de omvang en complexiteit van Home Alert heb ik besloten dat het opzetten van mijn eigen virtual private server niet de moeite waard is. In plaats daarvan is het beter om te kiezen voor een service zoals Heroku, een applicatiehost. Voor mijn schaal is de gratis laag van Heroku meer dan genoeg. Zelfs voor de Redis-component kon ik een gratis abonnement kiezen uit een van de vele Redis-providers die met Heroku werken.

Toch kost het wat moeite, wat te maken heeft met het enigszins aanpassen van mijn applicatie, zodat deze aan de specificaties van Heroku kan voldoen. De details zijn hier, maar in wezen moet je deze bestanden toevoegen aan je Sinatra-project (alle bestanden die volgen, kunnen worden gedownload van mijn Github-account):

* config.ru: Het vertelt Heroku welk bestand de applicatie bevat. Hier is de inhoud:

vereisen './web'run Sinatra::Application

De eerste regel verwijst naar web.rb en de tweede regel voert uw toepassing daadwerkelijk uit.

* Gemfile: het bevat de edelstenen (ruby-codepakketten) die vereist zijn door de applicatie. Heroku zal in dit bestand kijken om erachter te komen welke andere code het moet installeren zodat uw toepassing werkt. Een andere manier om naar Gemfile te kijken, is dat het een lijst met afhankelijkheden voor uw project bevat. Als een van deze afhankelijkheden niet beschikbaar is, zal uw toepassing niet werken. Dit is wat er in de Gemfile voor deze app zit:

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

Ten eerste stelt het de bronrepository van alle Gem-code in op rubygems.org. Vervolgens moet de Ruby-versie 2.1.1 worden gebruikt om de applicatie uit te voeren. Vervolgens worden de vereiste edelstenen weergegeven: Sinatra, Puma (een geweldige Ruby-webtoepassingsserver) en Redis.

* Profiel: het vertelt Heroku hoe je je server moet opstarten. Er is hier maar één regel:

web: rackup -s puma -p $PORT

Deze regel zegt dat "web" de enige soort service is die nodig is (u zou andere kunnen hebben, zoals "worker", voor achtergrondverwerking), en dat om de service te starten Heroku de opdracht moet gebruiken die na de ":" komt.

Je kunt simuleren wat Heroku gaat doen door deze volgorde op je ontwikkelmachine te volgen (typ alleen de test voor de pijl; wat volgt op de pijl is slechts een beschrijving van de opdracht):

$>gem install bundler -> installeert Bundler, die weet hoe hij met de Gemfile moet omgaan. $> bundelinstallatie -> Bundler verwerkt Gemfile en installeert afhankelijkheden. $> rackup config.ru -> Rackup is een tool die het config.ru-bestand kan verwerken. Het wordt normaal gesproken geleverd met de latere versie van Ruby, als het niet als volgt wordt geïnstalleerd: gem install rack.

De laatste stap resulteert in het daadwerkelijk starten van uw applicatie. U zou exact dezelfde uitvoer moeten zien als toen u het eerder startte met ruby web.rb. Het is dezelfde applicatie die draait, alleen met het verschil dat de tweede methode is hoe Heroku het start.

We zijn bijna klaar om deze applicatie op uw Heroku-account te implementeren. Als je er nog geen hebt, ga je gang en maak er nu een aan. Volg daarna de snelstartgids om uw account en uw lokale ontwikkelmachine in te stellen, en vooral de Heroku Toolbelt.

De Heroku Toolbelt installeert de Heroku-opdrachtregelclient, Git (het open source codebeheersysteem) en Foreman (een Ruby-tool die helpt bij het beheren van op Procfile gebaseerde applicaties).

Nadat u de installatie van de Heroku Toolbelt hebt voltooid volgens de instructies op de Heroku-website, volgt u deze stappen om uw toepassing te implementeren (alles wordt getypt in de opdrachtregel, in de map van de app):

$>heroku login -> Meld je aan bij Heroku via de opdrachtregel $>git init -> Initialiseer een Git-repository voor je applicatie $>git add. -> (let op de punt!) Voeg alle bestanden in de huidige map toe aan de Git-repository $>git commit -m “init" -> Commit deze bestanden in de repository, met een nieuw bericht $>heroku create -> Maak een nieuwe app op Heroku. Heroku geeft je app een willekeurige naam, zoiets als "blazing-galaxy-997". Noteer de naam en de URL zodat u deze later via uw webbrowser kunt openen. Deze URL ziet er als volgt uit: "https://blazing-galaxy-997.herokuapp.com/". U moet ook de hostnaam (het gedeelte "blazing-galaxy-997.herokuapp.com") van uw nieuwe toepassing kopiëren naar de WEBSITE-constante van uw Arduino-schets. Doe dit nu zodat je het later niet vergeet. $> heroku-add-ons:add rediscloud -> Voegt de gratis laag van de Rediscloud Redis-service toe aan uw toepassing. Configuratie-instellingen worden automatisch gemaakt en beschikbaar gemaakt voor uw toepassing. $> git push heroku master -> Implementeer je code in Heroku. Hiermee wordt de code automatisch overgedragen, eventuele afhankelijkheden van Heroku ingesteld en wordt de applicatie gestart. Aan het einde van het proces ziet u zoiets als dit: "https://blazing-galaxy-997.herokuapp.com geïmplementeerd in Heroku", wat betekent dat uw applicatie nu live is in de openbare cloud! Gefeliciteerd!

Ga je gang, geef het een draai!

Stap 13: Alles samenbrengen

Terwijl uw webtoepassing is geïmplementeerd, uploadt u de bijgewerkte schets naar de Arduino (onthoud dat u de WEBSITE-constante hebt bijgewerkt om naar uw productie-instantie van de webtoepassing te verwijzen).

Gebruik je browser om toegang te krijgen tot je app op Heroku. Typ, net als in de inleiding, uw hardware-ID in het eerste tekstvak, uw bericht in het tweede en vink het selectievakje aan om de zoemer te activeren.

Je bericht verschijnt ongeveer een minuut later op de DMD als alles goed gaat!

Stap 14: Potentieel

Er is zoveel meer dat u kunt doen met uw Home Alert-systeem…

Het hebben van een Heroku-backend betekent dat je veel logica kunt toevoegen die geweldige functionaliteit kan toevoegen. U kunt de toepassing bijvoorbeeld de mogelijkheid toevoegen om herhaalde meldingen, bevestigingen te beheren of aanvullende meldingshardware zoals stroboscooplampen enz. U kunt meerdere DMD's toevoegen om ofwel verschillende berichten in elk bericht weer te geven, ofwel een enkel bericht in een gecombineerd groter scherm. Ik krab alleen aan de oppervlakte van wat hier mogelijk is!

Genieten van!

Aanbevolen: