Алиса и обучаемый ИК-пульт DIY
Материал носит информационный характер, и не является прямым указанием к действию!
Вступление
Сегодня будем собирать собственный, и даже почти обучаемый ИК-пульт :) Автор назвал его "НеЯндекс.Пульт", и дальнейший текст основан на его оригинальной инструкции.
Преимущества DIY-решения очевидны:
- Гибкая настройка (программирование) всего, что только можно;
- Произвольные последовательности команд на один и более передатчиков;
- "Индивидуальные" пульты (излучатель светит "в упор" в глазок нужного устройства, чтобы не возникало коллизий с другими);
- Возможность разместить пульт в любой корпус (включая корпус самого принимающего устройства);
- Отличный способ провести время и подтянуть скиллы.
Конечно, придётся немного потрудиться. Для сборки нам понадобятся:
- NodeMCU (автор брал здесь)
- Модуль ИК-приёмника (автор использовал этот)
- Модуль ИК-излучателя (например, модуль из примера уже содержит драйвер, и их можно подключить сразу несколько штук на один пин без дополнительного обвеса и повернуть во все нужные стороны)
- Источник стабилизированного (желательно, чтобы избежать проблем) питания
Считываем оригинальные коды
Наши первые действия - сбор информации с пультов. Для этого:
- Собираем ИК-приёмник по схеме 1.
- Прошиваем NodeMCU кодом PULT_resv.ino (см. ниже)
- В ArduinoIDE открываем "Монитор порта", наводим пульт-оригинал (от ТВ/люстры/кондиционера) на наш приёмник, жмём нужную кнопку.
В мониторе побегут одинаковые строки с числами типа 807F00FF. Это и есть код, переданный при нажатии кнопки.
По очереди записываем нужные коды в блокнот, сразу с названиями кнопок. А чтобы не вставать два раза(тм), считаем все кнопки со всех пультов, которые планируем использовать.
Повелеваем устройствами
Первая часть завершена! Схему приёмника можно разобрать, или оставить на будущее), а сейчас:
- Собираем пульт по схеме 2.
- Прошиваем код PULT_send.ino, перед этим немного изменив код:
- заполним char auth[]=, char ssid[]= и char pass[]= своими значениями (ориентируясь на подсказки в комментариях).
- пропишем виртуальные пины.
Действие-реакция на изменение состояния каждого отдельного пина представляет типовой блок:
BLYNK_WRITE(V0) { //виртуальный пин 0
int pinValue = param.asInt();
if (pinValue==1) irsend.sendNEC (0xЗАПИСАННЫЙКОД, 32);
}
Расшифруем:
- BLYNK_WRITE(V0) - отслеживаем изменение виртуального пина V0
- if (pinValue==1) - если пин принимает значение 1, то...
- irsend.sendNEC (0xЗАПИСАННЫЙКОД, 32); - здесь мы укажем (а программа отправит) ИК-код из тех, что мы сохранили в блокнотик при считывании пультов (например, 807F00FF или любой другой).
Для каждой виртуальной кнопки нашего пульта нужно указать свой irsend.sendNEC (0xКОД, 32); имитирующий её нажатие. Можно указать сразу серию нажатий при изменении одного виртуального пина (например, "Включить ТВ" + "Переключить нужный канал/вход"; или убавить громкость сразу на 7 нажатий кнопки "-").
По этой же схеме настраиваем все виртуальные пины Blynk, вебхуки, и пробрасываем их в Алису через Кузю, об этом подробно уже написано здесь.
Исходные коды прошивок
Скачать архив прошивок для пульта можно по этой ссылке.
Что можно улучшить
- Брать один виртуальный пин (например, V0) и задавать ему не 0 и 1, а сразу строковое значение типа "FFFFFFFF" ИК-кода, а в код подставлять переменную.
- Совместить обе схемы (и прошивки) в одной (D2 передатчик, D3 приёмник), отлавливать коды прямо из блинка и сделать конструкцию универсальной. Изменяться будут только передаваемые вебхуком значения одного пина.
- Дописать прошивку так, чтобы пульт стал полностью самообучаемым и умел сохранять команды в энергонезависимой памяти (EEPROM).
Кстати, один из участников нашего чата по аналогичной схеме сделал... ИК-прокси, который пропускал в телевизор только разрешённые коды )
Удачной сборки, весёлых экспериментов и надёжной работы!