среда, 27 июля 2022 г.

Crestron и ESP8266 приём ИК команд (Arduino IDE)

Была задача:

Принимать инфракрасные команды при помощи ESP8266 (у меня была версия Node MCU v3) и посылать результат в Crestron.


Краткое описание функционала:

Настраиваем подключение ESP к WiFi, поднимаем TCP сокет, принимаем ИК команду и посылаем её в TCP сокет.




Подробнее:

Подключаем наверно любой ИК приёмник, похожий как на фото. 

При помощи библиотеки IRrecv, принимаем ИК команду с любого пульта и получаем в переменную results.value значение в uint64. И по идее её надо отправить в TCP сокет при помощи команды client.write(value), но эта функция не кушает данные типа long long integer.

    Пробовал по всякому, но наиболее приемлемый способ оказался такой:

        Получаем ИК команду E0E020DF (11100000 11100000 00100000 11011111) - 4 байта.

        Забираем каждые пол байта каждый в свою переменную: 

            1110 0000 1110 0000 0010 0000 1101 1111

            E      0        E      0      2        0       D      F 

        Создаём функцию, где сравниваем полученные пол байта с цифрами 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. И если равно, то возвращаем результат в char.

        Например: если полученное = 1, то вернуть '1'; если полученное = 13, то вернуть '13'.

        Важно писать в одинарных кавычках, что означает "вернуть значение в char, а не в string".

        Складываем все сконвертированные char'ы в переменную hex3.

        И шлём в TCP сокет client.write(hex3).


В Крестроне настраиваем TCP клиент на IP адрес ESP, на порт, указанный в скетче.

Сравниваем полученную команду с той которая нам нужна. Например E0E020DF - кнопка "1" пульта от Samsung телевизора. И если равно, то переключаем одно из реле процессора.


Код скетча для ESP8266 в Arduino IDE: github.com/Bagunda/ESP8266_IR_to_TCP/blob/main/ESP_TCP_Server.ino


Крестроновская программа: github.com/Bagunda/ESP8266_IR_to_TCP/blob/main/TCPclientESP_IR.smw




Диденко Александр. t.me/Bagunda 

Комментариев нет: