На моем канале уже была статья про то как сделать ПДУ для бытовой техники на базе библиотеки IRremoteESP8266. Сегодня краткий обзор библиотеки IRremote для среды Arduino IDE.
Ссылка на гитхаб https://github.com/Arduino-IRremote/Arduino-IRremote. Последняя версия библиотеки 3.5.2. Перед использованием, необходимо убедиться, что в среде 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. Схема подключения:
Сигналы от пульта принимаются с помощью ИК приемника TSOP4838. (D15). Отправка сигналов с помощью ИК светодиода с длиной волны 940нм подключенного через ключ на транзисторе 2N2222 (D4). Библиотека IRremote имеет возможность отображать состояние момента передачи/приема ИК сигнала (не обязательно). В моих примерах:
- прием ИК сообщения - моргает зеленый светодиод (D13);
 - отправка ИК сообщения- моргает красный светодиод (D12);
 - синий светодиод - для примера кода включения/выключения с помощью любого ПДУ который есть дома (D14).
 
Получение данных с пульта управления.
Для получения данных с ПДУ можно написать простенький скетч.
Авторы библиотеки пошли в сторону упрощения использования библиотеки конечным пользователем, и запуск "прослушки" и анализа данных с датчика запускается командой: 
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 секунд.
Вместо объекта IrReceiver у нас появляется объект IrSender
IrSender.sendSamsung(0x707, 0x12, 0);
Последняя цифра в этой строчке - число повторов отправки команды. У меня работает и с нулем.
Управление светодиодом с помощью любого пульта от бытовой техники.
В Последнем примере с помощью кнопки переключения каналов будем включать и выключать светодиод который подключен к 14 выводу. Вот тут, как раз удобнее воспользоваться данными Raw-Data, которые были получены в результате работы первого скетча.
- программа + Raw-Data=0xED120707 ВКЛ светодиод
 - программа - Raw-Data=0xEF100707 ВЫКЛ светодиод
 
Сырые данные, можно добыть, обратившись к свойству объекта IrReceiver
IrReceiver.decodedIRData.decodedRawData;
Пишем код:
Теперь клацая кнопку канал "+" светодиод будет зажигаться, канал "-" гаснуть.
Выкидываем все лишнее:
Если у вас дома завалялся ПДУ валяющийся без дела, с помощью этой библиотеки Вы легко сможете прицепить его для управления самодельным устройством на базе любого микроконтроллера или ардуино-подобной платформе, список которых был приведен в начале данной статьи. Потребуется только купить или выковырять из старой радиоаппаратуры ИК приемник.
Судя по данным гитхаба у данной библиотеки 53 автора, что говорит о большом объёме проделанной работы по расшифровке ИК протоколов различных фирм производителей. Одиночке такое написать не под силу. Лично мне данная библиотека понравилась больше, чем IRremoteESP8266, и в следующий мой проект пойдет именно она.
Все примеры кода из статьи качайте по этой ссылке.
Если информация была полезной, не забываем ставить лайк и подписаться на канал.
Полный список статей доступен по этой ссылке:
Список всех статей канала ESP32 и Arduino
Всем удачи!