레이블이 LIRC인 게시물을 표시합니다. 모든 게시물 표시
레이블이 LIRC인 게시물을 표시합니다. 모든 게시물 표시

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에서 리모콘을 사용할 수 있다. 키보드나 스마트폰 앱으로 조작하는 것보다 훨씬 편하다.



참고