Использование ИК-пульта дистанционного управления с Raspberry Pi без LIRC
Я хотел получить ИК-пульт для Raspberry Pi. Мне удалось установить и протестировать LIRC. Все было хорошо, кроме самого последнего шага. Когда я хотел передать значение ИК-ключа удаленного доступа программе Python, оно не передает его правильно. Он передает нулевое значение для любой клавиши. Я не мог понять, что случилось. Я сдался и пытаюсь написать код на Python для захвата ИК-пульта без использования LIRC.
После некоторого чтения о том, как ИК-пульт дистанционного управления передает информацию, выяснилось, что используется последовательная связь UART. Я использовал комплект для сборки ИК-пульта ДУ HX1838. ИК-датчик декодирует ИК-волны и последовательно передает данные. Что я сделал, так это последовательно прочитал значение данных, поступающее с ИК-датчика. Это грубый, но простой способ чтения ИК-пульта для простых приложений, которые можно использовать в Raspberry Pi.
Подготовка Raspberry Pi для последовательной связи по UART.
1. Необходимо удалить записи ttyAMA0 в cmdline.txt .
- Сначала сделайте резервную копию файла, содержащего параметры ядра cmdline.txt, в виде cmdline_bp.txt.
sudo cp /boot/cmdline.txt /boot/cmdline_bp.txt
- Отредактируйте файл cmdline.txt, удалив параметры, содержащие «ttyAMA0». т.е. «Console =ttyAMA0,115200» и «kgdboc =ttyAMA0,115200».
sudo nano /boot/cmdline.txt
Остающийся файл выглядит так
dwc_otg.lpm_enable =0 console =tty1 root =/ dev / mmcblk0p6 rootfstype =ext4 elevator =крайний срок rootwait
Затем сохраните и закройте редактор. Сохраните файл, Ctrl + O. Закройте редактор, Ctrl + X
2. Обновите inittab файл, чтобы замаскировать ttyAMA0
sudo nano / etc / inittab
Закомментируйте строку
‘X:23:respawn:/ sbin / getty -L ttyAMA0 115200 vt100 ′
#X:23:respawn:/ sbin / getty -L ttyAMA0 115200 vt100
Затем сохраните и закройте редактор. Сохраните файл, Ctrl + O. Закройте редактор, Ctrl + X
Шаг 1. Начало работы
Установка pySerial
- Для работы последовательной связи (UART) необходимо установить последовательный модуль.
sudo apt-get install python-serial
После установки код Python может использовать его, выполнив импорт серийного номера . .
- Затем необходимо подключить GPIO 14 (TX) и GPIO 15 (RX). Поскольку моя цель - принимать ИК-сигналы, я подключил только GPIO 15 (RX).
- ИК-датчик требует подключения 5 В и заземления. Затем выходной сигнал ИК-датчика, подключенного к GPIO 15.
Код Python для чтения ИК-сигнала оказался очень простым. Как следует.
import serialser =serial.Serial ("/dev/ttyAMA0")ser.baudrate =2400for i in range (0,15):# обычно ИК-сигнал для ключа составляет около 12-16 байтов data =ser.read ( 1) # читать по 1 байту за раз print ord (data) # данные считываются в символе, ord преобразуется в значение ASCII
Теперь этот код будет считывать ИК-сигнал по 1 байту за раз и распечатывать значение.
Я попробовал скорость передачи данных методом проб и ошибок и остановился на 2400 бит / с. Хотя последовательная связь поддерживает скорость до 115 Кбит / с, интересно, почему ИК-порт использует более низкую скорость. Я предполагаю, что было бы более надежно использовать более низкую скорость, поскольку меньше вероятность того, что ИК-сигнал потеряет 1 или 2 бита в эфире.
Декодирование ИК-пультов дистанционного управления
Теперь следующий шаг - расшифровать ключевые значения. Для этого я использовал стандартный ИК-пульт от телевизора Samsung.
Первый важный момент - выяснить, сколько байтов данных для каждого ключа. Может варьироваться от 12 до 16 байт. (те, которые я пробовал). Обычно длина байта одинакова для всех ключей. Эти байты имеют байты заголовка, байты данных (для идентификации ключа) и хвостовые байты. Байты заголовка будут иметь подпись для модели ИК-пульта дистанционного управления. Я использовал таблицу Excel для сбора ключевых значений данных после страницы Antzy Carmasaic
http://www.instructables.com/id/How-To-Useemulate-…
Глубоко погрузившись в захваченные значения ключей, можно увидеть, что байты 0-5 состоят из заголовка, повторяющегося для всех ключей. Байты с 6 по 11 значения данных представляют значение ключа. Могут быть какие-то хвостовые значения. Байт 12 - это хвост для пульта дистанционного управления samsung.
Сопоставление ключей
Точный способ для этого пульта - сохранить байты 6-11 в массиве и сравнить его с новым входящим ключом. Вместо этого я использовал простой алгоритм, как показано ниже.
keyidentity =байт [6] + 2 * байт [7] + 3 * байт [8] + 4 * байт [9] + 5 * байт [10] + 6 * байт [11]
Это дает почти уникальное значение для каждого ключа. Вы можете придумать лучший алгоритм, чем этот.
Я расширил код Python для сбора информации удаленного ключа Samsung. После того, как я вычислил сопоставленное значение ключа, я сохранил его в самой программе python.
Файл прилагается. имя - ir_serial3samsung.py. Пульт Samsung отправляет 2 набора данных. Итак, я захватываю 24 байта, чтобы очистить буфер последовательного захвата данных Raspberry Pi. Но для декодирования я использую только 1-й набор.
Когда вы запускаете этот код, он правильно определяет нажатые клавиши. Вы можете расшифровать остальные ключи в пульте дистанционного управления, посмотрев на значение «keyidentity», которое программа распечатывает. Затем добавьте программу, чтобы включить их.
Заключение
Это очень простой и эффективный способ использования пульта дистанционного управления с Raspberry Pi с Python. Вам нужно выяснить, сколько всего байтов для ключа, сколько байтов заголовка, байтов данных и хвостовых байтов. Поскольку вы знаете об этом процессе от А до Я, вы можете легко изменить его в соответствии с вашим приложением. Поскольку это небольшие коды Python, их очень легко отладить, если вы столкнетесь с какой-либо проблемой.
Подробнее:Использование ИК-пульта дистанционного управления с Raspberry Pi без LIRC
Производственный процесс
- Температурный профиль Raspberry Pi с использованием LabVIEW
- Считать температуру с помощью DS18B20 | Raspberry Pi 2
- Измерение температуры с помощью RASPBERRY PI
- Датчик температуры Python и Raspberry Pi
- Мониторинг температуры с помощью Raspberry Pi
- Удаленный мониторинг погоды с помощью Raspberry Pi
- SensorTag для Blynk с использованием Node-RED
- Обнаружение молний с помощью Raspberry Pi
- Аналоговые датчики без аналоговых входов на Raspberry Pi
- Универсальный пульт дистанционного управления Raspberry Pi