Съдържание:

Домашно предупреждение: Arduino + облачни съобщения на голям дисплей: 14 стъпки (със снимки)
Домашно предупреждение: Arduino + облачни съобщения на голям дисплей: 14 стъпки (със снимки)

Видео: Домашно предупреждение: Arduino + облачни съобщения на голям дисплей: 14 стъпки (със снимки)

Видео: Домашно предупреждение: Arduino + облачни съобщения на голям дисплей: 14 стъпки (със снимки)
Видео: CS50 2015 – 10-я неделя 2024, Декември
Anonim
Домашно предупреждение: Arduino + облачни съобщения на голям дисплей
Домашно предупреждение: Arduino + облачни съобщения на голям дисплей
Домашно предупреждение: Arduino + облачни съобщения на голям дисплей
Домашно предупреждение: Arduino + облачни съобщения на голям дисплей
Домашно предупреждение: Arduino + облачни съобщения на голям дисплей
Домашно предупреждение: Arduino + облачни съобщения на голям дисплей

В ерата на мобилните телефони бихте очаквали хората да реагират на вашето обаждане денонощно.

Или не. След като жена ми се прибере, телефонът остава заровен в чантата на ръката или батерията му е изтощена. Нямаме наземна линия. Обаждането или изпращането на SMS, за да поискате лифт у дома от гарата в дъждовна нощ или обаждането, за да попитате дали ключовете ми все още са на бюрото ми, е буквално пожелание.

Имам този проблем достатъчно често, за да гарантирам решение. Малко майтап с Arduino и Dot Matrix Display (DMD) на Arduino доведоха до много досадна (за жена ми) притурка, но за мен невероятно комуникационно устройство и информационен център. Харесва ми и това е само версия 1!

Home Alert се състои от следните части:

  • Матричен дисплей на Freetronics, който е масив от 16x32 светодиода. Те се предлагат в различни цветове, но аз използвам червено, за да подчертая, че тази притурка е за „критични“известия.
  • Arduino Uno с Ethernet щит.
  • Пробив на часовник в реално време, като този или този.
  • Пиезо зумер
  • Сензор за температура и влажност на DHT22.

Home Alert се управлява чрез уеб страница, която се хоства на Heroku, базиран на облак хост на приложения. Уеб страницата е кодирана в Ruby, като се използва рамката на уеб приложението Sinatra и магазинът за ключ-стойност Redis.

Погледнете началната страница (покажете в първото прикачено изображение в тази стъпка), където формулярът очаква ново съобщение от потребителя.

Първото поле приема цифров хардуерен код. Това е код, който ви позволява да насочвате към конкретна система за домашно предупреждение, тъй като всяка може да получи уникален код. Или можете да имате няколко домашни сигнала, споделящи един и същ код, така че едно и също съобщение да се показва на множество места.

Съобщението, което искате да покажете, отива във второто поле. Всеки текст, който въведете там, ще бъде показан в DMD.

Ако искате да вдигнете шум, проверете Да! квадратчето за отметка и зумерът със сигурност ще привлече вниманието на всеки наблизо.

В тази статия ще ви покажа как да изградите своя собствена система за домашно предупреждение, както хардуер и софтуер Arduino, така и мини уеб приложението Sinatra.

Да започваме!

Стъпка 1: Хардуерът

Хардуерът
Хардуерът
Хардуерът
Хардуерът
Хардуерът
Хардуерът

DMD е фокусната точка на притурката. Можех да отида с малък LCD екран, но основната идея за този проект беше да произведа нещо, което да се вижда и чува от разстояние. За визуалната част имах нужда от нещо голямо и ярко и този дисплей на Freetronics е точно това, от което имах нужда. Всеки панел съдържа масив от 16x32 светодиода и можете да залепите няколко от тях заедно, за да създадете много по -големи дисплеи. Това е нещо, което бих искал да направя в близко бъдеще.

DMD идва с лесна за използване библиотека Arduino. той комуникира с Arduino чрез високоскоростен SPI. Успях да изтегля библиотеката от страницата на Freetronics Github, след това да стартирам демо скицата и да я накарам да работи в рамките на минути след отварянето на кутията. Бях изненадан да видя такъв ярък дисплей, използващ само захранване от Arduino. Ако искате временно да заслепите зрителите си, можете да свържете специално захранване към този DMD. Ако това не привлече вниманието им, нищо няма!

Физически този дисплей е с размери 320 мм (W), 160 мм (В) и 14 мм (D).

Задният панел съдържа конекторите за външно захранване, 5V с капацитет най-малко 4Amps, конекторът Arduino с маркировка HUB1 и конекторът за свързване на допълнителни дисплеи с маргаритка от другата страна. Според документацията можете да свържете верига до четири DMD.

DMD се управлява от Arduino Uno. Freetronics предлага много удобен конектор „DMDCON“, който просто се захваща директно върху правилните SPI и пинове за данни.

Освен DMD, използвах Arduino Uno, Ethernet щит, пробив на часовника в реално време, зумер и DHT22. За всички тези компоненти създадох лекции, описващи тяхната работа в моя курс по Udemy. (Безсрамно саморекламиране: регистрирайте се в моя имейл списък на arduinosbs.com и получете талон, който ви дава достъп с отстъпка до всичките 55 лекции).

Часовникът в реално време, пробив, базиран на тактовата микросхема DS18072, е I2C устройство, така че е свързан към аналоговите пинове 1 и 2 на Uno, които реализират I2C шината.

Звънецът е свързан към цифров пин 3, откъдето го контролирам с помощта на функцията tone ().

Сензорът DHT22 е свързан към цифров извод 2. Внимавайте да свържете 10KΩ издърпващ се резистор между 5V линията и линията за данни.

Стъпка 2: Скицата на Arduino

Скицата не е голяма по отношение на броя редове, но почти изчерпва наличната флаш памет на Uno благодарение на всички включени библиотеки. Има много място за оптимизиране на паметта, но тъй като съм на етап прототипиране, това е проект за друг ден. Този код е достъпен в Github.

Ето скицата с вградени коментари (вижте прикачения файл в PDF).

Основната отговорност на тази скица е да направи Arduino потребител на уеб услуга. Уеб услугата е прост уеб сайт с две крайни точки, едната за достъп на потребител чрез уеб браузър и подаване на текстов низ, която желае да се покаже в DMD, и друга, където Arduino ще има достъп, за да извлечете този текстов низ.

Моля, изтеглете и прочетете прикачения PDF файл, той съдържа вградени коментари, които описват работата му.

Стъпка 3: Синатра излиза на сцената

Синатра излиза на сцената!
Синатра излиза на сцената!

Има много начини за създаване на уеб сайтове и уеб услуги. От езици за програмиране с поддържащи уеб библиотеки до пълнофункционални рамки може да бъде объркващо и трудно да се избере един за тази работа.

Използвал съм и играл с доста голям брой технологии за уеб приложения и откривам, че Sinatra е идеален за изграждане на уеб услуги и малки уеб сайтове. По -специално, когато изграждам уеб услуга, която да поддържа притурка Arduino, Sinatra е наистина добър избор.

Какво е Синатра и защо е толкова добър избор? Радвам се, че попита!

Sinatra е език за бързо развитие на уеб приложения. Той е изграден върху Ruby, много популярен и изразителен скриптов език с общо предназначение. Може да чуете, че Sinatra се нарича „DSL“, език, специфичен за домейн. Домейнът тук е мрежата. Ключовите думи (думи) и синтаксисът, създаден за Sinatra, са такива, че улесняват и бързо създават уеб приложения на хората.

По времето, когато така наречените „убедени“рамки за разработка на уеб приложения като Ruby on Rails и Django са супер популярни, Sinatra улавя противоположния край на спектъра. Докато Ruby on Rails и Django изискват от програмиста да следва конкретна конвенция и начин на действие (което от своя страна предполага стръмна и дълга крива на обучение), Sinatra не поставя такива изисквания.

Синатра е концептуално много по -опростен от Rails и Djangos на света. Можете да стартирате и стартирате с уеб приложение, което може да взаимодейства с вашия Arduino в рамките на минути.

Ще демонстрирам с пример. Ето как изглежда минималното уеб приложение на Sinatra (просто прочетете следното по -долу, всъщност не правете това на компютъра си, защото вероятно все още нямате настройките за това):

В един файл, нека го наречем my_app.rb, добавете този текст:

изискват 'sinatra'get'/'do "Здравей, свят!" край

В командния ред стартирайте приложението така:

ruby my_app.rb

Вашето приложение ще се стартира и ще видите този текст в конзолата:

peter@ubuntu-dev: ~/arduino/sinatra_demo $ ruby my_app.rbPuma 2.8.1 стартиране …* Минимални нишки: 0, макс нишки: 16* Околна среда: развитие* Слушане на tcp: // localhost: 4567 == Sinatra/1.4.4 е стъпила на етап 4567 за разработка с резервно копие от Puma

Приложението вече е готово да получава заявки на клиенти. Отворете браузър, насочете го към https:// localhost: 4567 и това ще видите (вижте приложената екранна снимка).

Това са четири прости реда код в един файл. За разлика от Rails биха били необходими над сто файла, генерирани просто, за да задоволят изискванията на рамката. Не ме разбирайте погрешно, обичам Rails, но наистина?…

Така че, Синатра е прост и бърз за изпълнение. Предполагам, че не знаете нищо за Ruby, Sinatra и внедряването на приложения в облака, така че в следващия раздел ще ви преведа стъпка по стъпка от нула до внедряване на вашата уеб услуга Arduino в облака.

Стъпка 4: Настройте вашата машина за разработка

Sinatra се основава на езика за програмиране Ruby. Така че, трябва да инсталирате Ruby, преди да инсталирате Sinatra.

Също така ще трябва да инсталирате сървър за съхранение на ключ-стойност, наречен Redis. Помислете за Redis като база данни, която съхранява данни срещу ключ. Използвате ключа за извличане на данните и той е оптимизиран за скорост, а не за гъвкавост на структурите от данни, за които е предназначена традиционната релационна база данни. Home Alert съхранява своите съобщения в Redis.

Стъпка 5: Ruby на Mac или Linux

Ако използвате компютър с Mac или Linux, препоръчвам ви да използвате RVM, за да инсталирате и управлявате вашата Ruby инсталация (RVM: Ruby Version Manager). Инструкциите за инсталиране на Ruby с RVM са на тази страница или просто копирайте и поставете тази команда във вашата черупка:

curl -sSL https://get.rvm.io | bash -s стабилен --ruby

Седнете, отпуснете се, отпуснете се и изчакайте изтеглянето, компилирането и инсталирането на RVM и Ruby да приключи.

Стъпка 6: Ruby в Windows

Ако използвате Windows, препоръчвам да следвате това ръководство на уеб сайта на Ruby Installer за Windows и да използвате приложението за настройка.

Стъпка 7: Проверете и настройте вашия Ruby

По време на писането най -новата стабилна версия на Ruby е 2.1.1.p76. Можете да проверите версията, която е инсталирана с RVM, като напишете това:

rvm информация

Ще се появят много информация за RVM и Ruby. В моя случай това е секцията Ruby:

ruby: interpreter: "ruby" версия: "2.1.1p76" date: "2014-02-24" platform: "x86_64-linux" patchlevel: "2014-02-24 revision 45161" full_version: "ruby 2.1.1p76 (2014 -02-24 ревизия 45161) [x86_64-linux]"

Препоръчвам ви да използвате и Ruby 2.1.1, така че ако видите нещо по -старо от това, надстройте така:

rvm инсталиране 2.1.1

Това ще инсталира Ruby 2.1.1. Сайтът на проекта RVM съдържа много информация за RVM и как да управлявате вашата Ruby инсталация.

Стъпка 8: Инсталирайте Sinatra (всички платформи)

В Ruby кодът се споделя като пакети, наречени „скъпоценни камъни“. Кодът, който съставя Sinatra, може да бъде инсталиран на вашия компютър като скъпоценен камък като този:

скъпоценен камък инсталирайте sinatra

Този ред ще извлече целия код и документация и ще го инсталира на вашия компютър.

Стъпка 9: Redis на Mac или Linux

Настройването на Redis на Mac или Linux е лесно. Процесът е обяснен на уеб сайта на Redis. Отворете терминала на черупката и въведете тези команди:

$ wget https://download.redis.io/releases/redis-2.8.7.tar…$ tar xzf redis-2.8.7.tar.gz $ cd redis-2.8.7 $ направи

Стартирайте Redis, като въведете:

$ src/redis-сървър

… и сте готови!

Стъпка 10: Redis в Windows

Redis в Windows се препоръчва само за разработка и ще трябва да го компилирате, като използвате безплатната среда за разработка на Visual Studio Express. Изисква малко време, за да го стартирате, но работи добре и си струва усилията. Следвайте инструкциите на страницата на проекта Github. Там ще намерите и връзка към страницата на Visual Studio Express.

Стъпка 11: Създайте приложението за уеб услуга

Създайте приложение за уеб услуга
Създайте приложение за уеб услуга

Нека изградим приложението и го стартираме на вашата машина за разработка. Ще коригираме скицата на Arduino, за да се свърже с този екземпляр на приложението, докато го тестваме. След като се убедим, че всичко работи добре, ще се разположим в облака и ще актуализираме скицата, за да използваме облачния екземпляр.

Ето кода на Ruby, всичко в един файл с име "web.rb" (този код е достъпен в Github).

Важно: Изтеглете и прочетете прикачения PDF файл, той съдържа подробни вградени коментари (моля, направете това, преди да продължите!).

Вече можете да изпробвате вашата система за домашно предупреждение. В скицата си променете константите на УЕБСАЙТ и УЕБПЕЙЖ, за да сочат към вашата машина за разработка и номера на порта за вашия сървър за разработка Sinatra. В моя случай имам машина за разработка на IP 172.16.115.136 и сървърът за развитие Sinatra слуша порт 5000, така че настройките ми за скици са:

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

Този IP адрес е достъпен само за устройства в моята домашна мрежа.

Настройката HW_ID представлява „хардуерния идентификатор“, тоест идентификаторът, на който Arduino, контролиращ DMD, ще се идентифицира с приложението Sinatra. Това е много основен вид удостоверяване. Уеб приложението ще предаде съобщение на Arduino с искане за това въз основа на предоставения HW_ID. Можете да имате няколко устройства с един и същ HW_ID, като в този случай всички устройства ще показват едно и също съобщение. Ако искате „поверителност“, изберете идентификационен номер с много случайни знаци, които другите хора няма да могат да познаят. Внимавайте също, никаква комуникация не е криптирана.

Сега продължете и стартирайте приложението си Sinatra, въведете това (ако приемете, че сте в папката на проекта Sinatra):

ruby web.rb

… и ще видите нещо подобно (някои подробности могат да варират, стига това да не се срине, вие сте добре):

10:42:18 web.1 | започна с pid 4911910: 42: 18 web.1 | Puma 2.8.1 стартира… 10: 42: 18 web.1 | * Минимални нишки: 0, макс. Нишки: 1610: 42: 18 web.1 | * Околна среда: развитие10: 42: 18 web.1 | * Слушане на tcp: //0.0.0.0: 5000

Насочете уеб браузъра си към местоположението, което сървърът слуша, и ще видите това (вижте второто приложение).

Качете скицата си в Arduino, уверете се, че е свързана с вашата локална мрежа. Ако всичко върви добре, Arduino ще проверява вашата уеб услуга веднъж на всяка минута. Дайте съобщение за показване: В полето HW код въведете същия идентификатор, който сте задали за константата HW_ID в скицата. Въведете нещо в полето „Вашето съобщение“и проверете „Buzz?“квадратче за отметка.

Изпратете, изчакайте минута и вижте съобщението ви да се появи в DMD!

Стъпка 12: Разгърнете в облака с помощта на Heroku

Сега, когато Home Alert работи в процес на разработка, нека го накараме да работи върху Cloud. Има безброй опции за разполагане на уеб приложения. Въз основа на обхвата и сложността на Home Alert реших, че настройката на мой собствен виртуален частен сървър не си струва усилията. Вместо това е по -добре да отидете за услуга като Heroku, хост на приложения. За моя мащаб безплатното ниво на Heroku е повече от достатъчно. Дори за компонента Redis успях да избера безплатен план от един от многото доставчици на Redis, които работят с Heroku.

Все пак има малко усилия, които са свързани с леко модифициране на моето приложение, така че да може да отговаря на спецификациите на Heroku. Подробностите са тук, но по същество ще трябва да добавите тези файлове към вашия проект Sinatra (всички следващи файлове могат да бъдат изтеглени от моя акаунт в Github):

* config.ru: Той казва на Heroku кой файл съдържа приложението. Ето съдържанието:

изискват './web'run Sinatra:: Приложение

Първият ред сочи към web.rb, а вторият реално изпълнява вашето приложение.

* Gemfile: съдържа скъпоценните камъни (пакети с рубинов код), които се изискват от приложението. Heroku ще погледне в този файл, за да разбере какъв друг код трябва да инсталира, за да работи приложението ви. Друг начин да погледнете Gemfile е, че той съдържа списък с зависимости за вашия проект. Ако някоя от тези зависимости не е налична, приложението ви няма да работи. Ето какво има в Gemfile за това приложение:

източник "https://rubygems.org" рубин "2.1.1" скъпоценен камък "sinatra'gem" puma'gem "redis"

Първо, той настройва изходното хранилище на целия Gem код да бъде rubygems.org. След това се изисква Ruby версия 2.1.1 да се използва за стартиране на приложението. След това той изброява необходимите скъпоценни камъни: Sinatra, Puma (страхотен сървър за уеб приложения Ruby) и Redis.

* Procfile: той казва на Heroku как да стартира вашия сървър. Тук има само един ред:

уеб: rackup -s puma -p $ PORT

Този ред казва, че „уеб“е единственият необходим вид услуга (може да имате други, като „работник“, за фонова обработка) и че за стартиране на услугата Heroku трябва да използва командата, която идва след „:“.

Можете да симулирате това, което Heroku ще направи, като следвате тази последователност на вашата машина за разработка (въведете само теста преди стрелката; това, което следва стрелката, е само описание на командата):

$> gem install bundler -> инсталира Bundler, който знае как да борави с Gemfile. $> bundle install -> Bundler обработва Gemfile и инсталира зависимости. $> rackup config.ru -> Rackup е инструмент, който може да обработи файла config.ru. Обикновено се предлага с по -късната версия на Ruby, ако не го инсталира така: стойка за инсталиране на скъпоценни камъни.

Последната стъпка води до действително стартиране на вашето приложение. Трябва да видите точно същия изход, както когато го стартирахте с ruby web.rb по -рано. Същото приложение работи, само с разликата, че вторият метод е начина, по който Heroku го стартира.

Почти сме готови да внедрим това приложение във вашия акаунт в Heroku. Ако все още нямате такъв, продължете и го създайте сега. След това следвайте ръководството за бързо стартиране, за да настроите вашия акаунт и вашата локална машина за разработка, и особено Heroku Toolbelt.

Heroku Toolbelt инсталира клиента на Heroku от командния ред, Git (системата за управление на отворен код с отворен код) и Foreman (инструмент Ruby, който помага за управление на приложения, базирани на Procfile).

След като приключите с инсталирането на Heroku Toolbelt, следвайки инструкциите на уебсайта на Heroku, следвайте тези стъпки, за да разгърнете приложението си (всичко се въвежда в командния ред, в директорията на приложението):

$> heroku вход -> Влезте в Heroku чрез командния ред $> git init -> Инициализирайте Git хранилище за вашето приложение $> git add. -> (забележете точката!) Добавете всички файлове в текущата директория към хранилището на Git $> git commit -m “init” -> Заредете тези файлове в хранилището, с ново съобщение $> heroku create -> Create a new на Heroku. Heroku ще даде на приложението ви произволно име, нещо като „blazing-galaxy-997“. Запишете името и URL адреса, за да можете по -късно да получите достъп до него чрез уеб браузъра си. Този URL адрес ще изглежда така: „https://blazing-galaxy-997.herokuapp.com/“. Също така ще трябва да копирате името на хоста (частта „blazing-galaxy-997.herokuapp.com“) на новото си приложение в константата на УЕБСАЙТА на вашата скица Arduino. Направете това сега, за да не забравите по -късно. $> heroku добавки: добавяне на rediscloud -> Добавя безплатното ниво на услугата Rediscloud Redis към вашето приложение. Конфигурационните настройки се създават автоматично и стават достъпни за вашето приложение. $> git push heroku master -> Разгърнете кода си в Heroku. Това автоматично ще прехвърли кода, ще настрои всички зависимости на Heroku и ще стартира приложението. В края на процеса ще видите нещо подобно: „https://blazing-galaxy-997.herokuapp.com разгърнато в Heroku“, което означава, че приложението ви вече е на живо в публичния облак! Честито!

Давай, върти го!

Стъпка 13: Обединяване на всичко

С разгърнатото уеб приложение качете актуализираната скица в Arduino (не забравяйте, че сте актуализирали константата WEBSITE, за да сочите към вашия производствен екземпляр на уеб приложението).

Използвайте браузъра си за достъп до приложението си на Heroku. Точно както във въведението, въведете вашия хардуерен идентификатор в първото текстово поле, вашето съобщение във второто и поставете отметка в квадратчето, за да активирате зумера.

Вашето съобщение ще се появи в DMD около минута по -късно, ако всичко върви добре!

Стъпка 14: Потенциал

Има още толкова много неща, които можете да направите със системата за домашно предупреждение …

Наличието на заден край на Heroku означава, че можете да добавите много логика, която може да добави невероятна функционалност. Например, можете да добавите възможност за приложението да управлява повторни известия, потвърждения или да контролира допълнителен хардуер за уведомяване, като стробоскопи и др. Можете да го разширите в територията за домашна автоматизация и да контролирате светлините и вратите. Можете да добавите няколко DMD, за да показвате различни съобщения във всяко едно или едно съобщение в комбиниран по -голям дисплей. Просто надрасквам повърхността на възможното тук!

Наслади се!

Препоръчано: