Найти в Дзене
Электроника, ESP32, Arduino

Небольшой обзор большой библиотеки IRremote для управления по ИК каналу

Оглавление

На моем канале уже была статья про то как сделать ПДУ для бытовой техники на базе библиотеки IRremoteESP8266. Сегодня краткий обзор библиотеки IRremote для среды Arduino IDE.

Ссылка на гитхаб https://github.com/Arduino-IRremote/Arduino-IRremote. Последняя версия библиотеки 3.5.2. Перед использованием, необходимо убедиться, что в среде Arduino IDE установлена именно она. (со старыми версиями библиотеки, примеры кода из данной статьи работать не будут)

Проверка/установка библиотеки IRremote в среде Arduino IDE
Проверка/установка библиотеки IRremote в среде Arduino IDE

Библиотека поддерживает протоколы: Denon/Sharp, JVC, LG, NEC/Onkyo/ Apple, Panasonic/Kaseikyo, RC5, RC6, Samsung, Sony, (Pronto), BoseWave, Lego, Whynter

Может работать на Ардуино-платформах и отдельных "камнях":

  • Arduino Uno / Mega / Leonardo / Duemilanove / Diecimila / LilyPad / Mini / Fio / Nano etc.
  • Teensy 1.0 / 1.0++ / 2.0 / 2++ / 3.0 / 3.1 /
  • Sanguino
  • ATmega8, 48, 88, 168, 328
  • ATmega8535, 16, 32, 164, 324, 644, 1284,
  • ATmega64, 128
  • ATmega4809 (Nano every)
  • ATtiny3217 (Tiny Core 32 Dev Board)
  • ATtiny84, 85, 167 (Digispark + Digispark Pro)
  • SAMD (Zero, MKR*, but not DUE, which is SAM architecture)
  • ESP32 (ESP32 C3 since board package 2.0.2 from Espressif)
  • ESP8266
  • Sparkfun Pro Micro
  • Nano Every, Uno WiFi Rev2, nRF5 BBC MicroBit, Nano33_BLE
  • BluePill with STM32
  • RP2040 based boards (Raspberry Pi Pico, Nano RP2040 Connect etc.)

Тест проводился на базе платформы ESP32. Схема подключения:

Тест библиотеки IRremote
Тест библиотеки IRremote

Сигналы от пульта принимаются с помощью ИК приемника TSOP4838. (D15). Отправка сигналов с помощью ИК светодиода с длиной волны 940нм подключенного через ключ на транзисторе 2N2222 (D4). Библиотека IRremote имеет возможность отображать состояние момента передачи/приема ИК сигнала (не обязательно). В моих примерах:

  • прием ИК сообщения - моргает зеленый светодиод (D13);
  • отправка ИК сообщения- моргает красный светодиод (D12);
  • синий светодиод - для примера кода включения/выключения с помощью любого ПДУ который есть дома (D14).
Прототип устройства для тестирования IRremote
Прототип устройства для тестирования IRremote

Получение данных с пульта управления.

Для получения данных с ПДУ можно написать простенький скетч.

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

Авторы библиотеки пошли в сторону упрощения использования библиотеки конечным пользователем, и запуск "прослушки" и анализа данных с датчика запускается командой:
IrReceiver.begin(15, true, 13);
Если теперь на датчик направить пульт и нажать кнопку, зелененький светодиод бодро моргает, сигнализируя о том, что пришли данные. Если бодро моргающий светодиод не нужен - можно просто написать: IrReceiver.begin(15);

Пример данных по двум кнопкам с моего пульта SAMSUNG (канал+ канал-)

Результат работы программы
Результат работы программы

Как видим, библиотека IRremote не только отдает сырые данные (отправленное сообщение Raw-Data=0xEF100707), но и дает расшифровку протокола SAMSUNG. Все кнопки моего пульта имеют один адрес Address=0x707. Для каждой кнопки уникальна только команда Command=0x10, а сама библиотека дает возможность отправки команд именно в таком формате.

Чтобы не "чесать репу", как именно это все нужно оформлять в своем коде, разработчики библиотеки дают еще один скетч.

Скетч формирующий готовую команду для отправки ИК сообщения
Скетч формирующий готовую команду для отправки ИК сообщения

На выходе получаются 2 готовых строки кода, которых можно просто "скопипастить" в свою программу.

Результат работы программы
Результат работы программы
  • sendSamsung(0x707, 0x12); канал +
  • sendSamsung(0x707, 0x10); канал -

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

Отправка команд бытовой технике.

Пример скетча будет совсем простой канал+1, ждем 5 секунд, канал-1, ждем 5 секунд.

Пример управления телевизором Samsung.
Пример управления телевизором Samsung.

Вместо объекта IrReceiver у нас появляется объект IrSender
IrSender.sendSamsung(0x707, 0x12, 0);
Последняя цифра в этой строчке - число повторов отправки команды. У меня работает и с нулем.

Управление светодиодом с помощью любого пульта от бытовой техники.

В Последнем примере с помощью кнопки переключения каналов будем включать и выключать светодиод который подключен к 14 выводу. Вот тут, как раз удобнее воспользоваться данными Raw-Data, которые были получены в результате работы первого скетча.

  • программа + Raw-Data=0xED120707 ВКЛ светодиод
  • программа - Raw-Data=0xEF100707 ВЫКЛ светодиод

Сырые данные, можно добыть, обратившись к свойству объекта IrReceiver
IrReceiver.decodedIRData.decodedRawData;

Пишем код:

Зажигаем и гасим светодиод.
Зажигаем и гасим светодиод.

Теперь клацая кнопку канал "+" светодиод будет зажигаться, канал "-" гаснуть.

Выкидываем все лишнее:

Код без отладки
Код без отладки

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

Судя по данным гитхаба у данной библиотеки 53 автора, что говорит о большом объёме проделанной работы по расшифровке ИК протоколов различных фирм производителей. Одиночке такое написать не под силу. Лично мне данная библиотека понравилась больше, чем IRremoteESP8266, и в следующий мой проект пойдет именно она.

Все примеры кода из статьи качайте по этой ссылке.

Если информация была полезной, не забываем ставить лайк и подписаться на канал.

Полный список статей доступен по этой ссылке:
Список всех статей канала ESP32 и Arduino

Всем удачи!