Библиотека IRremote
- В менеджере библиотек
- IRremote by shirriff, z3t0, ArminJo
- Версия
- 4.7.1 · всего 44 версии, первая — 1.0.0
- Платы
- AVR — UNO, Nano, Mega, Pro Mini, Nano Every, UNO WiFi Rev2, SAMD — Zero, MKR, Nano 33 IoT, ESP8266, ESP32, STM32, STM32F1, Raspberry Pi Pico, UNO R4 и ещё 4
Архивы — копии из официального индекса Arduino, контрольная сумма совпадает. Сверено 19.10.2026.
Приём и отправка команд ИК-пультов: NEC, Sony, Samsung и десятки других протоколов.
Библиотека принимает сигнал с приёмника вроде VS1838B, распознаёт протокол и отдаёт адрес и команду кнопки. В обратную сторону она умеет управлять ИК-светодиодом и притворяться пультом. Начиная с версии 3 интерфейс изменился полностью: объекты IrReceiver и IrSender вместо IRrecv и results, и старые примеры из интернета не компилируются.
Обратите внимание на расширение: подключается IRremote.hpp, а не .h — так библиотека собирается в одном файле скетча, а не в каждом.
Как скачать и установить
- Через менеджер — самый простой путь. В Arduino IDE: Инструменты → Управлять библиотеками (Ctrl+Shift+I). Введите
IRremoteи найдите в списке строку «IRremote by shirriff, z3t0, ArminJo» — одноимённых библиотек бывает несколько, отличаются они автором. Нажмите «Установить». - Конкретная версия — если в чужом проекте указана не последняя. В той же карточке менеджера рядом с кнопкой есть выпадающий список версий: выберите нужную и нажмите «Установить».
- Из архива — если нет интернета на рабочем компьютере или менеджер не открывается. Скачайте ZIP выше, затем Скетч → Подключить библиотеку → Добавить .ZIP библиотеку и укажите файл. Распаковывать не нужно.
Файл IRremote.hpp отдельно не скачивают: он внутри библиотеки и появляется после установки. Если среда пишет IRremote.hpp: No such file or directory — библиотека не установлена или установлена не та. Как устроен менеджер и куда складываются файлы — в общей статье про библиотеки.
Строка подключения:
#include <IRremote.hpp>Создание объекта — обычно до setup():
#define IR_PIN 2
IrReceiver.begin(IR_PIN, ENABLE_LED_FEEDBACK); // в setup(); объект IrReceiver уже естьМетоды
Только то, что нужно в обычном скетче. Сигнатуры сверены с версией 4.7.1.
IrReceiver.begin(uint8_t pin, bool ledFeedback)- Запустить приём на выводе. Второй параметр — мигать встроенным светодиодом при приёме.
IrReceiver.decode()- true, если принята и разобрана посылка. Проверять в loop().
IrReceiver.decodedIRData.command- Код кнопки — то, по чему различают кнопки пульта.
IrReceiver.decodedIRData.address- Адрес устройства — у всех кнопок одного пульта одинаковый.
IrReceiver.decodedIRData.protocol- Протокол: NEC, SONY, SAMSUNG… UNKNOWN — не распознан.
IrReceiver.decodedIRData.flags & IRDATA_FLAGS_IS_REPEAT- Признак повтора при удержании кнопки — чтобы не считать его новым нажатием.
IrReceiver.printIRResultShort(&Serial)- Напечатать протокол, адрес и команду одной строкой — для разведки пульта.
IrReceiver.resume()- Разрешить приём следующей посылки. Обязательно после decode().
IrSender.begin(uint8_t pin)- Настроить отправку через ИК-светодиод на выводе.
IrSender.sendNEC(uint16_t address, uint16_t command, uint8_t repeats)- Отправить команду по протоколу NEC; есть аналоги для других протоколов.
Пример
#include <IRremote.hpp>
#define IR_PIN 2
void setup() {
Serial.begin(9600);
IrReceiver.begin(IR_PIN, ENABLE_LED_FEEDBACK);
}
void loop() {
if (IrReceiver.decode()) {
if (!(IrReceiver.decodedIRData.flags & IRDATA_FLAGS_IS_REPEAT)) {
IrReceiver.printIRResultShort(&Serial); // протокол, адрес, команда
switch (IrReceiver.decodedIRData.command) {
case 0x45: Serial.println("Кнопка 1"); break; // коды — от вашего пульта
case 0x46: Serial.println("Кнопка 2"); break;
}
}
IrReceiver.resume();
}
}Сначала запустите скетч и понажимайте пульт: коды кнопок появятся в мониторе. Их и подставляют в switch.
На чём попадаются
Пример из старой статьи не компилируется
Версия 3+ сломала совместимость. IRrecv, results.value, irrecv.enableIRIn() больше нет — используйте IrReceiver и decodedIRData.
Каждое нажатие приходит несколько раз
Пульт шлёт повторы, пока кнопка удерживается. Отсеивайте по флагу IRDATA_FLAGS_IS_REPEAT.
Протокол UNKNOWN
Пульт с редким протоколом или помехи от лампы. Проверьте decodedIRData.decodedRawData — сырое значение стабильно для одной кнопки, и его можно использовать напрямую.
Не работает вместе с Servo или tone()
Конфликт таймеров. В IRremote можно выбрать другой таймер через define перед include — см. файл IRTimer.hpp.