ウェブブラウザを使って遠隔地から自宅の家電(今回は液晶テレビ)を赤外線で操作してみた。
| 赤外線受信モジュール | 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 -aLinux 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 upgradeLIRCをインストール
$ 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_devlirc_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/input02つのドライバが確認できる
$ lsmod | grep lirclirc_rpi 7109 0lirc_dev 10156 1 lirc_rpiキャラクタデバイス(メジャー=248、マイナー=0)が作成される
$ ls -l /dev/lirc*crw-rw---T 1 root video 248, 0 2月 21 12:54 /dev/lirc0GPIOピンへの割り当てが正しく反映されていることを確認
$ 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/lirc0space 2432460pulse 3436space 1638pulse 500space 313pulse 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 lircdLIRCD_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 modulesLOAD_MODULES=true# Run "lircd --driver=help" for a list of supported drivers.DRIVER="default"# usually /dev/lirc0 is the correct setting for systems using udevDEVICE="/dev/lirc0"MODULES="lirc_rpi"# Default configuration files for your hardware if anyLIRCD_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 powerirsend: 000000000000d880 dispirsend: 000000000000ab84 sizeirsend: 0000000000009a86 haltirsend: 0000000000008489 catvirsend: 0000000000005a46 3digitirsend: 000000000000f147 preference :リモコンのボタンを押して赤外線を照射し、学習したボタンが正しく認識されることを確認する。
$ irw0000555af1484a8b 00 select AQUOS0000555af1484a8b 01 select AQUOS0000555af1481b8f 00 right AQUOS0000555af1480481 00 down AQUOS0000555af148eb80 00 left AQUOS0000555af148ea81 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/libsudo 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