카테고리: Raspberry Pi

라즈베리파이 LIRC 활용 #1

서론

이번에는 A리모컨에서 신호를 받으면 똑같은 기능을 하는 B리모컨의 버튼을 송신하는 node.js 앱을 만들어보고, 재부팅했을 때에도 항상 돌아가게 서비스로 만드는 방법을 알아보도록 하겠습니다.

개발 환경

pi@raspberrypi:~ $ node –version
v4.2.1

pi@raspberrypi:~ $ forever –version
v0.15.3

pi@raspberrypi:~ $ forever-service –version
forever-service version 0.5.10

0.5.10

 

lirc_node

lirc_node는 node에서 lirc를 다루기 위한 모듈입니다. node.js가 설치되어있지 않다면 외부 블로그의 글 http://blog.xcoda.net/86 을 참고하여 설치를 하고 npm을 통해 lirc_node를 설치합니다.

pi@raspberrypi:~ $ npm install lirc_node
lirc_node@0.0.4 node_modules/lirc_node

그리고 새로운 node.js 프로젝트 파일을 생성하고 합니다.(저는 lirc_server.js로 짓겠습니다) 그리고 아래의 내용 중에서 ‘TIENA-custom’이 A 리모컨이고 ‘BRITZ-T3400’이 B 리모컨입니다. A 리모컨의 버튼 입력을 B 리모컨의 신호로 송신하는 코드입니다.

pi@raspberrypi:~ $ nano lirc_server.js
lirc_node = require(‘lirc_node’)

lirc_node.init();
lirc_node.addListener(function(data){
console.log(“Received ” + data.key + ” from remote ” + data.remote);
if(data.remote == ‘TIENA-custom‘){
lirc_node.irsend.send_once(‘BRITZ-T3400‘,data.key);
console.log(“Sending ” + data.key + ” to remote BRITZ-T3400″);
}
});

저장하고 텍스트 에디터를 종료한다음 실제로 실행해봅시다. 실행을 하면 아무것도 나타나지 않지만 리모컨으로 입력을 주면 반응합니다.

pi@raspberrypi:~ $ node lirc_server.js
Received KEY_VOLUMEUP from remote TIENA-custom
Sending KEY_VOLUMEUP to remote BRITZ-T3400
Received KEY_VOLUMEDOWN from remote TIENA-custom
Sending KEY_VOLUMEDOWN to remote BRITZ-T3400
Received KEY_MUTE from remote TIENA-custom
Sending  KEY_MUTE to remote BRITZ-T3400

실제로 송신하고 있는지는 휴대폰 카메라를 켜서 적외선 LED을 매우 근접해서 비추고 있으면 적외선이 나오는 것이 보라색 빛으로 나타나는 것으로 확인할 수 있습니다.

forever-service

이러한 리모컨 전달 앱은 라즈베리파이가 껐다 켜져도 시작할 수 있어야 쓸모가 있습니다. node.js 프로젝트를 서비스처럼 활용하기 위하여 forever-service 모듈이 있습니다. npm로 -g 옵션으로 /usr/lib/node_modules에 설치되도록 그리고 관리자 권한으로 forever-service와 종속 모듈인 forever을 forever, forever-service 순서대로 설치합니다.

pi@raspberrypi:~ $ sudo npm install forever -g
npm WARN optional dep failed, continuing fsevents@1.1.2
/usr/local/bin/forever -> /usr/local/lib/node_modules/forever/bin/forever
forever@0.15.3 /usr/local/lib/node_modules/forever
├── object-assign@3.0.0
├── path-is-absolute@1.0.1
├── colors@0.6.2
├── clone@1.0.2
├── timespan@2.3.0
├── optimist@0.6.1 (wordwrap@0.0.3, minimist@0.0.10)
├── cliff@0.1.10 (eyes@0.1.8, colors@1.0.3)
├── nssocket@0.5.3 (eventemitter2@0.4.14, lazy@1.0.11)
├── prettyjson@1.2.1 (colors@1.1.2, minimist@1.2.0)
├── winston@0.8.3 (cycle@1.0.3, async@0.2.10, stack-trace@0.0.10, eyes@0.1.8, isstream@0.1.2, pkginfo@0.3.1)
├── utile@0.2.1 (async@0.2.10, deep-equal@1.0.1, ncp@0.4.2, i@0.3.5, mkdirp@0.5.1, rimraf@2.6.2)
├── shush@1.0.0 (strip-json-comments@0.1.3, caller@0.0.1)
├── nconf@0.6.9 (ini@1.3.4, async@0.2.9, optimist@0.6.0)
├── flatiron@0.4.3 (director@1.2.7, optimist@0.6.0, prompt@0.2.14, broadway@0.3.6)
└── forever-monitor@1.7.1 (minimatch@3.0.4, ps-tree@0.0.3, broadway@0.3.6, chokidar@1.7.0)

pi@raspberrypi:~ $ sudo npm install forever-service -g
npm WARN deprecated swig@1.4.2: This package is no longer maintained
/usr/local/bin/forever-service -> /usr/local/lib/node_modules/forever-service/bin/forever-service
/usr/local/bin/get-forever-config -> /usr/local/lib/node_modules/forever-service/bin/get-forever-config
forever-service@0.5.10 /usr/local/lib/node_modules/forever-service
├── commander@2.3.0
├── async@0.9.2
├── shelljs@0.3.0
├── walker@1.0.7 (makeerror@1.0.11)
└── swig@1.4.2 (optimist@0.6.1, uglify-js@2.4.24)

node.js 앱을 서비스로 등록하기 위해서는 ‘sudo forever-service install -s node소스파일.js 서비스이름’ 과 같이 입력합니다. node소스파일.js는 소스의 경로(상대경로든 절대경로든 상관없습니다.) 서비스이름은 ‘/etc/init.d/서비스이름’ 할 때 그 이름입니다. 저는 소스파일이름과 서비스이름을 같게 쓰겠습니다.

pi@raspberrypi:~ $ sudo forever-service install -s lirc_server.js lirc_server
forever-service version 0.5.10

Platform – Raspbian GNU/Linux 9 (stretch)
foreverpath not found
lirc_server provisioned successfully

Commands to interact with service lirc_server
Start – “sudo service lirc_server start”
Stop – “sudo service lirc_server stop”
Status – “sudo service lirc_server status”
Restart – “sudo service lirc_server restart”

forever-service 모듈이 알아서 운영체제를 찾고 그에 맞추어 설정파일을 만들어줍니다. 어떻게 서비스를 시작/종료/상태확인/재시작을 하는지 명령어를 알려줍니다.

그리고, 이 서비스가 라즈베리파이가 부팅될 때 자동으로 실행되게 하기 위해 systemctl 명령어로 등록을 해줍니다.

pi@raspberrypi:~ $ sudo systemctl enable lirc_server
lirc_server.service is not a native service, redirecting to systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable lirc_server

그리고 마지막으로 한가지 더 해야할 것이 있습니다. 기본적으로 forever-service로 만든 서비스는 터미널, GUI같이 그래픽이 불러져야 자동으로 시작합니다. 이를 라즈베리파이가 켜지기만 하면 자동으로 실행되기 위해서 아래의 파일을 삭제해줍니다. 강조 표시되어있는 부분을 본인이 만든 서비스이름으로 바꾸면 됩니다.

pi@raspberrypi:~ $ sudo rm /run/systemd/generator.late/graphical.target.wants/lirc_server.service

이제 재부팅해서 라즈베리파이에 터미널로 접속하지 않고도 A 리모컨의 버튼을 누르면 적외선 LED에서 불 빛이 나는지 확인해봅시다. 완전히 켜질때까지 시간이 조금 걸리니 1~2분 정도의 여유를 가지고 테스트 해보세요.

서비스를 삭제할 때

‘sudo systemctl disable 서비스이름‘ -> ‘sudo forever-service delete 서비스이름‘ 순서로 실행하면 삭제됩니다.

 

 

 

 

Advertisements

라즈베리파이 LIRC(적외선 송수신) 설정

서론

외국인을 위한 튜토리얼은 차후 작성할 예정입니다.
For english developer, I’ll release guide(tutorial) in english as soon as possible.

라즈비안과 lirc의 버전이 올라가면서 웹상의 많은 강좌들을 따라했을 때 제대로 작동하지 않는 문제점들이 있었습니다. 이에, 제가 라즈베리파이로 lirc 기능을 구현하면서 설정했던 방법을 강좌로 다루고자 합니다.

기존의 강좌와 다른점은 강조 표시를 하겠습니다.

계속 읽기 “라즈베리파이 LIRC(적외선 송수신) 설정”