Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Использование ИК-пульта дистанционного управления с Raspberry Pi без LIRC

Я хотел получить ИК-пульт для Raspberry Pi. Мне удалось установить и протестировать LIRC. Все было хорошо, кроме самого последнего шага. Когда я хотел передать значение ИК-ключа удаленного доступа программе Python, оно не передает его правильно. Он передает нулевое значение для любой клавиши. Я не мог понять, что случилось. Я сдался и пытаюсь написать код на Python для захвата ИК-пульта без использования LIRC.

После некоторого чтения о том, как ИК-пульт дистанционного управления передает информацию, выяснилось, что используется последовательная связь UART. Я использовал комплект для сборки ИК-пульта ДУ HX1838. ИК-датчик декодирует ИК-волны и последовательно передает данные. Что я сделал, так это последовательно прочитал значение данных, поступающее с ИК-датчика. Это грубый, но простой способ чтения ИК-пульта для простых приложений, которые можно использовать в Raspberry Pi.

Подготовка Raspberry Pi для последовательной связи по UART.

1. Необходимо удалить записи ttyAMA0 в cmdline.txt .

sudo cp /boot/cmdline.txt /boot/cmdline_bp.txt

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

sudo apt-get install python-serial

После установки код Python может использовать его, выполнив импорт серийного номера . .

Код 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


Производственный процесс

  1. Температурный профиль Raspberry Pi с использованием LabVIEW
  2. Считать температуру с помощью DS18B20 | Raspberry Pi 2
  3. Измерение температуры с помощью RASPBERRY PI
  4. Датчик температуры Python и Raspberry Pi
  5. Мониторинг температуры с помощью Raspberry Pi
  6. Удаленный мониторинг погоды с помощью Raspberry Pi
  7. SensorTag для Blynk с использованием Node-RED
  8. Обнаружение молний с помощью Raspberry Pi
  9. Аналоговые датчики без аналоговых входов на Raspberry Pi
  10. Универсальный пульт дистанционного управления Raspberry Pi