Алиса, Ардуино и 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 - нажали, отпустили, пин останется включенным и наоборот (принцип выключателя).
-
Добавляем кнопку
-
Новая кнопка
-
Выбираем пин
-
Пин V0 включен
Подключаем умный выключатель к УДЯ с помощью webhooks
Для подключения нашего выключателя будем использовать уже имеющийся навык УД "Домовенок Кузя".
Для этого переходим на сайт автора навыка и авторизируемся с помощью учетной записи Яндекс.
Выбираем кнопку "Добавить правило GET".
Заполняем "по вкусу". При этом не забываем в поле "URL управления устройством, доступный из интернета" вставить ссылку на наш вебхук.
Создаем 2 правила 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 лет. Что называется, слепил - и забыл.
Кроме того, модульные сборки имеют преимущество перед "коробочными" в том, что любой модуль, датчик, реле и т.п. можно заменить (при этом недорого!) без вреда для всей схемы. А главный плюс - любое устройство можно свободно развивать по функционалу в зависимости от приходящих в голову идей - бесценен!