Алиса и обучаемый ИК-пульт DIY: различия между версиями
Нет описания правки |
Нет описания правки |
||
| (не показано 7 промежуточных версий этого же участника) | |||
| Строка 1: | Строка 1: | ||
{{metadesc|{{PAGENAME}} | | {{metadesc|{{PAGENAME}} | Обучаемый ИК-пульт для умного дома своими руками? Легко! }} | ||
__NOEDITSECTION__ | __NOEDITSECTION__ | ||
__TOC__ | __TOC__ | ||
| Строка 11: | Строка 11: | ||
Сегодня будем собирать собственный, и даже почти обучаемый | Сегодня будем собирать собственный, и даже почти обучаемый ИК-пульт :) [//t.me/Xottabb14 Автор] назвал его "НеЯндекс.Пульт", и дальнейший текст основан на его оригинальной инструкции. | ||
Преимущества | Преимущества 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 модуль из примера] уже содержит драйвер, и их можно подключить сразу несколько штук на один пин без дополнительного обвеса и повернуть во все нужные стороны) | ||
* Источник стабилизированного (желательно, чтобы избежать проблем) питания | * Источник стабилизированного (желательно, чтобы избежать проблем) питания | ||
== Подготовительные работы == | |||
Установить: | |||
* '''ArduinoIDE''', и в самой среде: | |||
** библиотеки '''Blynk''' и '''IRremoteESP8266''', | |||
** библиотеки для платы '''NodeMCU'''. | |||
Проверить правильность настройки ArduinoIDE: | |||
* Подключить NodeMCU к USB-порту компьютера. | |||
* Выбрать правильный '''тип платы'''. | |||
* Выбрать правильный '''порт''' (меню «Инструменты» - «Порт»), его можно посмотреть в диспетчере устройств вашей ОС (например, COM4). | |||
* Создать пустой скетч (меню «Файл» - «Новый», или '''Ctrl-N'''). | |||
* Загрузить этот пустой скетч в плату (кнопка «Загрузка», или '''Ctrl-U'''). | |||
Подробнее по настройке разделе «Полезные ссылки». | |||
| Строка 31: | Строка 51: | ||
[[Файл:NoY_IR- | [[Файл:NoY_IR-recvr1a.jpg | thumb | Схема 1a: питание приёмника через VIN]] | ||
Наши первые действия - сбор информации с пультов. Для этого | [[Файл:NoY_IR-recvr1b.jpg | thumb | Схема 1b: питание приёмника по micro-USB]] | ||
Наши первые действия - сбор информации с пультов. Для этого собираем ИК-приёмник согласно схемам. | |||
<pre class=red> | |||
Важно! Выбирайте правильное подключение в зависимости от Вашего питания. | |||
Схема 1a - когда плата запитана через пины VIN и GND. | |||
Схема 1b - более универсальная, будет работать и при питании платы через встроенный порт micro-USB. | |||
</pre> | |||
Записываем полученные коды в блокнот сразу с названиями кнопок. | Дальше: | ||
# Прошиваем NodeMCU кодом PULT_resv.ino (см. ниже). | |||
# В ArduinoIDE открываем "Монитор порта", направляем пульт-оригинал (от телевизора, люстры, кондиционера итд) на наш приёмник, жмём нужную кнопку. | |||
В мониторе побегут одинаковые строки с числами типа 807F00FF. Это и есть код, переданный при нажатии кнопки. | |||
Помимо вывода в монитор порта в данном коде есть возможность вывода кодов ИК-пульта в виртуальный пин V30 в приложении Blynk. Для этого в созданном Вами проекте Blynk нужно создать элемент Text Input и задать ему виртуальный пин V30. После сборки, прошивки и подключения к сети в данный элемент будут поступать коды при нажатии на кнопки пульта. | |||
[[Файл:NoY IR-code-blynk.jpg]] | |||
Записываем полученные коды в блокнот, сразу с названиями кнопок. А чтобы не вставать два раза(тм), запишем все кнопки со всех пультов, которые планируем использовать. | |||
{{#spoiler:show=Показать PULT_resv.ino | hide=Спрятать PULT_resv.ino | | {{#spoiler:show=Показать PULT_resv.ino | hide=Спрятать PULT_resv.ino | | ||
<pre> | <pre> | ||
#define BLYNK_PRINT Serial //серийный порт для подключения по вайфаю | |||
#ifndef UNIT_TEST | #ifndef UNIT_TEST | ||
#include <Arduino.h> | #include <Arduino.h> | ||
#endif | #endif | ||
#include <IRremoteESP8266.h> | #include <IRremoteESP8266.h> //эту библиотеку нужно установить из маркета библиотек ардуино | ||
#include <IRrecv.h> | #include <IRrecv.h> | ||
#include <IRutils.h> | #include <IRutils.h> | ||
const uint16_t kRecvPin = 0; | #include <ESP8266WiFi.h> //подключение модуля вайфая | ||
#include <BlynkSimpleEsp8266.h> //библиотека для модуля вайфая | |||
char auth[] = "Токен_блинк"; //ключ от пульта | |||
char ssid[] = "SSID_сети"; //название сети вайфая | |||
char pass[] = "Пароль сети"; //пароль от вайфая | |||
const uint16_t kRecvPin = 0; //пин D3 на NodeMCU | |||
String code = "FFFFFFFF"; | |||
IRrecv irrecv(kRecvPin); | IRrecv irrecv(kRecvPin); | ||
| Строка 63: | Строка 105: | ||
Serial.begin(115200); | Serial.begin(115200); | ||
irrecv.enableIRIn(); // Start the receiver | irrecv.enableIRIn(); // Start the receiver | ||
while (!Serial) // Wait for the serial connection to be establised. | while (!Serial) { // Wait for the serial connection to be establised. | ||
delay(50); | delay(50); | ||
} | |||
Serial.println(); | Serial.println(); | ||
Serial.print("IRrecvDemo is now running and waiting for IR message on Pin "); | Serial.print("IRrecvDemo is now running and waiting for IR message on Pin "); | ||
| Строка 73: | Строка 116: | ||
void loop() { | void loop() { | ||
Blynk.run(); | |||
if (irrecv.decode(&results)) { | if (irrecv.decode(&results)) { | ||
| Строка 78: | Строка 122: | ||
Serial.println(""); | Serial.println(""); | ||
irrecv.resume(); // Receive the next value | irrecv.resume(); // Receive the next value | ||
code = uint64ToString(results.value,HEX); | |||
Blynk.virtualWrite(V30,uint64ToString(results.value,HEX)); //вывод кода в пин 30 | |||
} | |||
delay(100); | delay(100); | ||
} | } | ||
| Строка 88: | Строка 134: | ||
[[Файл:NoY_IR- | [[Файл:NoY_IR-pult2a.jpg | thumb | Схема 2a: Питание пульта и модулей через VIN]] | ||
[[Файл:NoY_IR-pult2b.jpg | thumb | Схема 2b: Питание пульта по micro-USB]] | |||
# | |||
Первая часть завершена! Схему приёмника можно разобрать, или оставить на будущее), а сейчас: | |||
# Собираем пульт по схеме 2a или 2b (различия те же, что и в вариантах приёмника). | |||
# Прошиваем код 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 | ||
int pinValue = param.asInt(); | int pinValue = param.asInt(); | ||
if (pinValue = 1)irsend.sendNEC(0xЗАПИСАННЫЙКОД, 32); | if (pinValue==1) irsend.sendNEC (0xЗАПИСАННЫЙКОД, 32); | ||
} | } | ||
Расшифруем | Расшифруем: | ||
* '''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); имитирующий её нажатие. | ||
Можно указать сразу серию нажатий при изменении одного виртуального пина (например, "Включить ТВ" + "Переключить нужный канал/вход"; или убавить громкость сразу на 7 нажатий кнопки "-"). | |||
По этой схеме настраиваем все виртуальные пины Blynk, вебхуки, и пробрасываем их в Алису через Кузю, об этом подробно [//wiki.yaboard.com/s/bg написано здесь]. | По этой же схеме настраиваем все виртуальные пины Blynk, вебхуки, и пробрасываем их в Алису через Кузю, об этом подробно [//wiki.yaboard.com/s/bg уже написано здесь]. | ||
| Строка 117: | Строка 167: | ||
#endif | #endif | ||
#include <IRremoteESP8266.h> | #include <IRremoteESP8266.h> | ||
#include <IRutils.h> | #include <IRutils.h> | ||
#include <IRsend.h> | #include <IRsend.h> | ||
| Строка 137: | Строка 186: | ||
BLYNK_WRITE(V0) { //виртуальный пин 0 | BLYNK_WRITE(V0) { //виртуальный пин 0 | ||
int pinValue = param.asInt(); | int pinValue = param.asInt(); | ||
if (pinValue = 1)irsend.sendNEC(0xFFFFFFF, 32); //вместо FFFFFFF вставить код полученный от пульта-оригинала | if (pinValue==1)irsend.sendNEC(0xFFFFFFF, 32); //вместо FFFFFFF вставить код полученный от пульта-оригинала | ||
} | } | ||
BLYNK_WRITE(V1) { //виртуальный пин 1 | BLYNK_WRITE(V1) { //виртуальный пин 1 | ||
int pinValue = param.asInt(); | int pinValue = param.asInt(); | ||
if (pinValue = 1)irsend.sendNEC(0xFFFFFFF, 32); //вместо FFFFFFF вставить код полученный от пульта-оригинала | if (pinValue==1)irsend.sendNEC(0xFFFFFFF, 32); //вместо FFFFFFF вставить код полученный от пульта-оригинала | ||
} | } | ||
| Строка 151: | Строка 200: | ||
Blynk.begin(auth, ssid, pass); | Blynk.begin(auth, ssid, pass); | ||
Serial.begin(115200); | Serial.begin(115200); | ||
} | } | ||
| Строка 165: | Строка 213: | ||
Скачать | Скачать архив прошивок для пульта можно [[:Файл:PULT_code.zip | по этой ссылке]]. | ||
== Полезные ссылки == | |||
* [//help.blynk.cc/en/articles/512105-how-to-install-blynk-library-for-arduino-ide Инструкция по установке библиотеки blynk, а также её актуальная версия] | |||
* [//robotclass.ru/articles/node-mcu-arduino-ide-setup/ Хорошая инструкция по настройке ArduinoIDE для NodeMCU] | |||
* [//wiki.yaboard.com/s/bg Пример настройки устройств в приложении Blynk и интеграции их в Алису через навык «Домовенок Кузя»] | |||
| Строка 171: | Строка 228: | ||
* | * Брать один виртуальный пин (например, V0) и задавать ему не 0 и 1, а сразу строковое значение типа "FFFFFFFF" ИК-кода, а в код подставлять переменную. | ||
* Совместить обе схемы (и прошивки) в одной (D2 передатчик, D3 приёмник), отлавливать коды прямо из блинка и сделать конструкцию универсальной. Изменяться будут только передаваемые вебхуком значения одного пина. | * Совместить обе схемы (и прошивки) в одной (D2 передатчик, D3 приёмник), отлавливать коды прямо из блинка и сделать конструкцию универсальной. Изменяться будут только передаваемые вебхуком значения одного пина. | ||
* Дописать прошивку так, чтобы пульт стал полностью самообучаемым и умел сохранять команды в энергонезависимой памяти (EEPROM). | |||
Кстати, один из участников нашего чата по аналогичной схеме сделал... ИК-прокси, который пропускал в телевизор только разрешённые коды ) | |||
Удачной сборки! | Удачной сборки, весёлых экспериментов и надёжной работы! | ||
[[Category:Умный дом]] | [[Category:Умный дом]] | ||
[[Category:Своими руками]] | [[Category:Своими руками]] | ||
Текущая версия от 12:45, 11 января 2020
Материал носит информационный характер, и не является прямым указанием к действию!
Вступление
Сегодня будем собирать собственный, и даже почти обучаемый ИК-пульт :) Автор назвал его "НеЯндекс.Пульт", и дальнейший текст основан на его оригинальной инструкции.
Преимущества DIY-решения очевидны:
- Гибкая настройка (программирование) всего, что только можно;
- Произвольные последовательности команд на один и более передатчиков;
- "Индивидуальные" пульты (излучатель светит "в упор" в глазок нужного устройства, чтобы не возникало коллизий с другими);
- Возможность разместить пульт в любой корпус (включая корпус самого принимающего устройства);
- Отличный способ провести время и подтянуть скиллы.
Конечно, придётся немного потрудиться. Для сборки нам понадобятся:
- NodeMCU (автор брал здесь)
- Модуль ИК-приёмника (автор использовал этот)
- Модуль ИК-излучателя (например, модуль из примера уже содержит драйвер, и их можно подключить сразу несколько штук на один пин без дополнительного обвеса и повернуть во все нужные стороны)
- Источник стабилизированного (желательно, чтобы избежать проблем) питания
Подготовительные работы
Установить:
- ArduinoIDE, и в самой среде:
- библиотеки Blynk и IRremoteESP8266,
- библиотеки для платы NodeMCU.
Проверить правильность настройки ArduinoIDE:
- Подключить NodeMCU к USB-порту компьютера.
- Выбрать правильный тип платы.
- Выбрать правильный порт (меню «Инструменты» - «Порт»), его можно посмотреть в диспетчере устройств вашей ОС (например, COM4).
- Создать пустой скетч (меню «Файл» - «Новый», или Ctrl-N).
- Загрузить этот пустой скетч в плату (кнопка «Загрузка», или Ctrl-U).
Подробнее по настройке разделе «Полезные ссылки».
Считываем оригинальные коды


Наши первые действия - сбор информации с пультов. Для этого собираем ИК-приёмник согласно схемам.
Важно! Выбирайте правильное подключение в зависимости от Вашего питания. Схема 1a - когда плата запитана через пины VIN и GND. Схема 1b - более универсальная, будет работать и при питании платы через встроенный порт micro-USB.
Дальше:
- Прошиваем NodeMCU кодом PULT_resv.ino (см. ниже).
- В ArduinoIDE открываем "Монитор порта", направляем пульт-оригинал (от телевизора, люстры, кондиционера итд) на наш приёмник, жмём нужную кнопку.
В мониторе побегут одинаковые строки с числами типа 807F00FF. Это и есть код, переданный при нажатии кнопки.
Помимо вывода в монитор порта в данном коде есть возможность вывода кодов ИК-пульта в виртуальный пин V30 в приложении Blynk. Для этого в созданном Вами проекте Blynk нужно создать элемент Text Input и задать ему виртуальный пин V30. После сборки, прошивки и подключения к сети в данный элемент будут поступать коды при нажатии на кнопки пульта.
Записываем полученные коды в блокнот, сразу с названиями кнопок. А чтобы не вставать два раза(тм), запишем все кнопки со всех пультов, которые планируем использовать.
Повелеваем устройствами


Первая часть завершена! Схему приёмника можно разобрать, или оставить на будущее), а сейчас:
- Собираем пульт по схеме 2a или 2b (различия те же, что и в вариантах приёмника).
- Прошиваем код 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, вебхуки, и пробрасываем их в Алису через Кузю, об этом подробно уже написано здесь.
Исходные коды прошивок
Скачать архив прошивок для пульта можно по этой ссылке.
Полезные ссылки
- Инструкция по установке библиотеки blynk, а также её актуальная версия
- Хорошая инструкция по настройке ArduinoIDE для NodeMCU
- Пример настройки устройств в приложении Blynk и интеграции их в Алису через навык «Домовенок Кузя»
Что можно улучшить
- Брать один виртуальный пин (например, V0) и задавать ему не 0 и 1, а сразу строковое значение типа "FFFFFFFF" ИК-кода, а в код подставлять переменную.
- Совместить обе схемы (и прошивки) в одной (D2 передатчик, D3 приёмник), отлавливать коды прямо из блинка и сделать конструкцию универсальной. Изменяться будут только передаваемые вебхуком значения одного пина.
- Дописать прошивку так, чтобы пульт стал полностью самообучаемым и умел сохранять команды в энергонезависимой памяти (EEPROM).
Кстати, один из участников нашего чата по аналогичной схеме сделал... ИК-прокси, который пропускал в телевизор только разрешённые коды )
Удачной сборки, весёлых экспериментов и надёжной работы!
