Как использовать библиотеку IRremote для отправки и приема ИК-сигналов на Arduino. Какие протоколы поддерживаются. Как настроить ИК-приемник и передатчик. Как декодировать сигналы с пульта ДУ.
Обзор библиотеки IRremote для Arduino
Библиотека IRremote предоставляет широкие возможности для работы с инфракрасными сигналами на платформе Arduino. Она позволяет как отправлять, так и принимать ИК-команды, поддерживая множество популярных протоколов.
Основные возможности библиотеки IRremote:
- Прием и декодирование ИК-сигналов с пультов ДУ
- Отправка ИК-команд для управления устройствами
- Поддержка более 10 распространенных ИК-протоколов
- Совместимость с большинством плат Arduino и ESP32/ESP8266
- Простой API для интеграции в проекты
Поддерживаемые ИК-протоколы
IRremote обеспечивает работу со следующими ИК-протоколами:
- NEC/Onkyo/Apple
- Sony
- RC5/RC6 (Philips)
- Samsung
- JVC
- LG
- Panasonic/Kaseikyo
- Denon/Sharp
- BoseWave
- Lego Power Functions
- Whynter
- MagiQuest
Какой протокол использует ваше устройство? Это можно определить экспериментально с помощью скетча, который выводит в монитор порта параметры принятого сигнала. Большинство бытовых пультов ДУ использует протоколы NEC, Sony или RC5/RC6.

Настройка оборудования для работы с ИК
Для приема ИК-сигналов понадобится ИК-приемник, например TSOP38238. Подключите его выход к цифровому пину Arduino. Питание приемника — 5В, земля — GND.
Для передачи сигналов используется ИК-светодиод. Его анод подключается через резистор 100 Ом к цифровому пину Arduino, катод — на землю. Обычно применяются ИК-светодиоды на 940 нм.
Схема подключения:
- ИК-приемник: OUT -> D2, VCC -> 5V, GND -> GND
- ИК-светодиод: + -> 100 Ом -> D3, — -> GND
Какие еще компоненты могут понадобиться? Для усиления сигнала передатчика можно использовать транзистор. Это позволит управлять устройствами на большем расстоянии.
Прием и декодирование ИК-сигналов
Для приема сигналов с пульта ДУ используется следующий алгоритм:
- Инициализация ИК-приемника
- Проверка наличия нового сигнала
- Декодирование принятых данных
- Обработка команды
Пример кода для приема ИК-сигналов:
«`cpp #includeКак интерпретировать полученные данные? Каждая кнопка пульта передает уникальный код. Составьте таблицу соответствия кодов и функций, чтобы определять нажатую кнопку.

Отправка ИК-команд
Для управления устройствами с помощью ИК-сигналов выполняются следующие шаги:
- Инициализация ИК-передатчика
- Подготовка данных для отправки
- Отправка команды
Пример кода для отправки ИК-команды:
«`cpp #includeКак подобрать правильный код команды? Можно воспользоваться базами данных ИК-кодов для различных устройств или записать нужную команду с оригинального пульта.
Расширенные возможности библиотеки IRremote
Помимо базовой функциональности, IRremote предлагает ряд дополнительных возможностей:
- Отправка raw IR-данных для нестандартных протоколов
- Запись и воспроизведение ИК-последовательностей
- Управление несколькими ИК-передатчиками
- Настройка частоты модуляции сигнала
- Поддержка прерываний для эффективного приема
Как использовать эти функции? Обратитесь к документации библиотеки для детальных примеров и описания API.

Применение IRremote в проектах
Библиотека IRremote открывает широкие возможности для создания различных проектов:
- Универсальный пульт ДУ на базе Arduino
- Автоматизация домашней техники
- Управление LED-лентой с ИК-пульта
- ИК-система безопасности
- Роботы с ИК-управлением
Какой проект можно реализовать с помощью IRremote? Все зависит от вашей фантазии и потребностей. Библиотека предоставляет надежный фундамент для работы с ИК-технологиями.
Решение проблем при работе с IRremote
При использовании библиотеки IRremote могут возникнуть некоторые сложности. Рассмотрим типичные проблемы и способы их решения:
Не удается принять сигнал
- Проверьте правильность подключения ИК-приемника
- Убедитесь, что используется поддерживаемый протокол
- Попробуйте изменить расстояние до пульта ДУ
- Исключите влияние внешних источников ИК-излучения
Команды не доходят до устройства
- Проверьте подключение и исправность ИК-светодиода
- Убедитесь в правильности отправляемого кода команды
- Попробуйте усилить сигнал с помощью транзистора
- Уменьшите расстояние до управляемого устройства
Что делать, если проблема не решается? Обратитесь за помощью на форумы Arduino или в репозиторий проекта на GitHub.

Альтернативы IRremote
Хотя IRremote является одной из самых популярных библиотек для работы с ИК на Arduino, существуют и альтернативные решения:
- IRLib2 — мощная библиотека с поддержкой множества протоколов
- IRremoteESP8266 — оптимизированная версия для ESP8266/ESP32
- TinyIR — облегченная библиотека для ограниченных ресурсов
Какую библиотеку выбрать? Это зависит от конкретных требований проекта, используемого оборудования и личных предпочтений разработчика.
Библиотека IRremote предоставляет надежный и гибкий инструментарий для работы с инфракрасными сигналами на платформе Arduino. Она позволяет легко интегрировать функции ИК-управления в различные проекты, от простых пультов ДУ до сложных систем автоматизации. Широкая поддержка протоколов и обширная документация делают IRremote отличным выбором как для начинающих, так и для опытных разработчиков.
c++ — Двойное подключение h файла
Вопрос задан
Изменён 1 год 8 месяцев назад
Просмотрен 191 раз
Есть сторонняя библиотека IRRemote для Arduino с таким заголовочным файлом IRremote.h
#ifndef IRremote_h #define IRremote_h ......... #include "IRremoteInt.h" /* * Include the sources here to enable compilation with macro values set by user program. */ #include "irReceive.cpp.h" #include "irSend.cpp.h" #include "IRremote.cpp.h" #endif // IRremote_h #pragma once
В irReceive.cpp.h
есть такой код
IRrecv IrReceiver; IRrecv::IRrecv() { irparams.recvpin = 0; // 44 строка irparams.blinkflag = false; }
Теперь использование.
В своем main.
пишу cpp
#include <IRremote.h> #include "Controller.h" ......
Все компилируется без ошибок. Но если я в Controller.h
тоже добавлю инклуд
#ifndef CONTROLLER_H #define CONTROLLER_H #include <IRremote.h> #include "Settings.h" class Controller { ..... } #endif //CONTROLLER_H
То получаю каскад ошибок линковки
CMakeFiles\Controller.dir\src\main.cpp.obj: In function
IRrecv::IRrecv()
:
C:\PROGRA~2\Arduino\LIBRAR~1\IRremote\src/irReceive.cpp.h:44: multiple definition ofIRrecv::IRrecv()
CMakeFiles\Controller.dir\src\Controller.cpp.obj:C:\PROGRA~2\Arduino\LIBRAR~1\IRremote\src/irReceive.cpp.h:44: first defined here
………
CMakeFiles\Controller.dir\src\controller.cpp.obj: In functionIRrecv::IRrecv()
:
C:\PROGRA~2\Arduino\LIBRAR~1\IRremote\src/irReceive.cpp.h:44: multiple definition ofIRrecv::decode()
CMakeFiles\Controller.dir\src\AirConditionController.cpp.obj:C:\PROGRA~2\Arduino\LIBRAR~1\IRremote\src/irReceive.cpp.h:44: first defined here
Ошибок очень много, но все они ссылаются на одно место irReceive.cpp.h:44
также инклудится в файл Controller.cpp
, где находится реализация класса Controller
Как с этим бороться и откуда возникает эта ошибка? Ведь IRremote.h
содержит include guard. Да, include guard не содержит файл irReceive.cpp.h
, но он инклудится в одном месте в IRremote.h
- c++
- c
- arduino
- include
- стандарт
7
Вот этот код, о котором вы пишете —
IRrecv IrReceiver; IRrecv::IRrecv() { irparams.recvpin = 0; // 44 строка irparams.blinkflag = false; }
оказавшись дважды в разных .cpp-файлах, приводит к появлению объекта IrReceiver
и конструктора в двух файлах. Линковщик не знает, какой выбрать.
Если у вас С++ не очень старый — вас спасет просто добавление слова inline
перед каждым из них.
Если старый — то лучше не заморачиваться, а перенести это все в отдельный .cpp-файл в проекте. Это самое разумное решение — чтобы каждый занимался своим делом: заголовочный файл содержал заголовки-объявления, а файл реализации — содержал реализацию.
1
Оформил я баг-репорт. Если кто еще столкнется с этим багом в этой библиотеке, а баг все еще не закроют, то есть такой обходной путь:
- Вместо
IRremote.h
нужно везде инклудитьIRremoteInt.h
. В этом файле описаны все описания классов. - Ровно в одном cpp файле проекта пишем
#include <IRremote.h>
. Тогда реализация подтягивается только один раз и проект компилируется.
Зарегистрируйтесь или войдите
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
IRremote — ссылка на Arduino
Связь
Отправляйте и получайте инфракрасные сигналы с несколькими протоколами
В настоящее время включены протоколы: Denon/Sharp, JVC, LG/LG2, NEC/Onkyo/Apple, Panasonic/Kaseikyo, RC5, RC6, Samsung, Sony, (Pronto), BoseWave, Lego, Whynter, MagiQuest. Новое: добавлен протокол NEC2 . Улучшенный протокол Magiquest. Добавлена функция sendPulseDistanceWidth(). Примечания к выпуску
Автор: shirriff, z3t0, ArminJo
Сопровождающий: Армин Йоахимсмайер
Прочитать документацию
Перейти в репозиторий
Совместимость
Эта библиотека совместима с avr, megaavr, samd, esp8266, esp32, stm32, STM32F1, mbed, mbed_nano, 0rp2040 архитектуры, так что вы должны быть в состоянии использовать его на следующие платы Arduino:
- Arduino Micro
- Ардуино Леонардо
- Ардуино Мега
- Ардуино МКР ФОКС 1200
- Ардуино МКР GSM 1400
- Ардуино МКР НБ 1500
- Ардуино МКР ВИДОР 4000
- Arduino MKR WAN 1300 (подключение LoRa)
- Ардуино МКР WAN 1310
- Ардуино МКР Wi-Fi 1010
- Arduino MKR ZERO (шина I2S и SD для звука, музыки и цифровых аудиоданных)
- Arduino MKR1000 WI-FI
- Ардуино Нано
- Ардуино Нано 33 BLE
- Ардуино Нано 33 Интернет вещей
- Ардуино Нано Каждый
- Ардуино Уно
- Arduino Uno Wi-Fi REV2
- Ардуино Юн
- Ардуино ноль
Примечание о совместимости
Примечание: хотя предполагается, что библиотека правильно компилируется на этих архитектурах,
для этого могут потребоваться определенные аппаратные функции, которые могут быть доступны только на некоторых платах.
Выпуски
Чтобы использовать эту библиотеку, откройте Диспетчер библиотек в в Arduino IDE и установите его оттуда.
- 3.9.0 (последний)
- 3.8.0
- 3.7.1
- 3.7.0
- 3.6.1
- 3.6.0
- 3.5.2
- 3.5.1
- 3.5.0
- 3.4.0
- 3.3.0
- 3.
2.0
- 3.1.0
- 3.0.3
- 3.0.2
- 3.0.1
- 3.0.0
- 2.8.1
- 2.8.0
- 2.7.0
- 2.6.1
- 2.6.0
- 2.5.0
- 2.2.3
- 2.0.1
- 1.
0.0
IRremote — библиотеки Arduino
Отправка и получение инфракрасных сигналов по нескольким протоколам
- Автор
- shirriff, z3t0, ArminJo
- Сопровождающий
- Армин Йоахимсмейер
- Веб-сайт
- https://github.com/Arduino-IRremote/Arduino-IRremote
- Гитхаб
- https://github.com/z3t0/Arduino-IRremote
- Категория
- Связь
- Лицензия
- НЕТ УТВЕРЖДЕНИЯ
- Тип библиотеки
- Добавлено
- Архитектуры
- avr, megaavr, samd, esp8266, esp32, stm32, STM32F1, mbed, mbed_nano, rp2040
В настоящее время включены протоколы: Denon/Sharp, JVC, LG/LG2, NEC/Onkyo/Apple, Panasonic/Kaseikyo, RC5, RC6, Samsung, Sony, (Pronto), BoseWave, Lego, Whynter, MagiQuest.
Новое: добавлен протокол NEC2. Улучшенный протокол Magiquest. Добавлена функция sendPulseDistanceWidth().
Примечания к выпуску