Была задача:
Принимать инфракрасные команды при помощи 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



Комментариев нет:
Отправить комментарий