ELECTRONICS

Библиотека 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
СкачатьIRremote-4.7.1.zip · 1,4 МБ

Архивы — копии из официального индекса Arduino, контрольная сумма совпадает. Сверено 19.10.2026.

Приём и отправка команд ИК-пультов: NEC, Sony, Samsung и десятки других протоколов.

Библиотека принимает сигнал с приёмника вроде VS1838B, распознаёт протокол и отдаёт адрес и команду кнопки. В обратную сторону она умеет управлять ИК-светодиодом и притворяться пультом. Начиная с версии 3 интерфейс изменился полностью: объекты IrReceiver и IrSender вместо IRrecv и results, и старые примеры из интернета не компилируются.

Обратите внимание на расширение: подключается IRremote.hpp, а не .h — так библиотека собирается в одном файле скетча, а не в каждом.

Как скачать и установить

  1. Через менеджер — самый простой путь. В Arduino IDE: Инструменты → Управлять библиотеками (Ctrl+Shift+I). Введите IRremote и найдите в списке строку «IRremote by shirriff, z3t0, ArminJo» — одноимённых библиотек бывает несколько, отличаются они автором. Нажмите «Установить».
  2. Конкретная версия — если в чужом проекте указана не последняя. В той же карточке менеджера рядом с кнопкой есть выпадающий список версий: выберите нужную и нажмите «Установить».
  3. Из архива — если нет интернета на рабочем компьютере или менеджер не открывается. Скачайте 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.

Где используется на сайте

Что дальше