ESPsmart » Блог » Подключение ИК приемника к ESP8266
Приглашаем всех желающих, принять участие в тестировании системы управления микроконтроллерами ESP8266/ESP32. Принять участие.

Подключение ИК приемника к ESP8266

Применение инфракрасного излучения набирает обороты в современном мире. Широкое распространение оно получило в электронике. Сегодня мы расскажем об основных принципах технологии, а также разберёмся, как работают ИК-приборы.

IR-технология

IR-технология базируется на передаче информации от передатчика к приёмнику с помощью модулированного инфракрасного излучения через окружающую среду. Передатчиком обычно служит излучающий полупроводниковый диод. Приёмником – чувствительный фотодиод. Передаваемое излучение воздействует на чувствительную зону фотодиода, далее происходит процесс демодуляции сигнала и преобразование его в выходной логический сигнал интерфейса.

В данном процессе большое внимание уделяется среде, через которую идёт передача сигнала, поскольку именно она в основном влияет на качество сигнала.

Технология инфракрасного излучения в течение нескольких десятилетий зарекомендовала себя с лучшей стороны относительно использования радиочастот. Она позволяет:

  • отказаться от использования радиочастот ввиду засорённости радиоэфира;
  • обеспечить скоростную передачу любой информации. В этом случае скорость передачи зависит только от использованного светодиода и усилителя.

TSOP22

TSOP22 – представляет собой небольшой приёмник для ИК-сигнала от устройств дистанционного управления. Основными элементами приемника являются N-P-N транзистор (выходной элемент) и светочувствительный диод.

Принцип работы данного приёмника основан на воздействии луча на транзистор. При попадании излучения с определённой частотой (обычно это 36, 38, 40 кГц) в чувствительную зону происходит открытие транзистора. Тем самым, можно передавать двоичные сигналы, чередуя длинные и короткие импульсы.

Зона видимости между светодиодом и TSOP22 может составлять до 20 метров.

Подключение ИК приемника к ESP8266


Как подключить IR Receiver к ESP8266

Подключение IR приемника довольно простое. У приемника три ноги: GND, 5V и DATA. Подключаем его согласно схеме ниже. ИК приемники есть разных типов, внимательно посмотрите datasheet, так как при неправильном подключении, он может выйти из строя.



Подключаем библиотеку

Библиотека для работы с приемником не относится к стандартным библиотекам, поэтому её скачиваем здесь. Добавляем, как .ZIP библиотеку.





Скетч для ИК приемника ESP8266

Примечание. Большинство приборов поддерживают протокол инфракрасного управления NEC на частоте 38 кГц приведенного в данном скетче. Для получения более подробных данных, используйте скетч из примера по управлению кондиционерами с помощью ESP 8266.

#include <IRremoteESP8266.h>
#include <IRutils.h>

const uint16_t kRecvPin = 2; // D4, ПИН ИК приемника
IRrecv irrecv(kRecvPin);
decode_results results;

void setup() {
  Serial.begin(115200);
  irrecv.enableIRIn();  // Инициализируем ИК приемник
}

void loop() {
  if (irrecv.decode(&results)) { // Если данные пришли, то выполняем код ниже
    serialPrintUint64(results.value, HEX); // Вывод в консоль
    Serial.println("");
    irrecv.resume(); // Принимаем следующий сигнал от приемника
  }
  delay(50);
}


Немного усложним

Подключим дисплей OLED SSD1306 и выведем на него значение кнопок с пульта дистанционного управления. Статьи по подключению дисплея и вывода русских символов, а также скетч, представлены ниже.



Показать / Cкрыть скетч
#include <IRremoteESP8266.h>
#include <IRutils.h>
#include <SSD1306Wire.h>
#include "fontsRus.h" // Добавляем русский шрифт

SSD1306Wire display(0x3c, 5, 4); // D2, D1

const uint16_t kRecvPin = 2; // D4, пин, к которому подключен ИК приемник
IRrecv irrecv(kRecvPin);
decode_results results;
char ircode[10];

void setup() {
  Serial.begin(115200);
  irrecv.enableIRIn();  // Инициализируем ИК приемник
  
  display.init(); // Инициализируем дисплей
  display.flipScreenVertically();
  display.setFontTableLookupFunction(FontUtf8Rus);
  display.setFont(ArialRus_Plain_10);
  display.setContrast(255);
  
  display.clear();
  display.drawString(5, 0, "ИК ПРИЕМНИК");
  display.drawString(5, 20, "Код кнопки:");
  display.drawString(5, 35, "Нет данных");
  display.display();
}

void loop() {
  if (irrecv.decode(&results)) { // Если данные пришли, то выполняем код ниже
    serialPrintUint64(results.value, HEX); // Вывод в консоль
    sprintf(ircode, "%X", results.value); // Преобразуем в строку для вывода на дисплей
    irrecv.resume();
    
    display.clear();
    display.drawString(5, 0, "ИК ПРИЕМНИК");
    display.drawString(5, 20, "Код кнопки:");
    display.drawString(5, 35, ircode); // Выводим считанный код
    display.display();
  }
  delay(100);
}

// Функция для руссификации текста на дисплее
byte FontUtf8Rus(const byte ch) {
  static uint8_t LASTCHAR;

  if ((LASTCHAR == 0) && (ch < 0xC0)) {
    return ch;
  }

  if (LASTCHAR == 0) {
    LASTCHAR = ch;
    return 0;
  }

  uint8_t last = LASTCHAR;
  LASTCHAR = 0;

  switch (last) {
    case 0xD0:
      if (ch == 0x81) return 0xA8;
      if (ch >= 0x90 && ch <= 0xBF) return ch + 0x30;
      break;
    case 0xD1:
      if (ch == 0x91) return 0xB8;
      if (ch >= 0x80 && ch <= 0x8F) return ch + 0x70;
      break;
  }

  return (uint8_t) 0;
}

Оставить комментарий