Алиса, Ардуино и Blynk - делаем собственное устройство
Содержание
- 1 Что такое blynk?
- 2 Собираем "умный" выключатель
- 3 Итак, blynk...
- 4 Подготовка Arduino IDE и прошивка
- 5 Способы управления через Blynk
- 6 Подключаемся с помощью webhooks к Умному Дому Яндекса
- 7 Нюансы
- 8 Предполагаемые вопросы
- 8.1 Через Интернет? А как же безопасность?
- 8.2 При создании кнопки я заметил(а), что есть платные функции в виде покупки энергии для элементов управления
- 8.3 Можно только по Wi-Fi?
- 8.4 Почему не использовать готовые решения?
- 8.5 Что еще можно сделать исходя из представленных в статье сервисов и возможностей?
- 8.6 Насколько это надежно? (Китай долго не проработает...)
На данной странице размещена инструкция по простому подключению ардуиноподобных устройств, имеющих доступ к сети. Обязательно пригодится тем, кто:
- любит "дешево и сердито";
- не любит готовые решения, и предпочитает мозговой штурм и пайку;
- еще думает над своей концепцией УД (можно использовать, как пример);
- кто "в теме", но пока имеет сложности с подключением собственных наработок к Умному дому Яндекса.
Итак, начнем...
Что такое 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.
-
1. Регистрация
-
2. Создание проекта
-
3. Выбор устройства
-
4. Окно для элементов управления
Подготовка 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 пропустим; к тому же подобную информацию всегда нетрудно найти.
Наш выключатель готов к работе!
Способы управления через Blynk
На данный момент есть два варианта управлять пином:
С помощью вебхуков
http://blynk-cloud.com/<ваш_токен>/update/V0?value=1 - для замыкания реле http://blynk-cloud.com/<ваш_токен>/update/V0?value=0 - для размыкания реле
С помощью мобильного приложения blynk
- Вернёмся к созданному ранее проекту и добавим простую кнопку с помощью иконки "+" в верхнем правом углу приложения.
- Выберем в открывшемся меню "Button" и разместим, где удобней.
- Зададим виртуальный пин, управлять которым мы будем этой кнопкой. Для этого просто тапнем по созданной кнопке.
- По желанию называем кнопки, задаём цвет и текст, для включенного и выключенного состояний.
- Тип "Push<>Switch" (кнопка или переключатель). Push - нажали и отпустили, пин выключился. Switch - нажали и отпустили, пин запомнил состояние.
-
1. Добавляем кнопку
-
2. Новая кнопка
-
3. Выбираем пин
-
4. Пин V0 включен
Подключаемся с помощью webhooks к Умному Дому Яндекса
Будем использовать хорошо зарекомендовавший себя навык УД "Домовенок Кузя". Для этого:
- Переходим на сайт навыка и авторизуемся там с помощью учетной записи Яндекс.
- Выбираем кнопку "Добавить правило GET".
- Заполняем "по вкусу".
- Не забываем в поле "URL управления устройством, доступный из интернета" вставить ссылку на наш вебхук.
- Создаём ВТОРОЕ правило GET - одно на включение устройства, второе - на его выключение.
- Выбираем кнопку "Виртуальные устройства умного дома" и создаем новое устройство (у меня лучше всего работают "лампы").
- Указываем ранее созданные "Правило на включение" и "Правило на выключение".
- Задаем имя устройства и комнату, в которой оно находится.
-
Правило на включение
-
Правило на выключение
-
Создаем устройство
Переходим к настройке УДЯ.
Для этого в разделе "Устройства" Яндекс.Поиска находим навык "Домовенок Кузя". При первом запуске, навык попросит авторизоваться. После авторизации нажимаем единственную кнопку "Обновить список устройств".
После загрузки увидим наше устройство в списке.
-
Выбираем навык "Домовенок Кузя"
-
Жмём кнопку
Вот и всё. Осталось сказать Алисе "Включи Яндекс Розетку" и услышать радостное пощелкивание реле.
Нюансы
- Представленное в статье реле имеет свойство. Благодаря внимательным китайцам, реле работает "наоборот", т.е. когда на пине 1, реле выключено, а когда 0 - включено. Если так, то можно:
- В строке кода digitalWrite(D4, pinValue); перед pinValue поставить !, т.е. получится digitalWrite(D4, !pinValue); - В приложении Blynk поменять местами 0 и 1 в настройках кнопки - Провод L1 перенести в нижний коннектор реле
- Blynk умеет считывать состояния пинов, но я в это не вникал. Ссылка на запрос:
http://blynk-cloud.com/<ваш_токен>/get/V0
Также можно считывать состояние датчиков, но это уже тема новой статьи :)
Предполагаемые вопросы
Через Интернет? А как же безопасность?
Во-первых, для каждого устройства выдается токен, который знаете только Вы. Во-вторых, сервер blynk можно поднять локально. Об этом есть статья на официальном сайте (в том числе и для популярных одноплатных компьютеров).
При создании кнопки я заметил(а), что есть платные функции в виде покупки энергии для элементов управления
Всё верно. Разработчики хотят иметь прибыль от своего полезного и качественного продукта.
Но для использования виртуальных пинов через вебхуки элементы управления не требуются, т.е. приложение можно использовать только для получения токена и бесплатно.
Можно только по Wi-Fi?
Нет. Подключение может любым: Wi-Fi, Ethernet, и даже COM-порт через USB компьютера. Всё зависит от целей, задач и вида микроконтроллера.
Почему не использовать готовые решения?
10: именно такая цифра - делитель стоимости подобных "готовых" устройств (в некоторых случаях меньше или больше, но смысл переплачивать, если с равными усилиями получается дешевле и веселее).
Что еще можно сделать исходя из представленных в статье сервисов и возможностей?
А что угодно!
- Управляемую подсветку (меняющую цвет, яркость, режимы работы);
- Сбор информации с самых разных датчиков (температура, влажность, давление);
- Умные выключатели и розетки;
- ИК-пульт (наподобие Яндекс.Пульта);
- Управление компьютером через Алису;
- Голосовое управление детскими игрушками;
- Сигнализацию с постановкой на охрану голосом (и проверкой статуса).
Насколько это надежно? (Китай долго не проработает...)
Ардуино (в том числе китайские версии) прошли в массах не одну проверку температурой, влажностью и временем. Лично на моем опыте собранные устройства функционируют по сей день в течение 3 лет. Что называется, слепил - и забыл.
Кроме того, модульные сборки имеют преимущество перед "коробочными" в том, что любой модуль, датчик, реле и т.п. можно заменить (при этом недорого!) без вреда для всей схемы. А главный плюс - любое устройство можно свободно развивать по функционалу в зависимости от приходящих в голову идей - бесценен!