Если нужно отправить команду на телевизор или кондиционер, подключите ИК-светодиод к цифровому выходу платы. Понадобится резистор на 100–220 Ом для ограничения тока. Выходной сигнал формируется с частотой 38 кГц – большинство бытовой техники использует именно этот диапазон.
Стандартные протоколы вроде NEC и Sony поддерживаются из коробки. Для нестандартных вариантов потребуется ручная настройка таймингов. Например, пульты некоторых китайских кондиционеров используют 16-битные адреса вместо 8-битных – это учитывается в коде.
Минимальная задержка между отправками команд – 100 мс. Если интервал меньше, приёмник может проигнорировать сигнал. Для длинных кодов, таких как RC-MM, проверьте буфер: он ограничен 64 байтами.
Работа с инфракрасными сигналами через IRremote h
Подключение и настройка
Установите последнюю версию через менеджер платформ (Arduino IDE 2.x+). Для ESP8266/ESP32 добавьте в platformio.ini строку: lib_deps = IRremote. Аппаратная часть требует ИК-приёмника (VS1838B) и светодиода (940 нм) с резистором 100 Ом.
Пример отправки кодов
Для эмуляции пульта TV Sony передайте HEX-код:
#include <IRremote.hpp>
void setup() {
IrSender.sendSony(0xA90, 12); // Код питания, 12 бит
}
Частота ШИМ – 38 кГц. Для NEC-протокола замените sendSony на sendNEC.
Снижение энергопотребления: на ESP32 активируйте IR_USE_RMT в IRremoteInt.h. Это снижает нагрузку на CPU на 40%.
Подключение и настройка IRremote h на Arduino
Установка
Скачайте архив с GitHub (https://github.com/z3t0/Arduino-IRremote). В Arduino IDE выберите Скетч → Подключить библиотеку → Добавить .ZIP библиотеку и укажите загруженный файл.
Схема соединений
Подключите ИК-приемник TSOP4838 к Arduino:
- VCC – к +5V
- GND – к земле
Для передачи сигналов используйте ИК-светодиод. Анод через резистор 100 Ом – к пину 3, катод – к GND.
Проверка работы
Для отправки команд модифицируйте скетч IRsendDemo, заменив значение 0xFFA25D
на полученные ранее коды.
Примеры кода: отправка и приём сигналов
Отправка команды на пульт
Чтобы передать сигнал NEC, используйте этот фрагмент:
#include <IRremote.hpp>
void setup() {
IrSender.begin(3); // Пин 3 для передачи
}
void loop() {
IrSender.sendNEC(0xFF00FF, 32); // Адрес 0xFF00FF, 32 бита
delay(1000);
}
Для Sony-протокола замените sendNEC
на sendSony
с 12-битным адресом.
Считывание входящих данных
Для декодирования сигналов добавьте в скетч:
#include <IRremote.hpp>
void setup() {
Serial.begin(9600);
IrReceiver.begin(2); // Пин 2 для приёма
}
void loop() {
if (IrReceiver.decode()) {
Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
IrReceiver.resume();
}
}