Алиса, Ардуино и Blynk - делаем собственное устройство
Содержание
- 1 Что такое blynk?
- 2 Собираем "умный" выключатель
- 3 Итак, blynk...
- 4 Подготовка Arduino IDE и прошивка
- 5 Способы управления через Blynk
- 6 Подключаемся методом webhooks к Умному дому Яндекса
- 7 Важный нюанс по управлению через 0 и 1
- 8 FAQ
- 8.1 Через Интернет? А как же безопасность?
- 8.2 При создании кнопки я заметил(а), что есть платные функции в виде покупки энергии для элементов управления
- 8.3 Можно только по Wi-Fi?
- 8.4 Почему не использовать готовые решения?
- 8.5 Что еще можно сделать по этой технологии?
- 8.6 А считывать состояния Blynk умеет?
- 8.7 Насколько это надежно? (Китай долго не проработает...)
На данной странице размещена инструкция по простому подключению ардуиноподобных устройств, имеющих доступ к сети. Обязательно пригодится тем, кто:
- любит "дешево и сердито";
- не любит готовые решения, и предпочитает мозговой штурм и пайку;
- еще думает над своей концепцией УД (можно использовать, как пример);
- кто "в теме", но пока имеет сложности с подключением собственных наработок к Умному дому Яндекса.
Итак, начнем...
Что такое blynk?
Это облачное решение, созданное украинскими разработчиками для удалённого управления различными микроконтроллерами, с помощью мобильных устройств.
- Обширный список поддерживаемых устройств;
- Множество вариантов управления;
- Широкий набор инструментов;
- Огромный плюс - Example Code Builder, позволяющий сгенерировать нужный код с минимальными правками и знаниями в программировании.
Чтобы понять принцип работы с Blynk, а заодно рассмотреть принцип подключения Arduino к УДЯ, соберём пример управляемого реле, имитирующее... Яндекс.Розетку.
Собираем "умный" выключатель
Нам понадобится:
- NodeMcu V3 (или любой другой МК из списка поддерживаемых устройств);
- Одноканальное реле;
- Паяльник или макетная плата;
- Немного тонкого провода;
- Прямые руки.
Соединяем по схеме:
Пин NodeMcu | Пин реле |
---|---|
VCC | VCC |
GND | GND |
D4 | IN |
Не рекомендуется подключать Реле в разрыв питания L и L1 до момента полной сборки!
А также:
Опасность поражения током
Не повторяйте эти действия, если не обладаете нужными знаниями и природной осторожностью.
Телефон вызова экстренных служб - 112.
Итак, blynk...
- Скачиваем официальное приложение blynk из GooglePlay или AppStore.
- Регистрируемся в приложении (рис. 1)
- Создаём новый проект (рис. 2)
- Важно правильно выбрать микроконтроллер (рис. 3)
- Появится пустая страница для элементов управления (рис. 4), а на адрес электронной почты придёт token от нашего проекта в blynk, который мы будем использовать для управления через webhook.
Подготовка Arduino IDE и прошивка
- Загружаем и устанавливаем Arduino IDE.
- Скачиваем библиотеки Blynk для работы с сервисом.
- Распаковываем скачанное в папку с библиотеками Arduino IDE (обычно это C:\Users\<Текущий пользователь>\Documents\Arduino\).
- Переходим к утилите Blynk Example Browser, выбираем/указываем:
- микроконтроллер,
- способ подключения,
- token
- пример скетча (в данном случае Virtual Pin Read).
- Копируем полученный код в Arduino IDE.
- В примере вводим фактическое название нашей WiFi-сети и пароль.
В примере также присутствует функция вида:
BLYNK_WRITE(V1) { int pinValue = param.asInt(); // assigning incoming value from pin V1 to a variable // process received value }
Здесь:
- BLYNK_WRITE(V1) указывает, что функция выполнится при изменении виртуального пина 1,
- int pinValue = param.asInt(); объявляет переменную pinValue и загружает в неё текущее состояние виртуального пина (0 - пин выключен, 1 - пин включен).
Всего можно использовать 256 виртуальных пинов (V0-V255) - это огромный запас на все случаи жизни. Например, виртуальный пин 1 принимает значение 1 - подаём питание на физический пин NodeMcu и включаем этим реле, или виртуальный пин 2 принимает значение от 0 до 255 - изменяем ШИМ-сигнал, регулируем яркость (либо цвета RGB) диодной подсветки в 255 градациях яркости.
А теперь заставим нашу функцию включать физический пин D4 NodeMcu (в функции будем использовать событие виртуального пина 0, просто для удобства):
BLYNK_WRITE(V0) { int pinValue = param.asInt(); digitalWrite('''D4''', pinValue); }
Чтобы управлять этим выводом, в основной функции void setup() обязательно установим пин D4 как выход: pinMode(D4, OUTPUT);
В итоге получаем такой код для прошивки:
#define BLYNK_PRINT Serial #include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> char auth[] = "Мой токен"; //тут токен из e-mail char ssid[] = "YourNetworkName"; //Название WiFi-сети char pass[] = "YourPassword"; //Пароль BLYNK_WRITE(V0) //функция, отслеживающая изменение виртуального пина 0 { int pinValue = param.asInt(); //переменная текущего состояния виртуального пина digitalWrite(D4, pinValue); //задаем значение на физическом пине NodeMcu D4 равное значению виртуального пина 0 } void setup() //основная функция, выполняется один раз при подаче питания на микроконтроллер { Serial.begin(9600); //открываем серийный порт, чтобы видеть как проходит подключение к серверу blynk pinMode(D4, OUTPUT); //объявляем D4 "выходным" пином Blynk.begin(auth, ssid, pass); //авторизируемся на сервере } void loop() //основная функция, которая выполняется постоянно по кругу { Blynk.run(); //запускаем работу blynk. В этом примере - постоянную проверку виртуального пина 0 }
Заливаем прошивку в NodeMcu.
Так как пример предполагает использование различных плат, то пропустим тонкости настройки Arduino IDE для работы с NodeMcu; к тому же подобную информацию найти нетрудно.
Наш выключатель готов к работе!
Также данную схему можно использовать и для включения ПК (имитации нажатия кнопки включения). Для этого параллельно пинам кнопки Power (на материнской плате пины POWER SW) нужно подключить линии L и L1 (указанные на схеме !!!НЕ 220В!!!) и немного изменить скрипт, чтобы при изменении виртуального пина реле включалось на короткий промежуток времени, имитируя короткое нажатие.
В скрипте, в блоке:
BLYNK_WRITE(V0) //функция, отслеживающая изменение виртуального пина 0 { int pinValue = param.asInt(); //переменная текущего состояния виртуального пина if (pinValue = 0){ digitalWrite(D4, HIGH); //если работает неверно, то изменить на digitalWrite(D4, LOW); а ниже наоборот delay (100); // если задержка мала, можно увеличить digitalWrite(D4, LOW); //ДА-ДА, ИМЕННО ТУТ НИЖЕ. Если работает неверно, то изменить на digitalWrite(D4, HIGH); } }
мы добавили задержку delay (100); в 100 мс и выключили после нее физический пин D4 - digitalWrite(D4, LOW);
Способы управления через Blynk
На данный момент есть два варианта управлять пином:
С помощью вебхуков
- https://blynk-cloud.com/<ваш_токен>/update/V0?value=1 - для замыкания реле
- https://blynk-cloud.com/<ваш_токен>/update/V0?value=0 - для размыкания реле
С помощью мобильного приложения blynk
- Вернёмся к созданному ранее проекту и добавим простую кнопку с помощью иконки "+" в верхнем правом углу приложения.
- Выберем в открывшемся меню "Button" и разместим, где удобней.
- Зададим виртуальный пин, управлять которым мы будем этой кнопкой. Для этого просто тапнем по созданной кнопке.
- По желанию называем кнопки, задаём цвет и текст, для включенного и выключенного состояний.
- Тип "Push<>Switch" (кнопка или переключатель). Push - нажали и отпустили, пин выключился. Switch - нажали и отпустили, пин запомнил состояние.
Подключаемся методом webhooks к Умному дому Яндекса
Кузя
Будем использовать хорошо зарекомендовавший себя навык УД "Домовенок Кузя". Для этого:
- Переходим на сайт навыка и авторизуемся там с помощью учетной записи Яндекс.
- Выбираем кнопку "Добавить правило GET".
- Заполняем "по вкусу". Можно похулиганить и дать устройству имя "Розетка Яндекс".
- Не забываем в поле "URL управления устройством, доступный из интернета" вставить ссылку на наш вебхук.
- Создаём ВТОРОЕ правило GET - одно на включение устройства, второе - на его выключение.
- Выбираем кнопку "Виртуальные устройства умного дома" и создаем новое устройство (у меня лучше всего работают "лампы").
- Указываем ранее созданные "Правило на включение" и "Правило на выключение".
- Задаем имя устройства и комнату, в которой оно находится.
Приложение "Яндекс"
В приложении "Яндекс" (раздел "Устройства") находим навык "Домовенок Кузя". При первом запуске навык попросит авторизоваться. После авторизации нажимаем единственную кнопку "Обновить список устройств". Готово! После загрузки мы увидим наше устройство в списке.
Осталось сказать "Алиса, включи Розетку Яндекс" и услышать радостное пощелкивание реле.
Важный нюанс по управлению через 0 и 1
Модули управления нагрузкой бывают двух видов. Привычнее воспринимается, когда реле включается при логической "1" на входе, но часто бывает и наоборот.
Причин управления через ноль несколько: 1. Меньше вероятность ситуаций с кратковременными переключениями выходов при старте и инициализации процессора (при pullup-подтяжках они вообще исключены). 2. Выше помехозащищённость (так как диапазон для "1" в общем случае пошире, чем у "0"), выше стабильность для ситуаций с устройствами с разными логическими амплитудами. 4. Подтяжка - это всегда дополнительные детали (внутренние или в обвесе), а "0" - это всегда просто земля. 3. И вроде можно даже как-то чуть-чуть сэкономить энергопотребление, но это не точно(с).
Если вам попался модуль с управлением по активному нолю, то при установке пина в "1", реле будет обесточено, а когда "0" - включено. Самое простое в этой ситуации - инвертировать выход относительно входа. Есть два варианта:
- В коде строку digitalWrite(D4, pinValue); поменять на digitalWrite(D4, !pinValue);
- В приложении Blynk поменять местами "0" и "1" в настройках кнопки.
Есть и третий вариант: перекинуть L1 с контакта NO ("нормально разъединён") на контакт NC ("нормально замкнут"). В этом варианте (впрочем, как и остальных) желательно исходить из того режима, в котором реле большее количество времени будет обесточено.
Примеры:
- Кратковременно включающийся вентилятор (свет). Лучше подключить L1 к "NO".
- ненадолго отключающийся компрессор в аквариуме, нагреватель, итд. В этом случае лучше подключить нагрузку на "NC", тогда напряжение будет поступать на нагрузку при обесточенном реле.
После выбора контактов реле при необходимости корректируем управляющий уровень в коде.
FAQ
Через Интернет? А как же безопасность?
Во-первых, для каждого устройства выдается токен, который знаете только Вы.
Во-вторых, сервер blynk можно поднять локально. Об этом есть статья на официальном сайте (в том числе и для популярных одноплатных компьютеров).
При создании кнопки я заметил(а), что есть платные функции в виде покупки энергии для элементов управления
Всё верно. Разработчики хотят иметь прибыль от своего полезного и качественного продукта.
Но для использования виртуальных пинов через вебхуки элементы управления не требуются, т.е. приложение можно использовать только для получения токена и бесплатно.
Можно только по Wi-Fi?
Нет. Подключение может любым: Wi-Fi, Ethernet, и даже COM-порт через USB компьютера. Всё зависит от целей, задач и вида микроконтроллера.
Почему не использовать готовые решения?
10. Именно такая цифра - делитель стоимости подобных "готовых" устройств (в некоторых случаях меньше или больше, но какой смысл переплачивать, если с равными усилиями получается дешевле и веселее?)
Что еще можно сделать по этой технологии?
А что угодно!
- Управляемую подсветку (меняющую цвет, яркость, режимы работы);
- Сбор информации с самых разных датчиков (температура, влажность, давление);
- Умные выключатели и розетки;
- ИК-пульт (наподобие Яндекс.Пульта);
- Управление компьютером через Алису;
- Голосовое управление детскими игрушками;
- Сигнализацию с постановкой на охрану голосом (и проверкой статуса).
А считывать состояния Blynk умеет?
Да, ссылка на запрос состояния выглядит так:
https://blynk-cloud.com/<ваш_токен>/get/V0
Так же можно считывать и состояния датчиков, но это тема уже совсем другой статьи :)
Насколько это надежно? (Китай долго не проработает...)
Ардуино (в том числе китайские версии) прошли в массах не одну проверку температурой, влажностью и временем. Лично на моем опыте собранные устройства функционируют по сей день в течение 3 лет. Что называется, слепил - и забыл.
Кроме того, модульные сборки имеют преимущество перед "коробочными" в том, что любой модуль, датчик, реле и т.п. можно заменить (при этом недорого!) без вреда для всей схемы. Их намного легче размещать в ограниченном пространстве (в кастомных корпусах, или вообще без корпуса).
А главный плюс - любое устройство в любой момент можно свободно развивать по функционалу в зависимости от приходящих в голову идей - бесценен!