ウェブブラウザを使って遠隔地から自宅の家電(今回は液晶テレビ)を赤外線で操作してみた。
赤外線受信モジュール | CRVP1738 fo=38KHz |
送信用赤外線LED | OSI5FU5111C-40 λ=940nm If(max)=100mA Vf=1.35-1.6V |
※現在CRVP1738は入手困難。
※OSI5FU5111C-40は半減角が15°と狭い(指向性が強い)ので照射方向がかなりシビアだ。もう少し半減角の広いLEDの方がいい。
Raspberry PiのOSバージョンの確認
2012-12-16-wheezy-raspbian
$ uname -a
Linux raspberrypi 3.2.27+ #250 PREEMPT Thu Oct 18 19:03:02 BST 2012 armv6l GNU/Linux
準備
$ sudo apt-get update
$ sudo apt-get dist-upgrade
$ sudo apt-get upgrade
LIRCをインストール
$ sudo apt-get install lirc
ファームウェアのアップデート
$ sudo wget http://goo.gl/1BOfJ -O /usr/bin/rpi-update
$ sudo chmod +x /usr/bin/rpi-update
$ sudo rpi-update
ドライバの設定。回路に合わせて、使用するGPIOのピンを受信がGPIO4(ピン7)、送信がGPIO17(ピン11)と設定する。ちなみに、デフォルトでは、受信がGPIO18、送信がGPIO17である。
$ sudo nano /etc/modules
:
lirc_dev
lirc_rpi gpio_in_pin=4 gpio_out_pin=17
リブートしてドライバーの確認
$ sudo reboot
:
$ dmesg | grep lirc
[ 12.912771] lirc_dev: IR Remote Control driver registered, major 248
[ 13.033477] lirc_rpi: module is from the staging directory, the quality is unknown, you have been warned.
[ 13.055223] lirc_rpi lirc_rpi.0: lirc_dev: driver lirc_rpi registered at minor = 0
[ 13.075415] lirc_rpi: driver registered!
[ 14.031796] lirc_rpi: auto-detected active low receiver on GPIO pin 4
[ 14.624119] input: lircd as /devices/virtual/input/input0
2つのドライバが確認できる
$ lsmod | grep lirc
lirc_rpi 7109 0
lirc_dev 10156 1 lirc_rpi
キャラクタデバイス(メジャー=248、マイナー=0)が作成される
$ ls -l /dev/lirc*
crw-rw---T 1 root video 248, 0 2月 21 12:54 /dev/lirc0
GPIOピンへの割り当てが正しく反映されていることを確認
$ sudo mount -t debugfs debugfs /sys/kernel/debug
$ cat /sys/kernel/debug/gpio
GPIOs 0-53, bcm2708_gpio:
gpio-4 (lirc_rpi ir/in ) in hi
gpio-16 (led0 ) out hi
gpio-17 (lirc_rpi ir/out ) in lo
実際にリモコンのボタンを押して赤外線を照射すると、次のようにパルス列を認識する。
$ mode2 -d /dev/lirc0
space 2432460
pulse 3436
space 1638
pulse 500
space 313
pulse 499
:
リモコンボタンを学習する。irrecordコマンドの指示に従って、リモコンのボタンを押して赤外線を照射する。この学習の結果が、~/lircd.confに保存される。
$ irrecord -n -d /dev/lirc0 ~/lircd.conf
~/lircd.confのnamaeの項目をわかりやすい名前に変更するなどして、最終的なLIRCの設定ファイルにする。
$ nano ~/lircd.conf
:
name AQUOS
:
$ sudo cp ~/lircd.conf /etc/lirc/
もうひとつ、LIRCの設定ファイルを次のように編集する。
$ sudo nano /etc/lirc/hardware.conf
# /etc/lirc/hardware.conf
#
# Arguments which will be used when launching lircd
LIRCD_ARGS="--uinput"
#Don't start lircmd even if there seems to be a good config file
#START_LIRCMD=false
#Don't start irexec, even if a good config file seems to exist.
#START_IREXEC=false
#Try to load appropriate kernel modules
LOAD_MODULES=true
# Run "lircd --driver=help" for a list of supported drivers.
DRIVER="default"
# usually /dev/lirc0 is the correct setting for systems using udev
DEVICE="/dev/lirc0"
MODULES="lirc_rpi"
# Default configuration files for your hardware if any
LIRCD_CONF=""
LIRCMD_CONF=""
LIRCDがブート時に自動起動するよう設定し、LIRCDを開始する。
$ sudo update-rc.d lirc defaults
$ sudo /etc/init.d/lirc start
リモコンボタンが正しく登録されたことを確認
$ irsend LIST "" ""
irsend: AQUOS
$ irsend LIST AQUOS ""
irsend: 000000000000688b power
irsend: 000000000000d880 disp
irsend: 000000000000ab84 size
irsend: 0000000000009a86 halt
irsend: 0000000000008489 catv
irsend: 0000000000005a46 3digit
irsend: 000000000000f147 preference
:
リモコンのボタンを押して赤外線を照射し、学習したボタンが正しく認識されることを確認する。
$ irw
0000555af1484a8b 00 select AQUOS
0000555af1484a8b 01 select AQUOS
0000555af1481b8f 00 right AQUOS
0000555af1480481 00 down AQUOS
0000555af148eb80 00 left AQUOS
0000555af148ea81 00 up AQUOS
:
今度は学習したリモコンボタンの信号が送信されることを確認する。
$ irsend SEND_ONCE AQUOS power
$ irsend SEND_ONCE AQUOS up down left right select
赤外線LEDが発光している事を肉眼で確認することはできないが、携帯のカメラやデジカメなどを通してみると確認できる。オシロで確認した出力波形(GPIO17の電圧)は次の通り。
フレーム信号の先頭。3.5msのマーク、1.6msのスペースで始まり、その後ろにデータビットが続く。データビットの0は400usのマーク+400usのスペース。データビットの1は400usのマーク+800usのスペース。このケースの場合、0101010101011010...つまり16進で555A...と読み取れる。
拡大。38KHz、デユーティー50%の搬送波になっている。
最後にWebIOPiを使ってコンテンツを作成する。WebIOPiを使う特別な理由はない。WebIOPiよりもっとスマートな方法があるかもしれない。私のような馬鹿チョンでも出来る方法を選んだまでである。
WebIOPiサーバとMJPG_Streanerの自動起動を設定する。
$ sudo nano /etc/rc.local
:
(cd /home/pi/telecon ; sudo python telecon.py) &
export PLUGINPATH=/usr/local/lib
sudo mjpg_streamer -i "$PLUGINPATH/input_uvc.so -f 25 -r 320x240 -d /dev/video0" -o "$PLUGINPATH/output_http.so -w /usr/local/www -p 8001" &
exit 0
(左)ウェブブラウザの画面(右)SHARP AQUOS 液晶テレビ用リモコンGA826WJSA