company_banner

Умная новогодняя ёлка

Автор оригинала: elciccio
  • Перевод
Мечтали ли вы когда-нибудь о том, чтобы включать и выключать гирлянду на новогодней ёлке, просто произнеся некие волшебные слова? Если так оно и есть — значит — эта статья написана специально для вас. Её автор хочет рассказать о том, как оснастить новогоднюю ёлку системой голосового управления.



Материалы


Аппаратные компоненты и инструменты:

  • Реле.
  • Espressif ESP8266 ESP-01.
  • Arduino UNO.
  • Макетная плата.
  • Блок питания для макетной платы.
  • Гирлянда для ёлки.
  • Соединительные провода.
  • Отвёртка.

Программы:


Обзор проекта


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

Вот схема проекта.


Схема проекта

Вот как выглядят компоненты проекта в сборе.


Система голосового управления ёлочной гирляндой

В ходе работы над проектом надо сначала собрать его аппаратную часть, а потом заняться настройкой программного обеспечения и подготовкой кода. Поговорим о настройке Blynk.

Настройка Blynk


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

Загрузим приложение Blynk на мобильное устройство (из Apple Store или из Google Play).

Войдём в приложение (для этого понадобится учётная запись; войти в приложение можно и с использованием Facebook-аккаунта).


Вход в приложение

Создадим новый проект (токен аутентификации будет отправлен на тот адрес электронной почты, который был использован для входа в систему).


Создание нового проекта

Выберем имя для проекта, укажем, в качестве устройства, Arduino Uno, а в качестве метода подключения — WiFi.


Настройка основных свойств проекта

Теперь, касанием экрана, вызовем меню. Нас интересует элемент Text Input.


Выбор элемента Text Input

Теперь надо коснуться элемента Text Input — появится экран, показанный ниже.


Настройка элемента Text Input

В поле Title можно ввести всё что угодно. В поле OUTPUT надо записать V0. Поле HINT оставим пустым, в поле CHARACTER LIMIT установим ограничение на количество символов, равное 20. 

На этом настройка Blynk завершена.

Теперь займёмся IFTTT.

Настройка IFTTT


Загрузите мобильное приложение IFTTT и войдите в него. Коснитесь кнопки Create. Теперь коснитесь кнопки Add в поле If This и найдите Google Assistant. Коснитесь соответствующего значка и выберите в появившемся списке первый пункт — Say a phrase with text ingredient — он позволяет настроить реакцию систему на фразу, содержащую ключевое слово.

В поле What do you want to say? я ввёл Google turn $ the lights. Символ $ — это ключевое слово. Если хотите — можете задать тут дополнительную фразу, но ключевое слово всегда должно быть одним и тем же. Затем надо указать ответ, который даст Google Assistant.

Далее, нужно выбрать язык (этот материал написан на английском — поэтому я выбрал тут English). Теперь коснёмся Continue и на появившемся после этого экране, в поле Then That, коснёмся Add и выполним поиск по ключевому слову Webhooks. Далее, коснёмся соответствующего значка и займёмся настройками раздела Make a web request.

Прежде чем это сделать — надо открыть командную строку на компьютере, который подключён к интернету, и ввести такую команду:

ping blynk-cloud.com

Далее, надо записать IP-адрес, который появится в выходных данных этой команды. Он, например, может выглядеть как 188.166.206.43. Это — адрес Blynk-сервера для вашей страны.

Теперь возвращаемся к настройкам приложения IFTTT. Здесь, в разделе Make a web request, в поле URL, нужно ввести такую конструкцию:

http://только что полученный IP-адрес/Токен аутентификации проекта Blynk/pin/V0

В поле Method надо выбрать PUT.

В поле Content Type надо выбрать application/json.

В поле Body надо поместить следующую конструкцию:

["{{TextField}}"]

Теперь надо коснуться кнопки Continue, задать заголовок действия и завершить настройку. После этого IFTTT будет готов к работе.

Код


Вот код нашего проекта, предназначенный для Arduino:

#define BLYNK_PRINT Serial
#define EspSerial Serial1

#include <SoftwareSerial.h>
#include <SPI.h>
#include <ESP8266_Lib.h>
#include <BlynkSimpleShieldEsp8266.h>

// Токен аутентификации надо получить в приложении Blynk.
char auth[] = "yourAuthToken";

// Данные для подключения к WiFi.
// Установите пароль в "" для открытых сетей.
char ssid[] = "YourSSID";
char pass[] = "YourPassword";

SoftwareSerial EspSerial(2, 3); // RX, TX ESP8266

String s;    // для хранения получаемых ключевых слов

BLYNK_WRITE(V0)     // будет запускаться каждый раз, когда приложение Blynk отправляет строку
{
  s=param.asStr();
  Serial.print(s); //Строка, отправленная приложением Blynk, будет выведена в Serial Monitor
   if(s=="on")
  {
    digitalWrite(7, HIGH);       //Пин 7 установлен в setup()
  }
  else if(s=="off")
  {
    digitalWrite(7, LOW);
  }
  else{
    Serial.print("Say on or off");
  }
}
// Скорость ESP8266 в бодах:
#define ESP8266_BAUD 9600

ESP8266 wifi(&EspSerial);

void setup()
{
  // Отладочная консоль
  Serial.begin(9600);
  pinMode(7, OUTPUT);       //Pin 7 установлен в режим вывода данных
  // Установим скорость в бодах для ESP8266
  EspSerial.begin(ESP8266_BAUD);
  delay(10);
 
  Blynk.begin(auth, wifi, ssid, pass);
}

void loop()
{
  Blynk.run();
}

Обратите внимание на этот фрагмент кода:

if(s=="on")
…
 else if(s=="off")
…

Если изменить фразу (и ключевое слово) — нужно поменять и текстовые значения, используемые в этом фрагменте. А именно, ключевое слово, включающее гирлянду, надо поместить туда, где сейчас находится строка on, а выключающее — туда, где сейчас находится строка off.

Поясню это на примере. Предположим, я решил использовать для управления гирляндой такую фразу:

I am $

Для включения гирлянды решено использовать слово happy, для выключения — слово sad. Это значит, что вышеприведённый код нужно будет переписать так:

if(s=="happy")
…
 else if(s=="sad")
…

Код нужно загрузить на Arduino UNO, запустить проект Blynk, открыть Google Assistant и попросить его включить гирлянду.

Планируете ли вы воспользоваться Blynk, IFTTT и Google Assistant в своих проектах?

RUVDS.com
VDS/VPS-хостинг. Скидка 10% по коду HABR

Комментарии 17

    +7
    Здесь хватило бы ESP-01, реле и бп.
    Даже взять готовое
    image

    Blynk выкинуть, управлять простыми get запросами.
    Это было бы красиво, удобно, интересно.
    Имхо.

      +2

      Согласен, цепочка из Гугл-IFTTT-Blynk явно переусложненная. По хорошему нужно оставить только гугл, а идеальный вариант — локальный TTS

      +4
      Мечтали ли вы когда-нибудь о том, чтобы включать и выключать гирлянду на новогодней ёлке, просто произнеся некие волшебные слова?

      Пха! Да любой ребенок знает, что достаточно произнести «Раз, два, три- ёлочка гори» — и вуаля! На всех новогодних утренниках это работает.

      P.S. Ну и, как всегда — «схема» из цветных полосок. Что там за реле? Какой блок питания? Как подключить, если в наличии таких нет? Даже фото ниже отличается от этой «схемы».
        +1

        Ну или воспользоваться проектом WLED.

          +3

          Умная она была бы если бы она как минимум сама понимала, когда надо включаться-выключаться или пела песенки в зависимости от того взрослые в комнате или дети, а так это просто голосовое управление гирлянды. Давайте уже перестанем управление с телефона или голосом называть умным чем-нибудь.

            0
            Давайте уже перестанем управление с телефона или голосом называть умным чем-нибудь.
            Ваши бы слова — да богу в уши.
            +4
            Мечтали ли вы когда-нибудь о том, чтобы включать и выключать гирлянду на новогодней ёлке, просто произнеся некие волшебные слова?

            В последние годы я и такие как я больше всего мечтали, чтобы елка сама себя на мусорку выносила после праздников.
              +2
              Эм, пользуясь случаем, никому елка не нужна? Почти новая, недорого, самовынос...)
                +1
                Да уж)
                0
                Блин, голосовые ассистенты на мобилках никого не удивляют, а тут — гирлянда какая-то. Эка невидаль…
                  +1

                  Вот суровая новогодняя елка :) без голосового правда, но и это при желании можно.


                    0
                    Красиво. Но корреляции с музыкальным сопровождением нет. А хотелось бы ;-)
                      0

                      Ну тут чисто дискретное исполнение, для звука это уже будет другая история :)

                    +1
                    лучше внедрить у неё функцию самоликвидации
                      0
                      Ну, я воткнул обычную гирлянду в Xiaomi SmartPlug, перебросил сценарий в HomeKit, и настроил автоматизацию в стиле если я ушел из квартиры (включил охрану) то вырубайся, и также вырубайся после комплексного сценария «Спокойной ночи» (Моторизованые шторы, охрана, освещение + гирлянда). А тут как то переусложнено. Все таки самой гирляндой упралять баловство, выставил приятный режим и хватит
                        0
                        Идея конечно неплохая, особенно при отсутствии Blynk. Но мне кажется, тут все-таки слишком намудрено. Зачем изобретать велосипед, когда можно просто купить «умную розетку» и подключить ее к Алисе (которая и по-русски лучше гугла соображает)?
                          0
                          nnnmn

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

                          Самое читаемое