개발블로그
Raspberry pi3에 IR Transmitter & Receiver GPIO로 제어하기. 본문
1. 설치환경
Ubuntu mate 16.04 for RPi3.
2. 준비물
1. RPi3
2. IR Transmitter
3. IR Receiver
3. 설정
1. lirc를 설치한다.
$ sudo apt-get install lirc
2. set '/etc/modules'.
# /etc/modules: kernel modules to load at boot time.
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
lirc_dev
lirc_rpi gpio_in_pin=18 gpio_out_pin=17
- 위의 내용을 '/etc/modules' 에 작성한다.
- gpio 번호는 각자가 꽂은 번호로 설정(RPi3 핀번호가 아닌 MCU의 핀번호로 해야한다).
3. set '/boot/config.txt'.
dtoverlay=lirc-rpi,gpio_in_pin=18,gpio_out_pin=17
- '/boot/config.txt' 의 마지막 줄에 위치한 'dtoverlay' 주석을 해제하고 각 핀 번호를 넣는다.
4. check device.
- 위의 세팅까지 완료후 재부팅 한 뒤 Device가 세팅 되었는지 확인한다.
- 이 때 IR Receiver or Transmitter가 RPi3 GPIO PIN에 꽂은 뒤 진행을 해야한다.
$ ls /dev | grep lirc
- 위 명령어를 통해 'lirc0'가 있는지 확인을 한다.
- 있다면, IR device가 잡히게 되고, 잘 기억해둔다!(아래 hardware 세팅 시 사용하게 된다.)
4. set '/etc/lirc/hardware.conf'.
# /etc/lirc/hardware.conf
#
#Chosen Remote Control
REMOTE="Custom"
REMOTE_MODULES="lirc_rpi"
REMOTE_DRIVER="default"
REMOTE_DEVICE="/dev/lirc0"
REMOTE_SOCKET=""
REMOTE_LIRCD_CONF=""
REMOTE_LIRCD_ARGS="--uinput"
#Chosen IR Transmitter
TRANSMITTER="Custom"
TRANSMITTER_MODULES="lirc_rpi"
TRANSMITTER_DRIVER="default"
TRANSMITTER_DEVICE="/dev/lirc0"
TRANSMITTER_SOCKET=""
TRANSMITTER_LIRCD_CONF="/etc/lirc/lircd.conf"
TRANSMITTER_LIRCD_ARGS="--uinput"
#Disable kernel support.
#Typically, lirc will disable in-kernel support for ir devices in order to
#handle them internally. Set to false to prevent lirc from disabling this
#in-kernel support.
#DISABLE_KERNEL_SUPPORT="true"
#Enable lircd
START_LIRCD="true"
#Don't start lircmd even if there seems to be a good config file
#START_LIRCMD="false"
#Try to load appropriate kernel modules
LOAD_MODULES="true"
# Default configuration files for your hardware if any
LIRCMD_CONF=""
#Forcing noninteractive reconfiguration
#If lirc is to be reconfigured by an external application
#that doesn't have a debconf frontend available, the noninteractive
#frontend can be invoked and set to parse REMOTE and TRANSMITTER
#It will then populate all other variables without any user input
#If you would like to configure lirc via standard methods, be sure
#to leave this set to "false"
FORCE_NONINTERACTIVE_RECONFIGURATION="false"
START_LIRCMD=""
- 우리는 GPIO에 직접 연결하여 사용하므로 "CUSTOM"으로 해준다.
- MODULE에는 lirc_rpi
- driver는 default
- device에는 아까 위에서 확인했던 /dev/lirc0를 선택해준다.
그리고, 잊지않고 LIRCD_ARGS에 '--uinput'을 꼭 넣어준다.
위 config은 그저 따라했을 뿐 상세히 알아보지 못했다. 상세내용은 더 알아봐야한다.
5. REBOOT
- 여기까지 완료가 되었다면 Reboot을 해준다.
4. 테스트
1. IR Receiver
$ sudo /etc/init.d/lirc stop
$ [ ok ] Stopping lirc (via systemctl): lirc.service.
$
$ mode2 -d /dev/lirc0
- 먼저 lircd을 stop한다.
- 이후 mode2 명령을 실행한 뒤 IR Receiver를 향해 아무 리모컨으로 신호를 쏴준다.
- 무엇인가가 계속 주루룩 올라간다면 잘 작동하는 것이다.
2. IR Transmitter
- 먼저 lircd.conf를 설정해야 한다. (IR signal table)
- Remote controll list <- 여기서 알맞은 리모컨을 찾거나, 없으면 IR Receiver와 irrecord 명령어를 이용하여 Signal을 녹화하여 만든다.
- irrecord를 이용하여 signal 녹화하기.
sudo irsend -d /var/run/lirc/lircd1 SEND_ONCE {remote_name} {signal_name}
sudo irsend -d /var/run/lirc/lircd1 SEND_START {remote_name} {signal_name}
sudo irsend -d /var/run/lirc/lircd1 SEND_STOP {remote_name} {signal_name}
- 위의 명령어를 통해 신호을 날려보고 응답을 한다면 되는 것이다.
- remote_name은 필수조건으로 lircd.conf의 remote 아래의 name을 입력해주면 된다.
- signal_name은 필수조건으로 lircd.conf의 remote 아래, code 아래의 name을 입력해주면 된다.
- SEND_ONCE는 신호를 한번, SEND_START는 지속적으로 보내고, SEND_START로 시작한 시그널은 SEND_STOP으로 멈춘다.
마지막으로 이렇게 운용을 하게되면 송신기와 수신기를 따로 운용해야만 운용이 가능하다. GPIO에 송,수신기를 같이 연결할 경우 수신기만 응답을 한다... 이건 좀 더 알아봐야겠다.
반응형
Comments