README.md 7.8 KB

IR-PC-HID-Remote

Arduino ProMicro/Leonardo (ATmega32U4) basierter IR Empfänger als USB HID Gerät. Sendet alle Tasten direkt als Tastaturkommandos an den PC.

In habe das an einem Nachmittag/Abend entwickelt um eine vorhandene alte Fernsteuerung einer alten Hauppauge TV-Karte mit meinem mit Windows 10 und KODI betriebenen Media Center PC benutzen zu können. Ursprünglich wollte ich nur einen einfachen Arduino-basierten Empfänger (das Code Example IRrecvDumpV2) aufbauen, der die empfangenen Codes seriell an den PC überträgt, welche dann dort von einem Agent-Programm in Tastencodes umgesetzt werden.

Tests haben gezeigt, dass das aus verschiedenen Gründen weniger zuverlässig ist, vor allem timingkritische Vorgänge sind auf der MCU besser aufgehoben. Daraus ist dann dieser Arduino-Sketch mit direkter USB-HID-Unterstützung geworden, da ich zufällig noch einen ATmega 32U4 basierten "ProMicro" clone herumliegen hatte.

Der Code ist simpel gestrickt und die Tastencodes meiner Fernsteuerung sind hard coded. Also eher ein prove-of-concept.

Hardware

Simpler Aufbau aus einem IR Receiver wie z.B. TSOP38238 und einem Arduino-kompatiblen "ProMicro" MCU Board. Wichtig ist die ATmega 32U4 MCU - nur diese unterstützt den notwendigen USB Modus.

Anschluss IR-Receiver => MCU-Modul: Output => GPIO-2 Vcc => 5V GND => GND

Software

Aufbauend auf das Arduino IRrecvDumpV2 code example.

Libraries

  • Arduino v1.8.13, Arduino AVR Boards v1.8.3
  • HID-Project v2.8.2 Für die USB-HID Kommunikation, da die in Arduino (Stand Arduino IDE v1.8.13 mit Arduino AVR Boards v1.8.3) enthaltenen HID-Funktionen keine Media Keys wie Play/Pause, Stop, etc. unterstützen.
  • IRRemote v2.0.1

Features

  • IR codes empfangen, in Tastaturcodes umsetzen und via USB-HID an den angeschlossenen PC senden
    • Media Keys wie Play/Pause, Stop, Fast-Forward, Rewind... als entsprechende "Media Keyboard" Tastendrücke
    • Sleep/Herunterfahren durch kurz/lang drücken der Power-Taste
    • Steuerkreuz auf Pfeiltasten zur Menünavigation
  • die wichtigsten Tasten der Fernbedienung senden die naheliegenden Befehle,
  • Sondertasten willkürlich festgelegte Tastenkombinationen, z.B. um mit AutoHotkey ein Programm zu starten, wenn die blaue Taste der Fernbedienung gedrückt wurde
  • Mehrfachauslösung bei gehaltener Taste unterdrücken (außer bei bestimmten Tasten)

Fernbedienung Hauppauge

Diese Fernbedienung sendet RC5 12-bit Codes.

RC5-Fernbedienungen wechseln bei jedem Tastendruck ein Togglebit, so dass der "Adressteil" des Codes 2 abwechselnde Werte hat, d.h. dies wechselt bei jedem Tastendruck. Hält man eine Taste gedrückt, wird sie fortlaufend mit dem selben Togglebit erneut gesendet, so dass ein Wechsel eindeutig aussagt, dass die Taste dazwischen losgelassen wurde.

Die IRremote library erzeugt daraus 3-stellige HEX codes, deren erste Stelle (in meinem Code als Prefix bezeichnet) je nach Status des Togglebit immer 7 oder F ist.

IR-Code demzufolge: 0x7** oder 0xF** - ** siehe Tabelle

Fernbedienung IR-Code Tastencode
Home/Go BB WINDOWS-Taste
Power BD System Sleep (kurz), Shutdown (lang)
TV 9C CTRL+ALT+WIN+F1
Videos 98 CTRL+ALT+WIN+F2
Music 99 CTRL+ALT+WIN+F3
Pictures 9A CTRL+ALT+WIN+F4
Guide 9B CTRL+ALT+WIN+F5
Radio 8C CTRL+ALT+WIN+F6
Pfeil nach links ← 96
Pfeil nach oben ↑ 94
Pfeil nach rechts → 97
Pfeil nach unten ↓ 95
OK A5 RETURN
Back/Exit 9F BACKSPACE
i/MENU 8D ESC
Prev.Ch A4
Volume + 90 MEDIA VOLUME UP (repeat aktiv)
Volume - 91 MEDIA VOLUME DOWN (repeat aktiv)
Volume Mute 8F MEDIA VOLUME MUTE
CH + A0 PAGE UP
CH - A1 PAGE DOWN
◉  REC B7
◼  STOP B6 MEDIA STOP
►  PLAY B5 MEDIA PLAY/PAUSE
❚❚  PAUSE B0 MEDIA PLAY/PAUSE
◄◄  REWIND B2 MEDIA REWIND (repeat aktiv)
►►  FAST FORWARD B4 MEDIA FAST FORWARD (repeat aktiv)
❚◄  PREVIOUS A4 MEDIA PREVIOUS TRACK
►❚  NEXT 9E MEDIA NEXT TRACK
1 81 1
2 82 2
3 83 3
4 84 4
5 85 5
6 86 6
7 87 7
8 88 8
9 89 9
0 80 0
* 8A
# 8E
RED 8B CTRL+ALT+WIN+F7
GREEN AE CTRL+ALT+WIN+F8
YELLOW B8 CTRL+ALT+WIN+F9
BLUE A9 CTRL+ALT+WIN+F10

AutoHotkey

Um Aktionen auf die Tastenkombinationen der Sondertasten auszuführen verwende ich ein simples AHK-Script.

Beispiel:


; * beliebige weitere taste
; ^ CTRL
; ! ALT
; # windows key
; + SHIFT
; 

; #^!F1::
; 	;MsgBox You pressed Win+Strg+Alt+F1
; Return
; 
; #^!F2::
; 	;MsgBox You pressed Win+Strg+Alt+F2
; Return
; 	
; #^!F3::
; 	;MsgBox You pressed Win+Strg+Alt+F3
; Return
; 	
; #^!F4::
; 	;MsgBox You pressed Win+Strg+Alt+F4
; Return
; 
; #^!F5::
; 	;MsgBox You pressed Win+Strg+Alt+F5
; Return
; 
; #^!F6::
; 	;MsgBox You pressed Win+Strg+Alt+F6
; Return
; 
; #^!F7::
; 	;MsgBox You pressed Win+Strg+Alt+F7
; Return

#^!F8::
	;MsgBox You pressed Win+Strg+Alt+F8
	Run, switchToApp.ahk SPOTIFY
Return

; #^!F9::
; 	MsgBox You pressed Win+Strg+Alt+F9
; Return

#^!F10::
	;MsgBox You pressed Win+Strg+Alt+F10
	Run, switchToApp.ahk KODI
Return