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

Перехват команд ИК-пульта на Raspberry Pi без LIRC: подход через Python UART

Интеграция ИК-пульта с Raspberry Pi становится простой, если обойти LIRC и обратиться напрямую к последовательному интерфейсу UART. Следующее руководство ведет через весь процесс — от настройки железа до Python-декодирования — чтобы надежно захватывать сигналы пульта с минимальным кодом.

Зачем отказываться от LIRC?

LIRC предоставляет общий фреймворк для ИК-устройств, но может быть избыточен для простых проектов и иногда вводит задержки или проблемы совместимости. Используя встроенные UART-выводы (TX/RX) и протокол последовательной связи низкой скорости, получаете легковесное, детерминированное решение, легче отлаживаемое.

Обзор железа

Шаг 1 — Подготовка Raspberry Pi для UART

1. Резервная копия командной строки ядра:

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

2. Удалите параметры ttyAMA0 (например, console=ttyAMA0,115200 и kgdboc=ttyAMA0,115200) из /boot/cmdline.txt:

sudo nano /boot/cmdline.txt

Результирующая строка должна выглядеть примерно так:

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p6 rootfstype=ext4 elevator=deadline rootwait

3. Замаскируйте приглашение входа ttyAMA0 в /etc/inittab:

sudo nano /etc/inittab

Закомментируйте:

#X:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

Шаг 2 — Установка pySerial

Установите библиотеку Python serial, предоставляющую модуль serial для UART-коммуникации:

sudo apt-get install python-serial

После установки можно импортировать в скрипте:

import serial

Шаг 3 — Подключение ИК-датчика

Шаг 4 — Базовый Python-скрипт для чтения байтов ИК

HX1838 передает последовательный поток на 2400 бод. Следующий фрагмент читает 12–16 байт на нажатие клавиши и печатает их ASCII-коды.

import serial
ser = serial.Serial('/dev/ttyAMA0')
ser.baudrate = 2400
for _ in range(15):  # захват до 15 байт
    byte = ser.read(1)
    print(ord(byte))

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

Шаг 5 — Декодирование клавиш пульта Samsung

Используя пульт Samsung TV, обнаружили, что каждое нажатие дает 12–16 байт:

Для отображения клавиши вычисляем простую взвешенную сумму байтов 6–11:

keyidentity = (byte[6] + 2*byte[7] + 3*byte[8] + 4*byte[9] + 5*byte[10] + 6*byte[11])

Хотя это не самый надежный метод, он дает уникальное значение для каждой кнопки, упрощая сравнение. При желании замените на хеш или XOR для строгой устойчивости к коллизиям.

Полный пример: ir_serial3samsung.py

Ниже — упрощенный скрипт, который:

import serial
ser = serial.Serial('/dev/ttyAMA0', 2400)
while True:
    # Чтение 24 байт для очистки буфера
    raw = ser.read(24)
    # Первые 12 байт соответствуют одному нажатию
    key_bytes = raw[:12]
    key_id = sum((i+1)*b for i, b in enumerate(key_bytes[6:12]))
    print(f'Key ID: {key_id}')

Запустите скрипт и нажимайте кнопки на пульте Samsung. Каждое нажатие печатает уникальный Key ID. Сохраните эти ID в таблице соответствия для маппинга на действия в вашем приложении.

Заключение

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

Для более детальных инструкций см. оригинальный пост: How to Use and Emulate…

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

  1. Точный температурный профиль Raspberry Pi с Python, SQLite и LabVIEW
  2. Как считывать температуру с DS18B20 на Raspberry Pi 2
  3. Измерение температуры на Raspberry Pi с датчиками Maxim 1-Wire и мостом DS2482 I2C
  4. Создание удалённого датчика температуры на Raspberry Pi и Python — пошаговое руководство
  5. Точный мониторинг температуры в серверной на Raspberry Pi
  6. Удалённый мониторинг погоды на Raspberry Pi 3 с PubNub
  7. Интеграция TI SensorTag с Blynk через Node‑RED на Raspberry Pi Zero
  8. Обнаружение молний с Raspberry Pi и AS3935: практическое руководство
  9. Чтение аналоговых датчиков на Raspberry Pi без встроенного АЦП
  10. Создание профессионального универсального пульта на Raspberry Pi с LIRC