라즈베리 파이로 적외선 리모컨
목표: 오래된 에어컨을 아이폰으로 켠다
집에 있는 에어컨이 연식이 좀 되어서 기본적인 에어컨 리모컨으로만 조작이 가능하여 불편하기 때문에, 라즈베이 파이로 리모컨의 적외선 신호를 가로챈 다음 그대로 송출해보자 라는 프로젝트를 추진하였습니다. 인터넷 검색을 해보니 lirc
라는 오래된 도구를 사용하는 방법들만 나왔는데, Debian 12에는 ir-ctl
라는 툴이 내장되어 있습니다. 그래서 최신 정보를 여기 적어둡니다.
신호 가로채기
리모콘 신호를 텍스트 파일로 바꿔주려면 다음 단계를 따릅니다.
집에 굴러다니는 라즈베리 파이에 Debian 12 “bookworm” 을 설치.(여기선 Pi 3B+ 사용)
IR Remote Shield v1.0를 구해서 붙인다.
라즈베리 파이 하드웨어 설정 파일에 다음을 추가. (
sudo vim /boot/firmware/config.txt
로 수정)
dtoverlay=gpio-ir,gpio_pin=18
gpio 18번 핀으로 적외선 수신기의 신호를 받겠다는 설정입니다.
재부팅 해주고
ir-ctl
을 돌려봅시다.
$ ir-ctl -r --mode2
한줄에 하나씩 찍히는 모드2로 적외선 수신기를 가동한다. (ir-ctl
에서 아무 디바이스도 지정하지 않으면 기본값인 /dev/lirc0를 사용하므로 안심)
에어컨 리모컨 신호를 수신기에 쏜다. 화면에 가득 신호가 나오면 성공.
원하는 기능, 예를들어 전원 켜기를 저장하려면,
$ ir-ctl -r --mode2 > poweron.txt
이렇게 준비하고 리모콘으로 수신기에 에어컨 가동하는 신호를 보내준 다음 Ctrl+c 로 중단 해줍니다. 그러면 다음과 같은 내용물이 poweron.txt
에 들어있게 됩니다.
pulse 603
space 17853
pulse 3006
space 8968
pulse 503
space 469
// 약 350라인 반복 ...
timeout 대략 큰 숫자
기록된 파일 마지막 줄의 timeout <큰 숫자>는 송신에 불필요하니 삭제 해줍시다.
옛날 에어컨 리모콘은 매번 송신할 때마다 에어컨의 모든 상태를 전부 송신하기 때문에(stateless protocol?) 원하는 상태마다 리모콘 신호를 텍스트 파일로 기록해두면 상태 마다 재송신 할 수 있습니다. 하지만 결국 필요한 것은 최대 출력으로 켜기, 끄기 둘 뿐이긴 합니다.
리모콘 신호 보내기
제가 구입한 IR Remote Shield 유닛이 불량인지, 뭔가 설정 착오인지는 모르겠으나, 송신 기능이 동작하지 않아서 송신기는 별도로 제작해야 했습니다. 이런 블로그를 보고, 빵판이랑 이것저것을 사모았습니다만, 최종적으로 필요한 것은 IR LED, BC547 트랜지스터, 약간의 전선들입니다. LED 사양에 따라서 저항이 필요할 수도 있습니다.
GPIO의 5V, 그라운드, 17번 핀을 사진과 같이 LED와 트랜지스터에 연결해준 다음,
/boot/firmware/config.txt
를 다시 수정해줍니다.
// 수신 기능은 꺼줍니다.
# dtoverlay=gpio-ir,gpio_pin=18
dtoverlay=gpio-ir-tx,gpio_pin=17
재부팅 해주면 이제 하드웨어는 준비가 끝났습니다. 기록해둔 poweron.txt
신호를 송출하기 위해서는
$ ir-ctl --send poweron.txt
이렇게 하면 라즈베리 파이가 17번 핀을 통해 컨트롤 신호를 트랜지스터로 넣어주고 적절하게 LED를 조작해줌으로써 기록해둔 적외선 신호를 그대로 송출합니다.
문제해결
아쉽지만 인간은 적외선을 볼 수 없기 때문에, 이 장치는 디버깅 하기가 상당히 귀찮습니다. 라즈베리 파이의 NOIR 카메라 모듈이나 퀘스트3의 패스스루 카메라들은 적외선도 여과없이 포착할 수 있기 때문에 송신기가 작동하고 있는지 확인하기 좋습니다.
활용하기
이렇게 와이파이에 연결된 라즈베리 파이로 에어컨을 조작하면, Shortcuts를 사용해서 자동화도 가능하고 iOS 제어 센터에 Shortcuts 위젯을 넣어두면 손쉽게 아이폰으로도 조작할 수 있어 편리합니다.