Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

IR-Fernbedienungsbefehle auf Raspberry Pi ohne LIRC erfassen: Python UART-Ansatz

Die Integration einer IR-Fernbedienung mit einem Raspberry Pi ist unkompliziert, wenn man LIRC umgeht und direkt auf die UART-Serienschnittstelle zugreift. Der folgende Leitfaden führt durch den gesamten Prozess – von der Hardware-Einrichtung bis zum Python-Decoding – damit Sie Fernbedienungssignale mit minimalem Code zuverlässig erfassen können.

Warum LIRC überspringen?

LIRC bietet ein generisches Framework für IR-Geräte, kann aber für einfache Projekte überdimensioniert sein und manchmal Latenz oder Kompatibilitätsprobleme verursachen. Durch die Nutzung der eingebauten UART-Pins (TX/RX) und eines Low-Speed-Serialprotokolls erreichen Sie eine leichte, deterministische Lösung, die einfacher zu debuggen ist.

Hardware-Überblick

Schritt 1 – Raspberry Pi für UART vorbereiten

1. Kernel-Kommandozeile sichern:

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

2. ttyAMA0-Parameter entfernen (z. B. console=ttyAMA0,115200 und kgdboc=ttyAMA0,115200) aus /boot/cmdline.txt:

sudo nano /boot/cmdline.txt

Die resultierende Zeile sollte ähnlich aussehen wie:

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

3. ttyAMA0-Login-Prompt maskieren in /etc/inittab:

sudo nano /etc/inittab

Auskommentieren:

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

Schritt 2 – pySerial installieren

Installieren Sie die Python-Serial-Bibliothek, die das serial Modul für UART-Kommunikation bereitstellt:

sudo apt-get install python-serial

Nach der Installation können Sie es in Ihrem Skript importieren:

import serial

Schritt 3 – IR-Sensor verdrahten

Schritt 4 – Basales Python-Skript zum Lesen von IR-Bytes

Der HX1838 überträgt einen seriellen Strom mit 2400 bps. Das folgende Snippet liest 12–16 Bytes pro Tastendruck und gibt ihre ASCII-Codes aus.

import serial
ser = serial.Serial('/dev/ttyAMA0')
ser.baudrate = 2400
for _ in range(15):  # bis zu 15 Bytes erfassen
    byte = ser.read(1)
    print(ord(byte))

Versuch und Irrtum zeigte, dass 2400 bps die zuverlässigste Erfassung bietet, wahrscheinlich weil niedrigere Geschwindigkeiten die Bitfehlerwahrscheinlichkeit über die Luft reduzieren.

Schritt 5 – Samsung-Fernbedienungstasten decodieren

Mit einer Samsung-TV-Fernbedienung stellten wir fest, dass jeder Tastendruck 12–16 Bytes liefert:

Um eine Taste zu mappen, berechnen wir eine einfache gewichtete Summe der Bytes 6-11:

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

Obwohl dies nicht die robusteste Methode ist, liefert sie einen eindeutigen Wert für jede Taste, was den Vergleich trivial macht. Ersetzen Sie sie gerne durch einen Hash oder XOR, wenn Sie strengere Kollisionsresistenz benötigen.

Vollständiges Beispiel: ir_serial3samsung.py

Unten ist ein optimiertes Skript, das:

import serial
ser = serial.Serial('/dev/ttyAMA0', 2400)
while True:
    # 24 Bytes lesen, um Puffer zu leeren
    raw = ser.read(24)
    # Erste 12 Bytes entsprechen einem Tastendruck
    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}')

Führen Sie das Skript aus und drücken Sie Tasten an der Samsung-Fernbedienung. Jeder Tastendruck gibt eine eindeutige Key ID aus. Speichern Sie diese IDs in einer Lookup-Tabelle, um sie in Ihrer Anwendung auf Aktionen zu mappen.

Fazit

Die Verwendung von UART und einem einfachen Python-Skript zur Erfassung von IR-Fernbedienungssignalen eliminiert die Notwendigkeit für LIRC, reduziert Latenz und bietet volle Kontrolle über die Dekodierungslogik. Da der Code minimal und transparent ist, ist Debugging unkompliziert. Sie können dieses Muster für jede IR-Fernbedienung anpassen, die serielle Daten ausgibt, was es zu einer vielseitigen Lösung für Raspberry Pi Projekte macht.

Für detailliertere Anweisungen siehe den Originalbeitrag: How to Use and Emulate…

Herstellungsprozess

  1. Präzises Raspberry Pi Temperaturprofiling mit Python, SQLite und LabVIEW
  2. Temperatur mit DS18B20 am Raspberry Pi 2 auslesen
  3. Temperaturmessung mit Maxim 1-Wire Sensoren und DS2482 I2C-Bridge am Raspberry Pi
  4. Fern-Temperatursensor mit Raspberry Pi & Python bauen – Schritt-für-Schritt-Anleitung
  5. Präzise Temperaturüberwachung im Server-Schrank mit Raspberry Pi
  6. Remote-Wetterüberwachung mit Raspberry Pi 3 & PubNub
  7. TI SensorTag mit Blynk via Node-RED auf Raspberry Pi Zero integrieren
  8. Blitzdetektion mit Raspberry Pi und AS3935: Praktischer Leitfaden
  9. Analoge Sensoren am Raspberry Pi ohne nativen ADC auslesen – Step-Response Methode
  10. Professionelle Raspberry Pi Universalfernbedienung mit LIRC bauen