Статья

Простой приемопередатчик IR сигналов на ESP8266

Добрый день, дорогие друзья. Сегодня я вам расскажу, как собрать очень простое и полезное устройство для управления бытовой техникой по инфракрасному порту. Для сборки этого устройства вам понадобиться всего лишь ESP8266 nodeMCU, подойдет абсолютно любая. Итак, приступим.

IR передатчик

В качестве передатчика может выступать IR светодиод с любого пульта управления. Его даже можно напрямую подпаять к нашей ESP8266, не используя никаких других компонентов. Но так как GPIO в ESP8266 может выдавать максимум 12 мА, диапазон ИК-излучения будет ограничен.

То есть для теста работоспособности и направленного управления нам этого будет достаточно. 

Схема подключения IR передатчика к nodeMCU ESP8266 

IR светодиод, как и любой другой светодиод, имеет Анод и Катод, другими словами - плюс и минус.

Так вот, для подключения нашего передатчика к ESP8266 нам необходимо Анод подключить через последовательный резистор к выбранному контакту GPIO (по секрету - резистор не обязателен). 

Собственно, на этом все - наш передатчик готов. Но как же быть, если мы хотим, чтобы наше устройство было не таким направленным и могло управлять и телевизором, и кондиционером в пределах комнаты?

IR приемник

Посылать IR команды мы в теории научились. Как же быть, и где эти команды найти?

Тут нам поможет IR приемник. В нашем случае это будет TSOP4838, найти его можно в любой нерабочей технике, которая управляется при помощи инфракрасного пульта. 

Схема подключения, как и с передатчиком, очень простая. TSOP4838 имеет три пина для подключения. 

TSOP4838ESP82661GPIO2GND33.3 В

Вот, собственно, и все, на этом сборка устройства закончена, перейдем к прошивке ESP8266 и настройке. 

Прошивка ESP8266

Прошивку, как и всегда, будем использовать ESP Easy, но в этот раз возьмем узконаправленную, рассчитанную на IR_TX и IR_TX. Она имеется в каждом архиве прошивок ESP Easy в каталоге bin. Кодовое название прошивки: "minimal_IRext_ESP8266_4M2M.bin". 

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

Настройка девайсов

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

Сразу же откроем вкладку "Hardware" и меняем значение

GPIO boot states, GPIO-13 на Output Low.

Получение IR сигналов

Берем абсолютно любой инфракрасный пульт, направляем на TSOP4838 и нажимаем на любую кнопку, команду которой хотим считать. 

Как видим на странице "Devices", значение изменилось с 0 на 3467684604.

Это наш код в десятичной системе счисления, нам же нужен код в шестнадцатиричной системе. Открываем любой конвертер (подойдет и онлайн), конвертируем наше значение в шестнадцатиричный код, получаем "CEB0AAFC". Это и будет наша команда. 

Тест

Открываем новую страницу в браузере и вводим такую ссылку:  

http://<ip-addr>/control?cmd=IRSEND,<Encoding>,<Value>,<Bitlenght>

где:

ip-addr - IP адрес нашей ESP8266;Value - на шестнадцатиричный код.

Подставляем наше значение и получаем что-то похожее на это:

http://192.168.88.102/control?cmd=IRSEND,samsung,CEB0AAFC,32

Нажимаем "Enter" и видим, как наш телевизор включился. 

Добавление в HomeBridge посредством http

Далее нам необходимо создать кнопочки и прокинуть их в Apple HomeKit. Тут все просто, с этим справиться плагин "homebridge-http-switch". Устанавливаем и добавляем в конфиг следующие строки:

{ "accessory": "HTTP-SWITCH", "name": "Телевизор ВКЛ/ВЫКЛ", "switchType": "stateless", "onUrl": [ "http://192.168.88.102/control?cmd=IRSEND,samsung,CEB0AAFC,32" ] }

Добавление в HomeBridge посредством mqtt

Если вы, как и я, больше предпочитаете MQTT, тут тоже все просто, при помощи плагина "homebridge-mqttthing". Добавляем новый свитч. 

{ "accessory": "mqttthing", "type": "switch", "name": "Телевизор ВКЛ/ВЫКЛ", "topics": { "setOn": "/ESP_IR/cmd" }, "integerValue": "true", "onValue": "irsend,samsung,CEB0AAFC,32", "offValue": "irsend,samsung,CEB0AAFC,32" }

Немного разберем конфиг:

  • ESP_IR - название нашего устройства, задается на вкладке "Config";
  • setOn - отправка данных;
  • onValue - команда на включение;
  • offValue - команда на выключение.

Добавление в HomeAssistant

Для добавления в HomeAssistant посредством mqtt, нам необходимо всего лишь добавить в наш конфиг следующие строки. 

switch: - platform: mqtt name: "TV ON/OFF" command_topic: "/ESP_IR/cmd" payload_on: "irsend,samsung,CEB0AAFC,32" payload_off: "irsend,samsung,CEB0AAFC,32"

Фото устройства 

Для ленивых

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

IR трансмиттер, модуль для Arduino
TSOP4838 на плате, модуль для Arduino

Подключаем все точно также по схеме к плате, уже без пайки, но при помощи соединительных проводков dupont "мама-мама"

Вывод

Вот так просто можно собрать устройство для управления бытовой техникой по инфракрасному порту, ценник которого не превышает 200 рублей. Приимуществом данного девайса является возможность интегрировать наши виртуальные переключатели практически во все экосистемы, будь то Яндекс Алиса или Google Home. Если эта статья вам понравилась, ставьте лайки и пишите комментарии. Ну а для совсем ленивых можно заказать готовое устройство от отечественного производителя LOOKin, кстати обзорная статья появилась совсем недавно. Если ваш умный дом построен на девайсах от Xiaomi, для вас тоже есть готовое решение.Также появилась идея заказать и разобраться с модулями, работающими на частоте 433, если эта тема вам также интересна, пишите в комментариях, все закажу и оформлю в статью.


Спасибо, только вчера собрал себе такой для управления кондеем, завел в хомассистант через рест комманд, лень было с mqtt разбираться, теперь проще, сейчас переведу на mqtt

если есть чем дополнить статью, буду рад 

Возможно стоит упомянуть о уже готовом управлении кондеями, на вкладке devices добавить Energy (Heat) - Heatpump IR transmitter, выбрать пин ir и ознакомиться с https://espeasy.readthedocs.io/en/latest/Plugin/P088.html#p088-page
Но пока не разобрался как добавить его как climate в home assistant.

Хорошее дополнение, может оформишь в блог, чтоб не потерялось

Возможно стоит упомянуть о уже готовом управлении кондеями, на вкладке devices добавить Energy (Heat) - Heatpump IR transmitter, выбрать пин ir и ознакомиться с https://espeasy.readthedocs.io/en/latest/Plugin/P088.html#p088-page
Но пока не разобрался как добавить его как climate в home assistant.

Что за кондей ?

Поделитесь командами управления

Кондей mitsubishi heavy комманды есть здесь https://espeasy.readthedocs.io/en/latest/Plugin/P088.html#p088-page
в моем случае это: http://192.168.1.46/control?cmd=heatpumpir,mitsubishi_heavy_zj,1,3,0,19,1,1

вот бы такой  зигбишный... на 2530



https://sprut.ai/static/media/cache/00/39/63/5/3549214/56389/1000x_image.jpg?1587546992" alt="Вид сверху" title="Вид сверху" />https://sprut.ai/static/media/cache/00/39/63/5/3549214/56390/1000x_image.jpg?1587546994" alt="Вид снизу" title="Вид снизу" />https://sprut.ai/static/media/cache/00/39/63/5/3549214/56391/1000x_image.jpg?1587546995" alt="В USB музыкального центра" title="В USB музыкального центра" />

Мой старый колхоз из того, что в ящике стола нашёл. Работает на прошивке Tasmota в связке Home Assistant.

"Также появилась идея заказать и разобраться с модулями, работающими на частоте 433"

Поддерживаем!

ищу где купить модулей. некогда нечего не было на 433. стало интересно 

была бесплатная доставка, брал https://aliexpress.ru/item/1347349030.html?spm=a2g0s.9042311.0.0.274233edGEZUb8">тут

А все таки где взять 
minimal_IRext_ESP8266_4M2M.bin ?
В 
прошивке http://www.letscontrolit.com/downloads/ESPEasy_R120.zip">ESPEasy R120 этоn файл отсутствует

Спасибо! Простые решения помогают понять сложные) Да и действительно иногда именно такие устройства решают задачу.

От куда брать Encoding и Bitlenght ?
Если будут другие устройства

Encoding - можно указать производителя устройства (не столько важно)
Bitlenght - везде 32

Подскажите, IR-ресивера нет. Решил попытать счастья только с трансмиттером из старого сгоревшего пульта.

Нашел базу кодов для своего телека тут: 

http://irdb.tk/codes/">http://irdb.tk/codes/http://irdb.tk/codes/">   
Для примера, код включения: 

00 00 1A 00 DE 04 01 BC 01 BC 03 79 01 BC 01 BC 03 79 01 BC B1 83 8C 01 00 00 00 20 1

Есть понимание как это конвертить в понятное значение для нашего устройства?

PS: С вашей HTTP строкой из примера трансмиттер посылает сигнал, видно через камеру телефона.

интересный вопрос. мне кажется ключ не получиться переконвертировать. нужно найти его же в другом виде. 

Я выбрал готовые устройства в корпусе с диодами на 360 градусов.

1 Geeklink Wifi IR Remote

2 Tuya Wifi to IR Remote

Оба на ESP8***, в Tuya какой-то более редкий модуль.

Здравствуйте! Заинтересовался данным девайсом. Подскажите, какой угол обзора у него? Если он получается направленного действия возможно ли расширить угол используя два ик диода направленные в разные стороны? Скажется ли это на сигнале? Спасибо!

как сказано выше, угол зависит от того чем ты собираешься управлять. если это просто диод - там только направлено. 

заказал давеча подобный сетап с Али, у меня такой вопрос сколько у этой радости потребление в режиме ожидания команд? В комнате только телевизор стоит, не хочу городить кучу проводов, думал запитать от 18650 и закрепить за телевизором, а диод вывести рядом с приемником. В выключенном состоянии на usb питания нет, а разбирать телек и подпаиваться к дежурке желания нет


Добрый день. Собрал, испытал (с телевизором Samsung) всё отлично, а вот телек LG так и не заработало. Несколько кнопок пробовал, не получилось.

Победил!!!

Когда в браузере в строке с командой вместо LG ввёл NEC, мой телевизор LG включился. И ещё несколько кнопок проверил: всё работает.

"Это я удачно зашел"... (с) (х/ф)

Валяется без дела xiaomi шайба 2-й версии - брал для кондиционера - а она не заработала...

Надо будет ее прошить. :)

Сразу извиняюсь за глупый вопрос, а куда катод 

IR передатчика (использую голый без резисторов) подключать - земля, +3.3в или в воздухе ?  Хочу управлять лампой с пультом ИК. Кинул на 0 катод, но не сработало. Коди считал и конвертировал.


Вернуться назад
Вернуться назад