Алиса и обучаемый ИК-пульт DIY: различия между версиями
м Ark rusinov-9121383 переименовал страницу "Алиса и обучаемый ИК-пульт" в "Алиса и обучаемый ИК-пульт DIY" без оставления… |
правка текста |
||
| Строка 14: | Строка 14: | ||
Преимущества | Преимущества DIY-решения очевидны: | ||
* Гибкая настройка (программирование) всего, что можно; | * Гибкая настройка (программирование) всего, что только можно; | ||
* "Индивидуальные" пульты (излучатель "в упор" в глазок нужного устройства, чтобы не возникало коллизий с другими); | * Произвольные последовательности команд на один и более передатчиков; | ||
* Возможность разместить в любой корпус (включая корпус самого принимающего устройства); | * "Индивидуальные" пульты (излучатель светит "в упор" в глазок нужного устройства, чтобы не возникало коллизий с другими); | ||
* Возможность разместить пульт в любой корпус (включая корпус самого принимающего устройства); | |||
* Отличный способ провести время и подтянуть скиллы. | * Отличный способ провести время и подтянуть скиллы. | ||
| Строка 23: | Строка 24: | ||
Конечно, придётся немного потрудиться. Для сборки нам понадобятся: | Конечно, придётся немного потрудиться. Для сборки нам понадобятся: | ||
* NodeMCU (автор брал [//ru.aliexpress.com/item/32665100123.html здесь]) | * NodeMCU (автор брал [//ru.aliexpress.com/item/32665100123.html здесь]) | ||
* Модуль ИК-приёмника ( | * Модуль ИК-приёмника (автор использовал [//ru.aliexpress.com/item/32776953499.html этот]) | ||
* Модуль ИК-излучателя (например, [//ru.aliexpress.com/item/32860595867.html | * Модуль ИК-излучателя (например, [//ru.aliexpress.com/item/32860595867.html этот из примера] уже содержит драйвер, и их можно подключить сразу несколько штук на один пин без дополнительного обвеса и повернуть во все нужные стороны) | ||
* Источник стабилизированного (желательно, чтобы избежать проблем) питания | * Источник стабилизированного (желательно, чтобы избежать проблем) питания | ||
| Строка 33: | Строка 34: | ||
[[Файл:NoY_IR-1recvr.jpg | thumb | Схема 1: Приёмник]] | [[Файл:NoY_IR-1recvr.jpg | thumb | Схема 1: Приёмник]] | ||
Наши первые действия - сбор информации с пультов. Для этого: | Наши первые действия - сбор информации с пультов. Для этого: | ||
# Собираем ИК-приёмник по схеме 1 | # Собираем ИК-приёмник по схеме 1. | ||
# Прошиваем NodeMCU кодом PULT_resv.ino (см. ниже) | # Прошиваем NodeMCU кодом PULT_resv.ino (см. ниже) | ||
# В ArduinoIDE открываем | # В ArduinoIDE открываем "Монитор порта", наводим пульт-оригинал (от телека, люстры, кондёра) на наш приёмник, жмем нужную кнопку. | ||
В мониторе | В мониторе побегут одинаковые строки типа 807F00FF. Это и есть код, переданный при нажатии кнопки. | ||
Записываем полученные коды в блокнот сразу с названиями кнопок. | Записываем полученные коды в блокнот, сразу с названиями кнопок. А чтобы не вставать два раза(тм), записываем все кнопки со всех пультов, которые планируем использовать. | ||
{{#spoiler:show=Показать PULT_resv.ino | hide=Спрятать PULT_resv.ino | | {{#spoiler:show=Показать PULT_resv.ino | hide=Спрятать PULT_resv.ino | | ||
| Строка 89: | Строка 90: | ||
[[Файл:NoY_IR-2send.jpg | thumb | Схема 2: Пульт]] | [[Файл:NoY_IR-2send.jpg | thumb | Схема 2: Пульт]] | ||
Схему приёмника можно разобрать, или оставить на будущее), а сейчас: | |||
# | # Собираем пульт по схеме 2. | ||
# Прошиваем код PULT_send.ino, перед этим немного изменив код: | # Прошиваем код PULT_send.ino, перед этим немного изменив код: | ||
#* | #* заполним <span class="tocopy">char auth[]=</span>, <span class="tocopy">char ssid[]=</span> и <span class="tocopy">char pass[]=</span> своими значениями (ориентируясь на подсказки в комментариях). | ||
#* | #* пропишем виртуальные пины. Действие-реакция на изменение состояния каждого отдельного пина регламентируется куском кода: | ||
BLYNK_WRITE(V0) { //виртуальный пин 0 | BLYNK_WRITE(V0) { //виртуальный пин 0 | ||
| Строка 103: | Строка 104: | ||
* '''BLYNK_WRITE(V0)''' - отслеживаем изменение виртуального пина V0 | * '''BLYNK_WRITE(V0)''' - отслеживаем изменение виртуального пина V0 | ||
* '''if (pinValue = 1)''' - если пин принимает значение 1 то.... | * '''if (pinValue = 1)''' - если пин принимает значение 1 то.... | ||
* '''irsend.sendNEC(0xЗАПИСАННЫЙКОД, 32);''' - здесь мы впишем (а программа отправит) ИК-код, | * '''irsend.sendNEC (0xЗАПИСАННЫЙКОД, 32);''' - здесь мы впишем (а программа отправит) ИК-код из тех, что мы сохранили в блокнотик при считывании пуьлтов (например, 807F00FF или любой другой). | ||
Для каждой кнопки нужно прописать свой irsend.sendNEC(0xКОД, 32); | Для каждой виртуальной кнопки нашего пульта нужно прописать свой irsend.sendNEC(0xКОД, 32); имитирующий её нажатие. | ||
Можно указать и серию нажатий при изменении одного виртуального пина (например, включить ТВ, а затем включить нужный канал/вход; или убавить громкость сразу на 10 нажатий "-"). | |||
По этой схеме настраиваем все виртуальные пины Blynk, вебхуки, и пробрасываем их в Алису через Кузю, об этом подробно [//wiki.yaboard.com/s/bg написано здесь]. | По этой схеме настраиваем все виртуальные пины Blynk, вебхуки, и пробрасываем их в Алису через Кузю, об этом подробно уже [//wiki.yaboard.com/s/bg написано здесь]. | ||
| Строка 171: | Строка 173: | ||
* | * Брать один виртуальный пин (например, V0) и задавать ему не 0 и 1, а сразу строковое значение типа "FFFFFFFF" ИК-кода, а в код подставлять переменную. | ||
* Совместить обе схемы (и прошивки) в одной (D2 передатчик, D3 приёмник), отлавливать коды прямо из блинка и сделать конструкцию универсальной. Изменяться будут только передаваемые вебхуком значения одного пина. | * Совместить обе схемы (и прошивки) в одной (D2 передатчик, D3 приёмник), отлавливать коды прямо из блинка и сделать конструкцию универсальной. Изменяться будут только передаваемые вебхуком значения одного пина. | ||
* Дописать прошивку так, чтобы пульт стал полностью самообучаемым и умел сохранять команды в энергонезависимой памяти (EEPROM). | * Дописать прошивку так, чтобы пульт стал полностью самообучаемым и умел сохранять команды в энергонезависимой памяти (EEPROM). | ||
Кстати, один из участников нашего чата по аналогичной схеме сделал... ИК-прокси, который пропускал в телевизор только разрешённые коды ) | |||
Версия от 18:01, 10 декабря 2019
Материал носит информационный характер, и не является прямым указанием к действию!
Вступление
Сегодня будем собирать собственный, и даже почти обучаемый ИК-пульт :) Автор назвал его "НеЯндекс.Пульт", и дальнейший текст основан на его оригинальной инструкции.
Преимущества 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); имитирующий её нажатие. Можно указать и серию нажатий при изменении одного виртуального пина (например, включить ТВ, а затем включить нужный канал/вход; или убавить громкость сразу на 10 нажатий "-").
По этой схеме настраиваем все виртуальные пины Blynk, вебхуки, и пробрасываем их в Алису через Кузю, об этом подробно уже написано здесь.
Исходные коды прошивок
Скачать архив прошивок для пульта можно по этой ссылке.
Что можно улучшить
- Брать один виртуальный пин (например, V0) и задавать ему не 0 и 1, а сразу строковое значение типа "FFFFFFFF" ИК-кода, а в код подставлять переменную.
- Совместить обе схемы (и прошивки) в одной (D2 передатчик, D3 приёмник), отлавливать коды прямо из блинка и сделать конструкцию универсальной. Изменяться будут только передаваемые вебхуком значения одного пина.
- Дописать прошивку так, чтобы пульт стал полностью самообучаемым и умел сохранять команды в энергонезависимой памяти (EEPROM).
Кстати, один из участников нашего чата по аналогичной схеме сделал... ИК-прокси, который пропускал в телевизор только разрешённые коды )
Удачной сборки, весёлых экспериментов и надёжной работы!