ПОДКЛЮЧЕНИЕ ИК приемника и передатчика к ESP8266 Библиотека IRremoteESP8266

Сегодня мы подключим библиотеку IRremoteESP8266 к нашему проекту.

Теперь скетч будет обладать функцией отправки команд на бытовую технику по ИК интерфейсу.

Команды будем получать с использованием библиотеки aREST. Для этого допишем маленькую функцию, которая будет взаимодействовать с ИК светодиодом. Функция будет вызываться по GET запросу вида: http://ipadres:8080/irc?volume=551520375, где число после знака равно – код команды который будет передан на IR излучатель.

Как подключить излучатель?

ИК светодиод подключаем непосредственно, без резистора, анод к контакту 14 ESP8266, катод подключаем к GND. Внимание! ИК сигнал формируется короткими импульсами, это позволяет сформировать мощный ИК сигнал. Если подать на контакт 14 логическую 1, на долгое время светодиод выйдет из строя.

Как подключить приемник?

tsop1738_pins

OUT подключаем на 12 ногу ESP8266

Скетч чтения команд с пульта:

/*
 * IRremoteESP8266: IRrecvDemo - demonstrates receiving IR codes with IRrecv
 * An IR detector/demodulator must be connected to the input RECV_PIN.
 * Version 0.1 Sept, 2015
 * Based on Ken Shirriff's IrsendDemo Version 0.1 July, 2009, Copyright 2009 Ken Shirriff, http://arcfn.com
 */

#include <IRremoteESP8266.h>

int RECV_PIN = 12; //an IR detector/demodulatord is connected to GPIO pin 2

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.print(results.value, HEX);
    Serial.print(" = ");
    Serial.println(results.value, DEC);
    irrecv.resume(); // Receive the next value
  }
  delay(100);
}

 

Скетч проекта:

#include <ESP8266WiFi.h> //https://github.com/esp8266/Arduino

//needed for library
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h> //https://github.com/tzapu/WiFiManager
#include <ESP8266SSDP.h>
#include <aREST.h>
#include <IRremoteESP8266.h>

const char* serverIndex = "<form method='POST' action='/' enctype='multipart/form-data'><input type='submit' value='Update'></form>";

// Web интерфейс для устройства
ESP8266WebServer HTTP(80);
// aREST и сервер для него
WiFiServer SERVERaREST(8080);
aREST rest = aREST();

IRsend irsend(14);


void setup() {
 // Настраиваем вывод отладки
 Serial.begin(115200);
 

 //Включаем WiFiManager
 WiFiManager wifiManager;
 
 //Если не удалось подключиться клиентом запускаем режим AP
 // доступ к настройкам по адресу http://192.168.4.1 
 wifiManager.autoConnect("AutoConnectAP");
 
 //если подключение к точке доступа произошло сообщаем
 Serial.println("connected...yeey :)");
 //настраиваем HTTP интерфейс
 HTTP_init();

 //запускаем SSDP сервис 
 Serial.printf("Starting SSDP...\n");
 SSDP_init();
 
 Serial.printf("SSDP Ready!\n");
 // регистрируем функцию irControl
 rest.function("irc",irControl);
 // включаем aREST и сервер к нему
 AREST_init();
 Serial.println("aREST Server started");
 Serial.println(ESP.getFreeHeap());
 irsend.begin();
}

void loop() {
 // put your main code here, to run repeatedly:
 HTTP.handleClient();
 delay(1);
 // Handle REST calls
 WiFiClient client = SERVERaREST.available();

 if (!client) {
 return;
 }
 while (!client.available()) {
 delay(1);
 }
 rest.handle(client);
 
}



void SSDP_init(void){
 
 SSDP.setSchemaURL("description.xml");
 SSDP.setHTTPPort(80);
 SSDP.setName("IRC+aREST");
 SSDP.setSerialNumber("001788102201");
 SSDP.setURL("index.html");
 SSDP.setModelName("IRC+aREST");
 SSDP.setModelNumber("000000000001");
 SSDP.setModelURL("http://esp8266-arduinoide.ru/irremoteesp8266/");
 SSDP.setManufacturer("Tretyakov Sergey");
 SSDP.setManufacturerURL("http://www.esp8266-arduinoide.ru");
 SSDP.begin();
}

void HTTP_init(void){
 
 HTTP.on("/index.html", HTTP_GET, [](){
 HTTP.send(200, "text/plain", "Test aREST");
 });
 HTTP.on("/description.xml", HTTP_GET, [](){
 SSDP.schema(HTTP.client());
 });
 HTTP.on("/", HTTP_GET, [](){
 HTTP.sendHeader("Connection", "close");
 HTTP.sendHeader("Access-Control-Allow-Origin", "*");
 HTTP.send(200, "text/html", serverIndex);
 });
 HTTP.begin();
}

void AREST_init(void){
 // Определяем имя name и ИД ID устройства aREST
 rest.set_id("1");
 rest.set_name("aRest");

 // Запускаем сервер
 SERVERaREST.begin(); 
 }

 // Отправка кода через IRremote
 int irControl(String command) {
 // Get state from command
 unsigned long state = command.toInt();
 Serial.println(state);
 irsend.sendNEC(state, 36);
 return 1;
}

Библиотека IRremoteESP8266: https://github.com/markszabo/IRremoteESP8266

Библиотека WiFiManager: https://github.com/tzapu/WiFiManager

Библиотека aREST: https://github.com/marcoschwartz/aREST

Программа пульта: aREST-pult

19 мыслей о “ПОДКЛЮЧЕНИЕ ИК приемника и передатчика к ESP8266 Библиотека IRremoteESP8266”

  1. Приветствую!
    Функция toInt(), возвращает знаковый long, соответственно числа больше 2147483647, не работают. У самсунгов коды большие, например включения 3772793023.

    Если вместо 115 строки поставить так:
    char __command[sizeof(command)];
    command.toCharArray(__command, sizeof(__command));
    unsigned long state = strtoul(__command,NULL,10);
    то считает правильно…

    1. Что то с библиотекой не так? У меня нет устройств для этой библиотеки. Поставил библиотеку примеры собираются.

  2. Подскажите пожалуйса, ИК приёмник обязательно подключать на 12-й GPIO, или можно на другие? На 16-м почему-то не захотер работать.

  3. А как сделать чтобы было можно выбрать протоколы
    Такая штука не работает:
    int irControl(String cmnd, * int p) // Отправка кода через IRremote
    {
    int p;
    unsigned long state = cmnd.toInt();
    switch (p){
    case 0: irsend.sendNEC(state, 32);
    case 1: irsend.sendPanasonic(0x4004, state, 48, 38); // PANASONIC
    }
    delay(100);
    return 1;
    }

    1. Вы задачу подробно опишите. На нормальном человеческом языке. Хочу … нажимать на кнопки на веб страницах и при этом бла бла бла…

      1. Я не про веб страницу. Я про универсальную функцию отправки ИК кодов на ИК диод, как для пультов НЕК, Панасоник и других.

  4. Arduino: 1.6.5 (Windows 8.1), Плата”NodeMCU 0.9 (ESP-12 Module), 80 MHz, 115200, 4M (3M SPIFFS)”

    sketch_jan21a.ino:8:19: fatal error: aREST.h: No such file or directory
    compilation terminated.
    Ошибка компиляции.

    Чё делать?
    Первый скетч сработал нормально

    1. Вопрос решён!
      Оказывается я плохо импортировал библиотеку.
      Скетч – Подключить библиотеку – Добавить .ZIP библиотеку — помогло.

  5. У меня очень много ИК шума выводится в мониторе порта!
    Что делать?
    Я использовал только первый скетч.
    Причём я сперва ошибся и приёмник припаял к 14 ноге.
    А потом припаял к 12.
    Передатчик не припаивал вообще.
    И в обоих случаях в ком порт выводилась примерно такая инфа:
    25AE7EE3 = 632192739
    25AE7EE0 = 632192736
    25AE7EE3 = 632192739
    FCABFFBF = 4239130559
    25AE7EE3 = 632192739
    24AE7D4C = 615415116
    C25B17F8 = 3260749816
    FDAC0152 = 4255908178
    FD4AB5 = 16599733
    22AE7A2A = 581859882
    FEAC02E5 = 4272685797
    FD4AB5 = 16599733
    FFFFFFFF = 4294967295

    Это я нажимал всего одну кнопку на пульте.
    Пробовал нажимать другие.
    Не возможно понять где именно мой ИК код.
    Так почему так получается, что на 14 и на 12 ноге показывало сигнал?
    И как решить проблему?

    1. После переустановки библиотек шума стало сильно меньше.
      А то фотодиод/фотоприёмник выдавал много шума.
      Теперь мало.
      Примерно на 4 команды 1 шум.
      В принципе так уже можно жить

  6. Проблема такая:
    ТВ и приставка к ТВ (IP телевидение от МТС/МГТС) не реагируют на посылы ИК команд.
    Через камеру телефона вижу, что светодиод моргает.
    Но ТВ не реагирует вообще никак.
    Обычно на ТВ светодиод помаргивает если команда хотя бы приблизительно из его набора команд. Но оно даже не моргает.
    Как найти проблему?

  7. в IRremoteESP8266.h есть:
    void sendMitsubishiAC(unsigned char data[]);
    может кто разбирался? 🙂

    задумка: в офисе кондиционер mitsubishi научить включаться и урегулировать климат до начала рабочего времени, с контролем температуры и влажности + вывод данных и управление через web.
    есть:
    wemos d1 r2
    ик приемник KY-022
    ик передатчик KY-005
    часы реального времени DS3231
    датчик температуры и влажности AM2320
    lcd keypad shield до кучи 🙂

  8. А не подскажите в чем может быть печалька, залил в есп 12-2, а шлет какуюто ересь и на телике не работает, пульт такой же как у вас. А библиотеки случайно нет той которой вы использовали?

Добавить комментарий для Александр Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.