2016년 11월 13일 일요일

TV 리모콘으로 OpenELEC 조작

IR(적외선) 센서를 라즈베리 파이에 연결하여 TV 리모콘으로 OpenELEC을 조작하도록 해보았다.

RPi와 IR 센서(늘솜 NS-GPIO-04)는 지인에게 얻은 것이고, 리모콘은 VHS/DVD 콤보를 중고로 구입할 때 딸려온 것인데 짝이 맞지 않아서인지 작동이 되지 않아 못쓰고 있었다.

IR 센서 연결


센서 모듈은 조립이 된 상태로 받은 것인데, 센서가 기판의 앞면에 붙어있어서 RPi 2에 꽂는데에 문제가 없다. IR 센서는 RPi의 GPIO18에 연결된다(데이터시트).


디바이스 트리 오버레이 추가


RPi에 IR 센서를 연결하였으면 config.txt 파일을 편집해야 한다. OpenELEC에서는 /flash 디렉터리에 있는데, 파일시스템이 읽기 전용으로 마운트되어 있기 때문에 편집하기 위해서는 쓰기가 가능하도록 마운트해야 한다. SSH로 접속하여 다음의 명령을 실행한다.

openelec:/flash # mount | grep flash
/dev/mmcblk0p6 on /flash type vfat (ro,noatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro)
openelec:/flash # mount -o remount,rw /flash
openelec:/flash # mount | grep flash
/dev/mmcblk0p6 on /flash type vfat (rw,noatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro)

config.txt에 한 줄을 추가하고 리부트한다.

openelec:/flash # tail -1 config.txt
dtoverlay=lirc-rpi


리모콘 테스트


modprobe를 실행하고,

openelec:~ # modprobe lirc_rpi

lircd 프로세스를 종료한 다음,

openelec:~ # killall lircd

다음의 명령을 실행하고 리모콘을 눌러본다.

openelec:~ # mode2 -d /dev/lirc0
space 16777215
pulse 4528
space 4428
pulse 598
...

리모콘의 버튼을 눌렀을 때 출력이 발생하는 것으로 보아, 리모콘이 작동한다는 것을 알 수 있다.


리모콘 기록


irrecord를 실행하여 리모콘의 버튼 하나하나에 이름을 붙인다.

openelec:~ # irrecord --device=/dev/lirc0 /storage/.config/lircd.conf


irrecord의 지시를 따라 키보드와 리모콘을 누르다보면 다음과 같은 파일이 만들어진다.  /etc/lirc/lircd.conf.rpi 파일과 http://lirc.sourceforge.net/remotes/lg/6710CDAL01G 를 참고했다.

openelec:~/.config # more lircd.conf

# Please make this file available to others
# by sending it to 
#
# this config file was automatically generated
# using lirc-0.9.1-git(default) on Sun Nov 13 02:57:53 2016
#
# contributed by
#
# brand:                       LG
# model no. of remote control: 6710CMAM03C
# devices being controlled by this remote:
#

begin remote

  name  LG_6710CMAM03C2
  bits           16
  flags SPACE_ENC|CONST_LENGTH|REPEAT_HEADER
  eps            30
  aeps          100

  header       4518  4441
  one           580  1653
  zero          580   535
  ptrail        579
  repeat        580  1652
  pre_data_bits   16
  pre_data       0x808
  gap          107643
  toggle_bit_mask 0x0

      begin codes
          KEY_POWER                0x7887
          KEY_MUTE                 0xF807
          KEY_VOLUMEUP             0xE817
          KEY_VOLUMEDOWN           0x6897
          KEY_SLEEP                0x43BC
          KEY_1                    0x827D
          KEY_2                    0x42BD
          KEY_3                    0xC23D
          KEY_4                    0x22DD
          KEY_5                    0xA25D
          KEY_6                    0x629D
          KEY_7                    0xE21D
          KEY_8                    0x12ED
          KEY_9                    0x926D
          KEY_0                    0xD22D
          KEY_UP                   0x20DF
          KEY_DOWN                 0x728D
          KEY_LEFT                 0x609F
          KEY_RIGHT                0xE01F
          KEY_ENTER                0xA05F
          KEY_MENU                 0xB24D
          KEY_STOP                 0x708F
          KEY_CHANNELUP            0xC837
          KEY_CHANNELDOWN          0x48B7
          KEY_RECORD               0xA857
          KEY_STOP                 0x708F
          KEY_FASTFORWARD          0x8877
          KEY_REWIND               0x08F7
          KEY_PLAY                 0xB04F
          KEY_BACK                 0x30CF
      end codes

end remote

리부트하면 OpenELEC에서 리모콘을 사용할 수 있다. 키보드나 스마트폰 앱으로 조작하는 것보다 훨씬 편하다.



참고



댓글 없음:

댓글 쓰기