Оглавление:
- Шаг 1. Аппаратное обеспечение
- Шаг 2: Эскиз Arduino
- Шаг 3: Синатра выходит на сцену
- Шаг 4: Настройте машину для разработки
- Шаг 5: Ruby на Mac или Linux
- Шаг 6: Ruby в Windows
- Шаг 7: проверьте и установите свой Ruby
- Шаг 8: Установите Sinatra (все платформы)
- Шаг 9: Redis на Mac или Linux
- Шаг 10: Redis в Windows
- Шаг 11: Создайте приложение веб-службы
- Шаг 12: развертывание в облаке с помощью Heroku
- Шаг 13: Собираем все вместе
- Шаг 14: потенциал
Видео: Home Alert: обмен сообщениями Arduino + Cloud на большом дисплее: 14 шагов (с изображениями)
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:53
В век мобильных телефонов можно ожидать, что люди будут реагировать на ваш звонок 24 часа в сутки, 7 дней в неделю.
Или не. Когда моя жена возвращается домой, телефон остается в ее сумке или его аккумулятор разряжен. У нас нет наземной линии связи. Звонить или отправлять SMS, чтобы попросить лифт домой от вокзала в дождливую ночь, или позвонить, чтобы спросить, остались ли у меня ключи на столе, - это буквально выдавать желаемое за действительное.
У меня эта проблема возникает достаточно часто, чтобы найти решение. Немного поработав с Arduino и точечно-матричным дисплеем Freetronics (DMD), получился очень раздражающий (для моей жены) гаджет, но для меня это потрясающее устройство связи и информационный центр. Мне это нравится, и это только версия 1!
Home Alert состоит из следующих частей:
- Точечно-матричный дисплей Freetronics, представляющий собой массив светодиодов 16x32. Они бывают разных цветов, но я использую красный, чтобы подчеркнуть, что этот гаджет предназначен для «критических» уведомлений.
- Arduino Uno с экраном Ethernet.
- Пробой часов реального времени, вроде того или этого.
- Пьезозуммер
- Датчик температуры и влажности DHT22.
Home Alert управляется через веб-страницу, размещенную на Heroku, хосте облачных приложений. Веб-страница написана на Ruby с использованием инфраструктуры веб-приложений Sinatra и хранилища ключей и значений Redis.
Взгляните на домашнюю страницу (показанную на первом прикрепленном изображении на этом шаге), где форма ожидает нового сообщения от пользователя.
Первое поле принимает числовой аппаратный код. Это код, который позволяет настроить таргетинг на конкретную систему Home Alert, поскольку каждой может быть присвоен уникальный код. Или у вас может быть несколько Home Alerts, использующих один и тот же код, чтобы одно и то же сообщение отображалось в нескольких местах.
Сообщение, которое вы хотите отобразить, переходит во второе поле. Любой вводимый вами текст будет отображаться в DMD.
Если вы хотите пошуметь, отметьте Да! флажок, и зуммер обязательно привлечет внимание всех, кто находится поблизости.
В этой статье я покажу вам, как создать свою собственную систему Home Alert, как аппаратное, так и программное обеспечение Arduino, а также веб-приложение Sinatra mini.
Давайте начнем!
Шаг 1. Аппаратное обеспечение
DMD - это центральный элемент устройства. Я мог бы выбрать небольшой ЖК-экран, но основная идея этого проекта заключалась в том, чтобы создать что-то, что можно увидеть и услышать на расстоянии. Что касается визуальной части, мне нужно было что-то большое и яркое, и этот дисплей Freetronics - именно то, что мне нужно. Каждая панель содержит массив из 16x32 светодиодов, и вы можете соединить несколько из них вместе, чтобы создать дисплеи гораздо большего размера. Это то, чем я хотел бы заняться в ближайшем будущем.
DMD поставляется с простой в использовании библиотекой Arduino. он связывается с Arduino через высокоскоростной SPI. Мне удалось получить библиотеку со страницы Freetronics Github, затем запустить демонстрационный эскиз и заставить его работать в течение нескольких минут после открытия коробки. Я был удивлен, увидев такой яркий дисплей, использующий только питание от Arduino. Если вы хотите временно ослепить зрителей, вы можете подключить к этому DMD специальный блок питания. Если это не привлечет их внимания, ничего не получится!
Физически этот дисплей имеет размеры 320 мм (Ш), 160 мм (В) и 14 мм (Г).
Задняя панель содержит разъемы для внешнего питания, 5 В с мощностью не менее 4 А, разъем Arduino с маркировкой HUB1 и разъем для последовательного подключения дополнительных дисплеев на противоположной стороне. Согласно документации, вы можете последовательно подключить до четырех DMD.
DMD управляется Arduino Uno. Freetronics предоставляет очень удобный разъем «DMDCON», который просто подключается непосредственно к правильному SPI и контактам данных.
Помимо DMD, я использовал Arduino Uno, Ethernet Shield, таймер реального времени, зуммер и DHT22. Для всех этих компонентов я создал лекции, описывающие их работу, в моем курсе Udemy. (Бесстыдная самореклама: подпишитесь на мою рассылку на arduinosbs.com и получите купон, дающий вам доступ ко всем 55 лекциям со скидкой).
Часы реального времени, основанные на микросхеме часов DS18072, представляют собой устройство I2C, поэтому они подключены к аналоговым контактам 1 и 2 Uno, которые реализуют шину I2C.
Зуммер подключен к цифровому выводу 3, откуда я управляю им с помощью функции tone ().
Датчик DHT22 подключен к цифровому контакту 2. Будьте осторожны при подключении подтягивающего резистора 10 кОм между линией 5 В и линией данных.
Шаг 2: Эскиз Arduino
Скетч невелик по количеству строк, но почти исчерпывает доступную флеш-память Uno благодаря всем включенным библиотекам. Есть много возможностей для оптимизации памяти, но, поскольку я нахожусь на стадии создания прототипа, это проект на другой день. Этот код доступен на Github.
Вот эскиз со встроенными комментариями (см. Вложение в формате PDF).
Основная задача этого скетча - сделать Arduino потребителем веб-сервиса. Веб-сервис - это простой веб-сайт с двумя конечными точками, к одной из которых пользователь может получить доступ через веб-браузер и отправить текстовую строку, которую он хочет отобразить на DMD, а другой, к которому Arduino будет обращаться, чтобы получить эту текстовую строку.
Пожалуйста, скачайте и прочтите прикрепленный PDF-файл, он содержит встроенные комментарии, описывающие его работу.
Шаг 3: Синатра выходит на сцену
Есть много способов создания веб-сайтов и веб-сервисов. От языков программирования с поддерживающими веб-библиотеками до полнофункциональных фреймворков - выбор одного для этой работы может сбивать с толку.
Я использовал и играл с большим количеством технологий веб-приложений и обнаружил, что Sinatra идеально подходит для создания веб-сервисов и небольших веб-сайтов. В частности, когда я создаю веб-сервис для поддержки гаджета Arduino, Sinatra - действительно хороший выбор.
Что такое Sinatra и почему это такой хороший выбор? Я рада, что вы спросили!
Sinatra - это язык для быстрой разработки веб-приложений. Он построен на основе Ruby, очень популярного и выразительного языка сценариев общего назначения. Вы можете слышать, что Sinatra упоминается как «DSL», язык, специфичный для домена. Домен здесь - Интернет. Ключевые слова (слова) и синтаксис, созданные для Sinatra, таковы, что люди могут легко и быстро создавать веб-приложения.
В то время, когда так называемые «самоуверенные» фреймворки для разработки веб-приложений, такие как Ruby on Rails и Django, очень популярны, Sinatra захватывает противоположный конец спектра. В то время как Ruby on Rails и Django требуют, чтобы программист следовал определенному соглашению и способу работы (что, в свою очередь, подразумевает крутой и долгий путь обучения), Sinatra не предъявляет таких требований.
Sinatra концептуально намного проще, чем Rails и Djangos в мире. Вы можете начать работу с веб-приложением, которое может взаимодействовать с вашим Arduino в течение нескольких минут.
Продемонстрирую на примере. Вот как выглядит минимальное веб-приложение Sinatra (пока просто прочтите следующее, на самом деле не делайте этого на своем компьютере, потому что у вас, вероятно, еще нет предварительных условий для этого):
В одном файле, назовем его my_app.rb, добавьте этот текст:
require 'sinatra'get' / 'do "Hello, world!" end
В командной строке запустите приложение следующим образом:
рубин 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, но правда?…
Итак, Sinatra прост и работает быстро. Я предполагаю, что вы ничего не знаете о 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: интерпретатор: "ruby" версия: "2.1.1p76" дата: "2014-02-24" платформа: "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 $ make
Запустите Redis, набрав:
$ src / redis-сервер
… И готово!
Шаг 10: Redis в Windows
Redis для Windows рекомендуется только для разработки, и вам нужно будет скомпилировать его с помощью бесплатной среды разработки Visual Studio Express. Для его запуска требуется немного времени, но он работает хорошо и стоит затраченных усилий. Следуйте инструкциям на странице проекта на Github. Там вы также найдете ссылку на страницу Visual Studio Express.
Шаг 11: Создайте приложение веб-службы
Давайте создадим приложение и запустим его на вашем компьютере для разработки. Мы настроим скетч Arduino для подключения к этому экземпляру приложения во время его тестирования. Убедившись, что все работает хорошо, мы развернем в облаке и обновим эскиз, чтобы использовать экземпляр облака.
Вот код Ruby, весь в одном файле с именем «web.rb» (этот код доступен на Github).
Важно: скачайте и прочтите прикрепленный PDF-файл, он содержит подробные встроенные комментарии (пожалуйста, сделайте это, прежде чем продолжить!).
Теперь вы можете опробовать свою систему Home Alert. В своем скетче измените константы WEBSITE и WEBPAGE, чтобы они указывали на вашу машину разработки и номер порта для вашего сервера Sinatra разработки. В моем случае у меня есть машина разработки с IP 172.16.115.136, а сервер Sinatra разработки прослушивает порт 5000, поэтому мои настройки скетча следующие:
#define HW_ID "123" #define WEBSITE "172.16.115.136:5000 "#define WEBPAGE" / get_message /"
Этот IP-адрес доступен только для устройств в моей домашней сети.
Параметр HW_ID представляет собой «идентификатор оборудования», то есть идентификатор, по которому Arduino, управляющий DMD, будет идентифицировать себя для приложения Sinatra. Это очень простой вид аутентификации. Веб-приложение передаст сообщение Arduino с просьбой об этом на основе предоставленного HW_ID. У вас может быть несколько устройств с одним и тем же HW_ID, и в этом случае все устройства будут отображать одно и то же сообщение. Если вам нужна «конфиденциальность», выберите идентификатор с множеством случайных символов, которые другие люди не смогут угадать. Также будьте осторожны, никакие сообщения не зашифрованы.
Теперь запустите приложение Sinatra, введите это (при условии, что вы находитесь в папке проекта Sinatra):
рубиновый 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 | * Окружающая среда: development10: 42: 18 web.1 | * Прослушивание по tcp: //0.0.0.0: 5000
Укажите в браузере место, которое прослушивает сервер, и вы увидите это (см. Второе вложение).
Загрузите свой скетч в Arduino, убедитесь, что он подключен к вашей локальной сети. Если все пойдет хорошо, Arduino будет опрашивать ваш веб-сервис раз в минуту. Дайте ему сообщение, которое будет отображаться: в поле HW code введите тот же идентификатор, который вы установили для константы HW_ID в скетче. Введите что-нибудь в поле «Ваше сообщение» и отметьте «Живая лента?» флажок.
Отправьте, подождите минуту и увидите, как ваше сообщение появится в DMD!
Шаг 12: развертывание в облаке с помощью Heroku
Теперь, когда Home Alert находится в разработке, давайте займемся его работой в облаке. Существует бесчисленное множество вариантов развертывания веб-приложений. Основываясь на масштабах и сложности Home Alert, я решил, что установка моего собственного виртуального частного сервера не стоит усилий. Вместо этого лучше использовать такую службу, как Heroku, хост приложения. Для моего масштаба уровня бесплатного пользования Heroku более чем достаточно. Даже для компонента Redis я смог выбрать бесплатный план от одного из многих поставщиков Redis, которые работают с Heroku.
Тем не менее, это требует некоторых усилий, которые связаны с тем, чтобы мое приложение было немного изменено, чтобы оно соответствовало спецификациям Heroku. Подробности здесь, но, по сути, вам нужно будет добавить эти файлы в свой проект Sinatra (все следующие файлы можно загрузить из моей учетной записи Github):
* config.ru: сообщает Heroku, какой файл содержит приложение. Вот содержание:
требуется './web'run Sinatra:: Application
Первая строка указывает на web.rb, а вторая строка фактически запускает ваше приложение.
* Gemfile: он содержит драгоценные камни (пакеты кода рубина), которые требуются приложению. Heroku заглянет внутрь этого файла, чтобы выяснить, какой еще код нужно установить, чтобы ваше приложение работало. Другой способ взглянуть на Gemfile - это список зависимостей для вашего проекта. Если какая-либо из этих зависимостей недоступна, ваше приложение не будет работать. Вот что находится внутри Gemfile для этого приложения:
источник "https://rubygems.org" ruby "2.1.1" gem 'sinatra'gem' puma'gem 'redis'
Во-первых, он устанавливает исходный репозиторий всего кода Gem как rubygems.org. Затем требуется, чтобы для запуска приложения использовалась Ruby версии 2.1.1. Затем в нем перечислены необходимые Gems: Sinatra, Puma (отличный сервер веб-приложений Ruby) и Redis.
* Procfile: он сообщает Heroku, как запустить ваш сервер. Здесь всего одна строчка:
web: rackup -s puma -p $ ПОРТ
В этой строке говорится, что «web» - это единственный требуемый вид сервиса (у вас могут быть другие, например «worker», для фоновой обработки), и что для запуска сервиса Heroku должен использовать команду, идущую после «:».
Вы можете смоделировать, что будет делать Heroku, выполнив эту последовательность действий на своей машине разработки (введите тест только перед стрелкой; то, что следует за стрелкой, является только описанием команды):
$> gem install bundler -> устанавливает Bundler, который знает, как работать с Gemfile. $> bundle install -> Bundler обрабатывает Gemfile и устанавливает зависимости. $> Rackup config.ru -> Rackup - это инструмент для обработки файла config.ru. Обычно он поставляется с более поздней версией Ruby, если он не устанавливает его следующим образом: gem install rack.
Последний шаг приводит к фактическому запуску вашего приложения. Вы должны увидеть тот же результат, что и при запуске с ruby web.rb ранее. Это то же самое приложение, только с той разницей, что второй метод - это то, как Heroku запускает его.
Мы почти готовы развернуть это приложение в вашей учетной записи Heroku. Если у вас его еще нет, создайте его сейчас. Затем следуйте руководству по быстрому запуску, чтобы настроить свою учетную запись и локальную машину разработки, особенно Heroku Toolbelt.
Heroku Toolbelt устанавливает клиент командной строки Heroku, Git (систему управления исходным кодом с открытым исходным кодом) и Foreman (инструмент Ruby, помогающий управлять приложениями на основе Procfile).
После завершения установки Heroku Toolbelt, следуя инструкциям на веб-сайте Heroku, выполните следующие действия, чтобы развернуть приложение (все вводится в командной строке внутри каталога приложения):
$> heroku login -> Войдите в Heroku через командную строку $> git init -> Инициализируйте репозиторий Git для вашего приложения $> git add. -> (обратите внимание на точку!) Добавьте все файлы в текущем каталоге в репозиторий Git $> git commit -m «init» -> Зафиксируйте эти файлы в репозитории с новым сообщением $> heroku create -> Создать новый на Heroku. Heroku даст вашему приложению случайное имя, например, «пылающая галактика-997». Запишите имя и URL-адрес, чтобы позже вы могли получить к нему доступ через веб-браузер. Этот URL-адрес будет выглядеть так: «https://blazing-galaxy-997.herokuapp.com/». Вам также необходимо скопировать имя хоста (часть «blazing-galaxy-997.herokuapp.com») вашего нового приложения в константу WEBSITE вашего скетча Arduino. Сделайте это сейчас, чтобы не забыть позже. $> heroku addons: добавить rediscloud -> Добавляет бесплатный уровень службы Rediscloud Redis в ваше приложение. Параметры конфигурации создаются автоматически и становятся доступными для вашего приложения. $> git push heroku master -> Разверните свой код в Heroku. Это автоматически перенесет код, установит любые зависимости от Heroku и запустит приложение. В конце процесса вы увидите что-то вроде этого: «https://blazing-galaxy-997.herokuapp.com развернуто на Heroku», что означает, что ваше приложение теперь размещено в общедоступном облаке! Поздравляю!
Давай, попробуй!
Шаг 13: Собираем все вместе
Развернув веб-приложение, загрузите обновленный эскиз в Arduino (помните, что вы обновили константу WEBSITE, чтобы она указывала на ваш производственный экземпляр веб-приложения).
Используйте свой браузер, чтобы получить доступ к своему приложению на Heroku. Как и во введении, введите свой идентификатор оборудования в первое текстовое поле, ваше сообщение - во второе и установите флажок, чтобы активировать зуммер.
Ваше сообщение появится на DMD примерно через минуту, если все пойдет хорошо!
Шаг 14: потенциал
Вы можете сделать гораздо больше с помощью системы Home Alert …
Наличие серверной части Heroku означает, что вы можете добавить много логики, которая может добавить потрясающую функциональность. Например, вы можете добавить возможность для приложения управлять повторными уведомлениями, подтверждениями или управлять дополнительным оборудованием для уведомлений, таким как стробоскопы и т. Д. Вы можете распространить его на территорию домашней автоматизации и управлять освещением и дверьми. Вы можете добавить несколько DMD для отображения либо разных сообщений в каждом из них, либо одного сообщения на объединенном большом дисплее. Я лишь поверхностно говорю о том, что здесь возможно!
Наслаждаться!
Рекомендуемые:
Мониторинг температуры и влажности в помещении с помощью ESP32 и AskSensors Cloud: 6 шагов
Мониторинг температуры и влажности в помещении с помощью ESP32 и AskSensors Cloud: в этом руководстве вы узнаете, как контролировать температуру и влажность в вашей комнате или на столе с помощью DHT11 и ESP32, подключенных к облаку. Обновления наших руководств можно найти здесь. Технические характеристики: Датчик DHT11 может измерять температуру
LED Smart Cloud Light: 11 шагов (с изображениями)
LED Smart Cloud Light: это интеллектуальное светодиодное облако, которое можно собрать с помощью минимальных инструментов. С помощью контроллера вы можете делать всевозможные узоры и варианты цвета. Поскольку светодиоды имеют индивидуальную адресацию (каждый светодиод может быть разного цвета и / или яркости), закрытие
Настенный светильник Pixel Cloud Ambient: 6 шагов (с изображениями)
Pixel Cloud Ambient Wall Light: еще одна модификация светильника Ikea, добавлены адресуемые светодиоды и контроллер для создания чего-то уникального. Предназначен для использования в детской комнате для мягкого рассеянного света и в качестве ночника. В этом проекте используется 56 адресуемых пикселей APA102, NLE
Инвертор Omnik Off It's Cloud и на моем MQTT: 3 шага (с изображениями)
Omnik Inverter Off It's Cloud и на моем MQTT: У меня есть солнечная энергетическая установка, использующая струнный инвертор Omnik. Omnik - китайский производитель фотоэлектрических инверторов, которые производят чрезвычайно эффективные устройства. При желании вы можете установить модуль Wi-Fi, чтобы сделать его «подключенным». Я очень
Мониторинг качества воды с использованием MKR1000 и ARTIK Cloud: 13 шагов (с изображениями)
Мониторинг качества воды с использованием MKR1000 и ARTIK Cloud: Введение Основная цель этого проекта - использовать MKR1000 и Samsung ARTIK Cloud для мониторинга уровня pH и температуры в плавательных бассейнах. Мы будем использовать датчик температуры и pH или датчик мощности водорода для измерения щелочность а