Алиса, Ардуино и Blynk - делаем собственное устройство

Материал из База знаний
Перейти к навигации Перейти к поиску



На данной странице размещена инструкция по простому подключению ардуиноподобных устройств, имеющих доступ к сети. Обязательно пригодится тем, кто:

  • любит "дешево и сердито";
  • не любит готовые решения, и предпочитает мозговой штурм и пайку;
  • еще думает над своей концепцией УД (можно использовать, как пример);
  • кто "в теме", но пока имеет сложности с подключением собственных наработок к Умному дому Яндекса.

Итак, начнем...


Что такое blynk?

Это облачное решение, созданное украинскими разработчиками для удалённого управления различными микроконтроллерами, с помощью мобильных устройств.

  • Обширный список поддерживаемых устройств;
  • Множество вариантов управления;
  • Широкий набор инструментов;
  • Огромный плюс - Example Code Builder, позволяющий сгенерировать нужный код с минимальными правками и знаниями в программировании.

Чтобы понять принцип работы с Blynk, а заодно рассмотреть принцип подключения Arduino к УДЯ, соберём пример управляемого реле, имитирующее... Яндекс.Розетку.


Собираем "умный" выключатель

Нам понадобится:

  1. NodeMcu V3 (или любой другой МК из списка поддерживаемых устройств);
  2. Одноканальное реле;
  3. Паяльник или макетная плата;
  4. Немного тонкого провода;
  5. Прямые руки.


Соединяем по схеме:


Схема подключения реле


Пин NodeMcu Пин реле
VCC VCC
GND GND
D4 IN


Не рекомендуется подключать Реле в разрыв питания L и L1 до момента полной сборки!

А также:

Высокое напряжение!!! Опасность поражения током.
 
Не повторяйте эти действия, если не обладаете нужными знаниями и природной осторожностью.
Телефон вызова экстренных служб - 112.


Итак, blynk...

  1. Скачиваем официальное приложение blynk из GooglePlay или AppStore.
  2. Регистрируемся в приложении (рис. 1)
  3. Создаём новый проект (рис. 2)
  4. Важно правильно выбрать микроконтроллер (рис. 3)
  5. Появится пустая страница для элементов управления (рис. 4), а на адрес электронной почты придёт token от нашего проекта в blynk, который мы будем использовать для управления через webhook.



Подготовка Arduino IDE и прошивка

  1. Загружаем и устанавливаем Arduino IDE.
  2. Скачиваем библиотеки Blynk для работы с сервисом.
  3. Распаковываем скачанное в папку с библиотеками Arduino IDE (обычно это C:\Users\<Текущий пользователь>\Documents\Arduino\).
  4. Переходим к утилите Blynk Example Browser, выбираем/указываем:
    • микроконтроллер,
    • способ подключения,
    • token
    • пример скетча (в данном случае Virtual Pin Read).
  5. Копируем полученный код в Arduino IDE.
  6. В примере вводим фактическое название нашей 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

  1. Вернёмся к созданному ранее проекту и добавим простую кнопку с помощью иконки "+" в верхнем правом углу приложения.
  2. Выберем в открывшемся меню "Button" и разместим, где удобней.
  3. Зададим виртуальный пин, управлять которым мы будем этой кнопкой. Для этого просто тапнем по созданной кнопке.
  4. По желанию называем кнопки, задаём цвет и текст, для включенного и выключенного состояний.
  5. Тип "Push<>Switch" (кнопка или переключатель). Push - нажали и отпустили, пин выключился. Switch - нажали и отпустили, пин запомнил состояние.



Подключаемся методом webhooks к Умному дому Яндекса

Кузя

Будем использовать хорошо зарекомендовавший себя навык УД "Домовенок Кузя". Для этого:

  1. Переходим на сайт навыка и авторизуемся там с помощью учетной записи Яндекс.
  2. Выбираем кнопку "Добавить правило GET".
  3. Заполняем "по вкусу". Можно похулиганить и дать устройству имя "Розетка Яндекс".
  4. Не забываем в поле "URL управления устройством, доступный из интернета" вставить ссылку на наш вебхук.
  5. Создаём ВТОРОЕ правило GET - одно на включение устройства, второе - на его выключение.
  6. Выбираем кнопку "Виртуальные устройства умного дома" и создаем новое устройство (у меня лучше всего работают "лампы").
  7. Указываем ранее созданные "Правило на включение" и "Правило на выключение".
  8. Задаем имя устройства и комнату, в которой оно находится.

Приложение "Яндекс"

В приложении "Яндекс" (раздел "Устройства") находим навык "Домовенок Кузя". При первом запуске навык попросит авторизоваться. После авторизации нажимаем единственную кнопку "Обновить список устройств". Готово! После загрузки мы увидим наше устройство в списке.

Осталось сказать "Алиса, включи Розетку Яндекс" и услышать радостное пощелкивание реле.


Важный нюанс по управлению через 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 ("нормально замкнут"). В этом варианте (впрочем, как и остальных) желательно исходить из того режима, в котором реле большее количество времени будет обесточено.

Примеры:

  1. Кратковременно включающийся вентилятор (свет). Лучше подключить L1 к "NO".
  2. ненадолго отключающийся компрессор в аквариуме, нагреватель, итд. В этом случае лучше подключить нагрузку на "NC", тогда напряжение будет поступать на нагрузку при обесточенном реле.

После выбора контактов реле при необходимости корректируем управляющий уровень в коде.


FAQ

Через Интернет? А как же безопасность?

Во-первых, для каждого устройства выдается токен, который знаете только Вы.

Во-вторых, сервер blynk можно поднять локально. Об этом есть статья на официальном сайте (в том числе и для популярных одноплатных компьютеров).


При создании кнопки я заметил(а), что есть платные функции в виде покупки энергии для элементов управления

Всё верно. Разработчики хотят иметь прибыль от своего полезного и качественного продукта.

Но для использования виртуальных пинов через вебхуки элементы управления не требуются, т.е. приложение можно использовать только для получения токена и бесплатно.


Можно только по Wi-Fi?

Нет. Подключение может любым: Wi-Fi, Ethernet, и даже COM-порт через USB компьютера. Всё зависит от целей, задач и вида микроконтроллера.


Почему не использовать готовые решения?

10. Именно такая цифра - делитель стоимости подобных "готовых" устройств (в некоторых случаях меньше или больше, но какой смысл переплачивать, если с равными усилиями получается дешевле и веселее?)


Что еще можно сделать по этой технологии?

А что угодно!

  • Управляемую подсветку (меняющую цвет, яркость, режимы работы);
  • Сбор информации с самых разных датчиков (температура, влажность, давление);
  • Умные выключатели и розетки;
  • ИК-пульт (наподобие Яндекс.Пульта);
  • Управление компьютером через Алису;
  • Голосовое управление детскими игрушками;
  • Сигнализацию с постановкой на охрану голосом (и проверкой статуса).


А считывать состояния Blynk умеет?

Да, ссылка на запрос состояния выглядит так:

https://blynk-cloud.com/<ваш_токен>/get/V0


Так же можно считывать и состояния датчиков, но это тема уже совсем другой статьи :)


Насколько это надежно? (Китай долго не проработает...)

Ардуино (в том числе китайские версии) прошли в массах не одну проверку температурой, влажностью и временем. Лично на моем опыте собранные устройства функционируют по сей день в течение 3 лет. Что называется, слепил - и забыл.

Кроме того, модульные сборки имеют преимущество перед "коробочными" в том, что любой модуль, датчик, реле и т.п. можно заменить (при этом недорого!) без вреда для всей схемы. Их намного легче размещать в ограниченном пространстве (в кастомных корпусах, или вообще без корпуса).


А главный плюс - любое устройство в любой момент можно свободно развивать по функционалу в зависимости от приходящих в голову идей - бесценен!

Источник — https://wiki.yaboard.com/index.php?title=Алиса,_Ардуино_и_Blynk_-_делаем_собственное_устройство&oldid=3264// MOD ext links // End MOD