Автоматизация дома на ESP8266 и приложении Android с голосовым управлением

В данной статье мы рассмотрим создание системы автоматизации дома (системы "умного" дома) на основе модуля ESP8266 и приложения Android, управление домашними устройствами в которой можно будет осуществлять с помощью голосовых команд. Данная статья является продолжением нашего предыдущего проекта автоматизации дома – умной распределительной коробки на основе ESP8266, с помощью которой можно управлять домашними устройствами с веб-страницы через сеть Интернет. В данном проекте мы будем делать примерно то же самое, но в него добавлена возможность управления домашними устройствами с помощью голосовых команд. Данный функционал в проекте реализован на основе приложения Android для смартфона – благодаря этому отпадает необходимость в использовании достаточно дорогих голосовых модулей.

Внешний вид системы автоматизации дома на ESP8266 и приложении Android с голосовым управлением

Создание всего этого проекта его автору (ссылка на оригинал приведена в конце статьи) обошлось в сумму всего около 8 USD, что, конечно же, очень дешево для создания системы с такими потрясающими возможностями. Также данный проект практически не зависит от используемого микроконтроллера (платы), вместо модуля ESP8266 вы можете использовать в нем плату Arduino или плату Raspberry Pi (конечно, схема и программа проекта в некоторой степени изменятся, но основные его принципы останутся теми же самыми).

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

Необходимые компоненты

  1. Модуль ESP8266 (купить на AliExpress).
  2. Плата FTDI (для программирования модуля) (купить на AliExpress).
  3. Реле на 3V 5A – 2 шт.
  4. Модуль преобразования AC-DC 5V/700mA или более (купить на AliExpress).
  5. Транзистор BC547 – 2 шт. (купить на AliExpress).
  6. Регулятор напряжения LM317 (купить на AliExpress).
  7. Резисторы 220 и 360 Ом (купить на AliExpress).
  8. Конденсаторы 0,1 мкФ (купить на AliExpress) и 10 мкФ (купить на AliExpress).
  9. Диод 1N007 – 2 шт.
  10. Распределительная коробка.
  11. Соединительные провода.

Принципы работы проекта

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

В проекте умной распределительной коробки на основе ESP8266 мы управляли двумя реле с веб-страницы, созданной модулем ESP8266. В этом же проекте мы будем управлять ими с помощью голосовых команд со смартфона – изменится только эта часть проекта, а схема и программа проекта останутся практически без изменения.

Для того, чтобы получить возможность удаленного голосового управления реле в нашем проекте, нам необходимо сделать IP адрес, назначенный модулю ESP8266, публично доступным. Это можно сделать с помощью технологии перенаправления порта (Port forwarding). Также вам необходимо будет установить приложение “Moni” на свой смартфон – оно будет распознавать вашу речь и передавать информацию IFTT апплетам, которые будут управлять вашими домашними устройствами с помощью веб-хуков (Maker Web hooks).

Все эти вещи будут достаточно подробно объяснены в данной статье. Также в конце данной статьи приведено видео, в котором вы более наглядно можете посмотреть все эти процессы.

Также на нашем сайте вы можете посмотреть другие проекты, в которых использовалось голосовое управление какими либо устройствами:

Отличия в программе от предыдущего проекта

Также, как и в предыдущем проекте автоматизации дома, мы будем программировать наш модуль ESP8266 с помощью Arduino IDE. Но по сравнению с предыдущим проектом в программу необходимо будет внести небольшие изменения. Эта модификация будет заключаться в том, что модуль ESP8266 каждый раз при установлении соединения с роутером будет подключаться к одному и тому же (постоянному) IP адресу. Таким образом, по сравнению с программой предыдущего проекта в программу данного проекта необходимо будет добавить следующие строчки кода:

В коде этой части программы введите вместо ip(192, 168, 0, 104) необходимый вам IP адрес. В нашем случае модуль ESP был постоянно подключен к адресу 192.168.0.104 и автор проекта мог получить доступ к нему в любое время, вводя этот адрес в строке браузера. Полный код программы проекта приведен в конце данной статьи.

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

Схема проекта автоматизации дома с голосовым управлением на ESP8266 представлена на следующем рисунке.

Схема проекта автоматизации дома с голосовым управлением на ESP8266Подробно работа данной схемы объяснена в статье про умную распределительную коробку на основе ESP8266, поэтому здесь на данном вопросе останавливаться не будем.

Собранная на перфорированной плате конструкция проекта с подключенным модулем ESP8266 и без него показана на следующих рисунках.

Собранная на перфорированной плате конструкция проекта

Собранная на перфорированной плате конструкция проекта с подключенным модулем ESP8266

Перенаправление порта для IP адреса ESP8266

Первым шагом при создании данного проекта вам необходимо настроить перенаправление порта (Port forwarding) в вашем роутере (модеме), чтобы у вас был доступ к вашему модулю ESP8266 по публичному IP из любой точки земного шара. Всегда, когда ваш модуль ESP8266 будет подключаться к вашему роутеру, ему всегда будет назначаться уникальный IP адрес (Unique IP address) и с помощью этого IP адреса можно будет получать доступ к модулю ESP8266 через браузер. Этот IP адрес будет ограничен вашей домашней сетью – это означает, что к нему могут подключаться только устройства, находящиеся в вашей сети (подключенные к вашему роутеру) и не могут подключаться устройства, находящиеся за ее пределами. То есть этот IP адрес не будет глобальным. Технология перенаправления порта (Port forwarding) позволяет сделать этот адрес глобальным и доступ к веб-странице нашего проекта можно будет осуществлять из любой точки Земли.

Для настройки перенаправления порта вам необходимо будет узнать следующую информацию:

  1. Название производителя и IP адрес вашего роутера (Router). Обычно эта информация располагается на наклейке снизу роутера.
  2. Имя пользователя (username) и пароль (password) от страницы логина вашего роутера. Для большинства роутеров в качестве имени пользователя данной страницы используется “admin”, а в качестве пароля – то же “admin”.
  3. IP адрес, назначенный вашему модулю ESP8266. Этот адрес используется для доступа к веб-странице, созданной модулем ESP8266.
  4. IP адрес вашего интернет провайдера (публичный IP) – это можно узнать с помощью соответствующих веб-сервисов, например, “what is my IP”.

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

Примечание: автор проекта использовал роутер от компании TP-Link и дальнейшие шаги описаны для него. Эти же шаги подойдут и для большинства других роутеров, но картинки для них могут немного отличаться от тех, которые показаны далее в статье.

Шаг 1. Зайдите в панель управления своим роутером, введя в строке адреса браузера его IP адрес, для большинства роутеров используется адрес 192.168.1.1.

Страница для входа в панель управления роутером

Шаг 2. Введите имя пользователя и пароль чтобы войти в панель управления роутером. По умолчанию они равны “admin” и “admin”. После этого вы попадете в панель управления роутером, которая будет выглядеть примерно следующим образом.

Внешний вид панели управления роутером

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

Шаг 3. В панели настроек нам необходимо найти пункт “Virtual Servers” или похожий на него. У нас этот пункт находился в пункте Forwarding, который располагается под пунктом DHCP. Для большинства роутеров этот пункт будет располагаться примерно в этом же самом месте.

Открытие вкладки для настройки перенаправления порта

Шаг 4. На этом шаге вам необходимо ввести IP адрес, назначенный вашему модулю ESP и номер порта (port number), куда перенаправлять наш IP. В нашем случае чтобы ввести все это мы нажали на кнопку "Add new", после чего ввели все эти данные. У вас это может выглядеть немного по другому.

IP адрес на данном шаге – это адрес, который используется для доступа к веб-странице вашего модуля ESP. Номер порта можете ввести любой, но в целях упрощения работы рекомендуем указать для него значение “80”. В нашем случае IP адрес, назначенный нашему модулю ESP8266, равен 192.168.0.104, поэтому наша страница настроек на данном шаге выглядит следующим образом:

Настройка перенаправления порта в панели управления роутером

Шаг 5. Теперь нам необходимо узнать наш публичный (общедоступный) IP. Вы можете определить его в интернете с помощью сервисов типа “What is my IP”. Но ваш ISP IP (IP адрес, выданным вам провайдером интернета) храните в строгом секрете и не сообщайте его никому. Чтобы продемонстрировать возможности проекта, далее в статье мы в качестве ISP IP будем использовать IP адрес 987:654:321:123.

Примечание: ваш провайдер (ISP) может обеспечивать вам статическим или динамическим IP. Если он предоставляет вам динамический IP адрес, то этот адрес будет меняться при каждом перезапуске роутера/модема. В этом случае вам необходимо использовать сервис подобный DynDNS (но в данной статье мы не будем рассматривать данный момент). В любом случае, динамический IP будет у вас успешно работать для нашего проекта до тех пор пока вы не произведете сброс своего роутера.

Чтобы проверить что перенаправление порта у нас успешно работает, необходимо ввести в строке браузера значение ISP IP: portname (к примеру, 987:654:321:123:80, где 80 – это номер порта) и проверить загружается ли веб-страница с нашего модуля ESP. Если все работает корректно, то используя ISP IP адрес вы сможете из любой точки интернета управлять домашними устройствами в нашем проекте.

Установка приложения для Android

Moni – это приложение, доступное для Android, Windows, iTunes и даже Skype. Вы можете скачать его на свой смартфон. Moni.ai имеет значительно больше возможностей чем просто ответы на ваши голосовые команды, оно крайне "дружественно" по отношению к разработчикам и позволяет соединяться с различными сервисами. Moni.ai использует приложение под названием Node-Red, с помощью которого вы можете легко создать голосовой канал (Voice channel) и создать своего собственного чат-бота для какого либо бизнес проекта. При этом приложение Moni абсолютно бесплатно для некоммерческого использования.

Автор проекта использовал смартфон на Android и с его помощью скачал приложение Moni из магазина Play Market. После установки приложения создайте себе в нем бесплатный аккаунт и залогиньтесь в нем, после этого на экране смартфона вы должны увидеть примерно следующую картину:

Внешний вид приложения Moni

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

Примечание от автора перевода: не смог найти в Play Store точный аналог приложения, которое использовал автор данного проекта. Возможно, подойдет любое другое приложение, поддерживающее возможность управления голосом. Если вы знаете подобное проверенное приложение, просьба отписаться об этом в комментариях к данной статье.

Создание апплетов в сервисе IFTTT

Мы уже в одном шаге от завершения проекта. Все, что нам осталось сделать – это создать апплеты (Applets, специальные небольшие приложения) в сервисе IFTTT. Это сервис, с помощью которого мы будем давать инструкции приложению Moni по поводу того, как ему реагировать на различные голосовые команды и какие домашние устройства при этом нужно включать/выключать.

Для демонстрации работы проекта его автор использовал управляемую голосом распределительную коробку (Voice controlled Junction box) чтобы включать/выключать устройства в своем аквариуме (свет/фильтр). Все это вы можете посмотреть в видео, приведенном в конце статьи. Поэтому он и настроил (кастомизировал) свои апплеты под эти задачи – вы можете по аналогии настроить их для ваших задач.

Для создания апплетов в сервисе IFTTT выполните следующую последовательность шагов:

Шаг 1. Перейдите на сайт http://www.ifttt.com/ и войдите на нем в свой аккаунт. Создайте себе аккаунт в этом сервисе если у вас его еще нет.

Шаг 2. Нажмите на Search” и выполните поиск Make Webhooks (создание веб-хуков). Выберите его и нажмите на “Connect”. Выполните шаги чтобы подключиться.

Шаг 3. Снова нажмите на “Search” и выполните поиск Moni. Выберите Moni и нажмите на “Connect”. Войдите в свой аккаунт IFTTT чтобы осуществить соединение.

Шаг 4. Итак, мы подключились к сервисам “Maker Webhooks” и “Moni”. Теперь создадим апплеты с этими сервисами. Нажмите на "My Applets" и затем на “New Applet” (новый апплет). После этого вы должны увидеть следующую картину:

Создание нового апплета в сервисе IFTTT

В этом окне вам необходимо нажать на “this” и выбрать “Moni”. Затем нажать на “Ask Moni to perform an action” (попросить Moni выполнить действие), после чего вас перебросит на следующий экран.

Создание необходимого действия в сервисе IFTTT

Шаг 5. Заполните детали предполагаемого действия. Автор проекта назвал это действие “Turn on Aquarium Lights”. Потом нажмите на “Create Trigger” (создать триггер).

Шаг 6. После этого вас снова перебросит на экран “IF THIS THAN THAT”. Теперь нажмите на “that”, напечатайте “Maker Webhooks” и выберите его. Затем нажмите на “Make a web request” (создать веб-запрос). В результате этого вас перебросит на следующий экран.

Создание веб-запроса для нашего проекта в сервисе IFTTT

Это важный шаг, на котором многие совершают ошибки. На этой странице вам необходимо ввести URL, который вы хотите загрузить. В нашем случае мы хотим включить нагрузку, подключенную к переключателю 1 (switch1), следовательно, в этом случае необходимо использовать строку http://987:654:321:123/switch1On, в которой вам необходимо заменить наш публичный IP на свой публичный IP адрес. Это будет работать только если вы будете использовать код программы из нашего предыдущего аналогичного проекта. Полный список URL для включения/выключения наших нагрузок в этом случае выглядит следующим образом:

URL Ключевые слова в программе Действие
http://987:654:321:123/switch1On Switch1On на GPIO_0 подается high, включение нагрузки 1
http://987:654:321:123/switch1Off Switch1Off на GPIO_0 подается low, выключение нагрузки 1
http://987:654:321:123/switch2On Switch2On на GPIO_2 подается high, включение нагрузки 2
http://987:654:321:123/switch2Off Switch2Off на GPIO_2 подается low, выключение нагрузки 2

После того как вы ввели необходимые URL нажмите на “Create action”. Затем нажмите на Finish. Аналогичным образом вы можете создать 4 апплета для включения/выключения (ON/OFF) обоих домашних устройств в нашей распределительной коробке.

Когда созданный вами апплет будет готов к выполнению действий он должен появиться на вкладке “My applets” как показано на следующем рисунке.

Список созданных нами апплетов в сервисе IFTTT

Когда аппаратная и программная части будет готовы можно приступить к тестированию проекта. Запустите приложение Moni на своем мобильном телефоне. Нажмите на иконку микрофона и произнесите необходимую вам команду. В нашем случае это команда “Turn on Aquarium Lights” (включить свет в аквариуме). Приложение должно ответить “OK” и включить свет в аквариуме. Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.

Исходный код программы (скетча)

Видео, демонстрирующее работу проекта

Источник статьи

(Проголосуй первым!)
Загрузка...
46 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *