fc2ブログ

Raspbmc GPIO IR remote (IRモジュールでLIRCリモコン)

ジャンクから剥がしたiRモジュールと¥105@HARDOFFのリモコンでRaspbmcがさらに快適になりました。感触としてはXbox DVDリモコン+USBレシーバーを超越した感じ。

下の画像中、色を付けたキーネームは有効を確認。

raspbmc_ir_remote_key_mapping_sample_01.jpg


Raspberry piを弄りRaspbmcにハマリかけた頃、想像以上にサクサク動くのでリモコンがあるとさらに便利だなあと【Raspbmc remote】で検索。すると海外のサイトではGPIO+IRモジュールを利用した記事・レポートが数多くヒットするのに対し、国内ではXboxのUSBレシーバーを使った記事しか得られませんでした。
(もしかすると日本ではすでに解決済み?)
ならばIRモジュールを繋いでラジオボタンをONにしてリモコンタイプを合わせればいいだけ?。
ダメじゃん。悩んでハマってターミナルからシステム覗いて英語のフォーラム読んで・・・。

最初にhttp://www.raspbmc.com/に飛び、そのFAQへ
 Q: Is my remote supported?
 A: You can see a list of compatible remotes here
とあるのでそこに行ってみたら
XBOX DVD playback remoteの他、GPIO Receiver based Remote というリンク。
辿り着いたのが(リンク→)http://forum.stmlabs.com/showthread.php?tid=5549

向こうのフォーラムではいろんなメーカーのリモコンを使った設定ファイルがアップされ賑やかです。ビビる必要もなさそうなのでとりあえず自分もやってみる事にしました。


【今回やった事】

●Raspbmc GPIO TSOP IR Receiver準拠の受光部の製作
●Xbox DVDリモコンのキーネーム推測とリモコン操作可能な機能の確認
●irrecordでジャンクリモコンの設定ファイル作成①
●irrecordでジャンクリモコンの設定ファイル作成②
●Xbox DVDリモコン+USBレシーバーのボタン再設定(機能変更)

以上ですが、順番と内容は前後して被ったりします。Linuxについては初歩的なコマンドしか使えませんので非効率な操作が目立つかも。また日本でも既出なのかも知れませんが情報を得たのは上記リンクの海外のフォーラムのみです。

20140305_001.jpg



【用意した物】

●IRモジュール(IRセンサー)
私はHARD OFFで買ったリモコン欠品ジャンクのフォトフレームから剥がした赤外線モジュールを使いました。
海の向こうでは型番がどうのこうの、ラジオシャック(海の向こうのでっかいマルツ)に注文して何日で到着とか言ってますが、こと日本ではジャンク利用の他、秋月やAitendoで新品が¥50~¥100です。
(2014年3月現在、RadioShackだと1コが$4.49もするんですね)
 ↑日本なら部品付のジャンク製品が丸ごと買えるプライス!

マイコン+リモコンのLチカで有名な?赤外線モジュールとかIRモジュールとか赤外線受光素子とかIRリモコン受光モジュールと呼ばれている部品です(で、本名は?)。中心周波数38KHz前後、対応波長=赤外線、出力TTL(C-MOS)の負論理。ここまでは秋月・Aitendoの商品で言えばほとんど一緒。
今回重要なのは電源電圧で、3.3Vでの動作が可能な物。比較的新しいデバイスなら電源電圧は下が2.7V程度・上限5.5V程度になっているようですが、ロジック電圧=5Vが巾を利かせていた時代の物になると3.3Vでは動作しない物もあります。

(リンク→)秋月・リモコン受光部
akiduki_ir_senser.jpg


(リンク→)aitendo センサー>赤外線
aitendo_ir_senser.jpg


ジャンクからのハゲタカとなると思い浮かぶのがipod用のリモコン対応ドッキングアンプ、フォトフレーム、外付けチューナー、リモコン対応オーディオなど(ピン配置は実装された状態からパターンを追って推測)。
ビデオデッキのジャンクから剥がした物は3.4V以上必要でダメ。電源電圧を5Vにして出力を3.3Vレベルに落とす方法もある事はありますが、部品(抵抗)を増やすくらいなら他を探した方が早いような。
20140305_002.jpg


フォトフレームから剥がしたヤツをチェック。Active-Low(暇な時がHiレベル)です。オシロが無い場合はアナログが見れるテスターを出力に当て、リモコンのボタンを押した時に針(あるいはバーグラフ)が下方向へ振れればOKでしょう。
raspbmc_gpio_ir_receiver_03.jpg


50cmのワニ口ケーブルを使いバラックの状態でこれだけ綺麗な波形。パスコン類は必要ないと思います。
raspbmc_gpio_ir_receiver_02.jpg


●Raspberry PiのGPIOヘッダに繋がるピンソケットorヘッダソケットと電線
買い置きのヘッダソケットを使いました。勇者であればGPIOヘッダに直接ハンダ付けも有り。フォーラムではPCパーツ活用=内蔵CD/DVDドライブのアナログ音声出力とサウンドカードを繋ぐケーブルを推奨。
20140305_003.jpg


●ターミナルソフト(とPC)
Raspbmc起動中のraspberry PiにSSHで接続できるもの。Tera Termを使用しました。
(リンク→)窓の杜Tera Term

●テスター、オシロスコープ
無くても全く問題ありませんが、IRモジュールの動きに不安を感じた場合はあると便利。

●適当なリモコン
XBMCですからXboxを原点と捉え、Xboxリモコンをベースに選択しました。
上下左右+決定(OK)を備えているもの。他のボタンは適当に振り分けますが終了ダイアログを出すボタン、音声のボリュームをコントロールするボタンなども登録できました←Xboxリモコン+USBレシーバーでも再設定すれば可能(後述)。


【GPIO IR Receiver の製作】

RaspbmcのフォーラムにあるようにIRレシーバーを製作。
RspbmcのGPIO 赤外線レシーバーシステムの呼称が【GPIO TSOP IR Receiver】なんですね。
この【TSOP】ってパーツの固有プリフィックスが部品選択をタイトにしてしまっているような。

●モジュールのOUT(出力)をGPIOの【18番】、あとは3.3VとGNDだけです。
海外サイトでは動作が安定しないとか電源に抵抗を通せ?とか、定石通りにパスコン入れたら、など色々囁かれていますが、出てくる信号が超早いCW(モールス信号)みたいなモノだけですので数十センチのケーブルであれば不要だと思います。
20140305_004.jpg


TSOP-****じゃない、得体の知れない3.3V動作確認済みモジュールで完成。
USBレシーバーに比べてこの簡潔さ。貴重なUSBの電源も使いません。
raspbmc_gpio_ir_receiver_04.jpg


ほとんどが正面から見て(Front View)左からOUT/GND/Vcc。違う物もあるようです。
20140305_005.jpg



【設定ファイル作成の準備・利用可能なキー(ボタン)ネームの確認】

以下、フォーラム記載の手順を適当和訳しながら勝手に付け加えたメモです。

●LANにRaspberry Piを接続してRaspbmcを起動

●Raspbmc上、システム→システム情報→概要
 IPアドレスを確認
raspbmc_system_info.jpg


●プログラム→Raspbmc Settings→IR Remote→Enable GPIO TSOP IR Receiver 【OFF】
 念のため止めておきました。
raspbmc_settings_01.jpg


●同→System Configuration→Service Management→SSH Server 【ON】確認
raspbmc_settings_02.jpg


●ターミナルからRaspberry PiのIPアドレスにSSHで接続
 user:pi
 pass:raspberry
tera_term_01.jpg


tera_term_log_in.jpg

初回の接続時は文字セットなどを聞かれるがALL→Asia→Tokyo・・・適当

●プロンプトが出たら赤外線受信のテスト
↓コピペ可能ですが、Tera Termのペーストは Ctrl+v では無いので要注意
sudo modprobe lirc_rpi
sudo kill $(pidof lircd)
mode2 -d /dev/lirc0

リモコンのボタンを適当に押しその都度、space *****、pulse ****がボロボロ表示されればLIRC、IRモジュールとリモコンが動いている証拠。これから先はほぼ大丈夫です。この際ですから手元に揃うリモコンで色々と確認、全部反応。
(万一すべてのリモコンでspace ****、pulse****が出ない場合はIRセンサー周辺を確認。リモコン本体の動作はデジカメ越しに赤外線LEDを見て点検。)
lirc_test.jpg


●Ctrl+cで脱出(電源を落としたり、リブートする必要は無し)

●↓のコマンドでキーリストを取得
   (表を作りましたが登録時にコピペするなら出てきたリストをメモ帳などに)

irrecord --list-namespace | grep KEY

登録の際、リスト掲載以外のキーネームは蹴られます。KEY_HUNTER=丹波哲郎や千葉真一が一発で登場するボタンは登録できません、、、、、オヤジギャグ。
恐るべしLIRC。赤外線フルキーボードも作れそう(CTRLがない)。DVDで慣れているskip(チャプター移動)などが見当たりませんがそれに等しい物は有(後述)。
※キーリストはXboxリモコン+USBレシーバーを活用されている方にも有益です。
raspbmc_irrecord_key_list_01.jpg

raspbmc_irrecord_key_list_02.jpg


●この中から現実的に使うキーを選別しなければなりません
 想像で浮かぶ動作に対し同じような言葉が複数あり、それらを個別に実験して対応動作を探るのも面倒です。USBレシーバーを使ったXboxのリモコン操作にほぼ満足できたのでまずはそれに準拠とすべく、その設定ファイルを読んでみます。

↓(コピペ可)下の画像の右側を読むだけですから飛ばしてもOK
less /etc/lirc/xbox-lircd.conf
(スペースキーで下まで読んで(END)が出たらQキーで脱出)

下がXboxのリモコンとキーネームを突き合わせてみたものです(USBレシーバー版)。
※コードはUSBレシーバーの出力なので無視。
xbox-ircd_conf.jpg

※DVDリモコンにあるskip+/-は NEXTSONG/PREVIOUSSONG?。
実用段階で再振り分けをするとしてまずはこのキーネーム群を使うことにします。
(使用するリモコンの選択に悩むより早く作業を始めたかったので最初は同じリモコンを選びました。)


【リモコンの設定ファイル作成 方法①】
 (上記作業からの一連ですのでRaspbmc/ターミナルを再起動する必要はありません)
 
●まず使うボタンのキーリストを【きちんと】用意(登録途中の混乱防止)。

●操作自体は簡単で、ターミナルに現れるirrecordの指示(タイミングの学習・キーの登録・必要ならトグルビット?の判定)に一連で従えば /home/pi/ に設定ファイルが生成されます。

老婆心ながら、、、
※1:コマンド最後のlircd.confが生成されるファイルの名前です。拙稿を参考に複数のリモコンでそれぞれの設定ファイルを作る場合や、とりあえずの実験時は名前を変えないとファイルが積もって見苦しくなります。
(lircd.confというファイル名についてはシンボリックリンクが通っているようなので完全版として使う物をこのファイル名に)
※2:ボタン登録段階でSomething went wrong.が出て何度やっても失敗する事があります。その場合は一旦終了してリトライ。

↓ではコマンド(コピペ可)
irrecord -d /dev/lirc0 ~/lircd.conf

20140305_006.jpg


●最初にリモコン固有のタイミングを測るようです。Enterを2回押して10秒以内に適当なボタンを押し続けます。
ドットが伸びますが1~2秒程度押して一度離し、すぐにまた1~2秒押す、、、を繰り返した方が良い結果に(下の画像中、黄色のあたりで一旦ボタンを離す)。

●ドットが終りメッセージが出たらボタンを離す。
20140305_009a.jpg


●上記操作で取得したデーターはリモコンによってバイナリにエンコードできる物とエンコードできず受信データーをrawのまま(モールス信号のママ)扱う形に分かれるようです。
どちらでも動きますので心配は無用でした。
20140305_008.jpg


●ドットが終って表示が出てその3行目。No header data と出た場合、次の操作(ボタン登録)でSomething went wrong.が出て先に進めなくなる可能性がアリ(最初から最後まで押しっぱなしにしてしまうとコレが出やすい感じ)。
その場合はEnterで終了してやり直し。
20140305_007a.jpg


●ボタンの登録

2つ上の画像では既にその作業に入っていますが、使うキーネームを打ち込んで、対応させるボタンを押して、、の繰り返し作業です。感覚的にピッと押せはデーターが取得され、すぐに次のキーネーム指定に進みます。

例)
①Prease enter the name for the next button と聞いてくるので
②例えばOKボタン登録なら KEY_OK (Enter)
 (スペルミスやキーリストに無い場合は叱られて再入力) 
③リモコンのOKボタンを押す
④Got it.と来たら次のキーネームを入力

ボケっとしてどのボタンまで進んだのかわからなくなったりして、、、。

※最初がすんなり通れば最後まで進めました。
Something went wrong.が出るのは一つ前の段階でタイミングかヘッダー情報の取得に失敗している場合みたい。
潔くやり直すしかありませんでした。

全部終ったらEnter。リモコンによってはこの後にトグルビットの確認?があり、任意のキーを連打せよと言ってくる場合もあり。

●確認

irrecordが作った設定ファイル(lircd.conf)を拝見してみましょう。

less /home/pi/lircd.conf

下はXbox DVD Playback remote kit /date code 2245P(←電池ボックス内のシールに明記)を使って作ったものです。当然ですが同じリモコンでもUSBレシーバーを使ったものとは異なっています。
20140305_010.jpg

上は24bitにバイナリエンコードができていますが、rawモードで作られるとコードの部分が振幅の巾を計った数字でコテコテになります。ファイルも長くなりますが最後にend remoteで結ばれていれば多分大丈夫。

以上でターミナルからの操作は終り。Tera Termはそのまま閉じてOK。

●Raspbmcの設定変更

PCのターミナル操作からRaspbmcに身体を移動し、GPIO IR remote Profile を今作った物に変更します。

20140305_011.jpg



Enable GPIO IR TSOP Receiver 【ON】
[GPIO IR Remote Profile →Custom (Lircd.conf on Pi's home folder)]
 ↑
設定ファイルをRaspberry Piのホームディレクトリ(/home/pi/)にあるlircd.conf に。すなわち先程作ったlircd.confに変更。

※複数のリモコンは使わないのならば、今回作ったlircd.confを/etc/lircにある他のconfファイルに上書きする必要もないです。

[OK]で閉じれば恐らく再起動を聞いてくると思います。→[YES]
再起動後、info windowにSTARTING LIRCが出て消えれば使用可能状態になっています。


【2014年2月末時点での考察】

●解った事と嵌った(やり始めた)原因など
メニューにあるXboxのリモコンならGPIO TSOP IR Receiverを有効すれば設定ファイルもUSB用からGPIO用に自動選択されると思った。
しかし各リモコンに対して設定ファイルは一つしか存在せず(メニューで指定するリモコンの設定ファイルは[Custom]を除き /etc/lirc/リモコンタイプ.confみたい)、xbox-lircd.confは明らかにUSBレシーバー用。
[GPIO IR Remote Profile →Custom (Lircd.conf on Pi's home folder)]つったって、インストール直後のホームディレクトリは空だし、もしもここで[Custom]を指定してしまうと無いファイルを探し続けるのか?、Raspbmcが固まることがあった。

20140308_015.jpg

ムカつくのは日本製のリモコン無いじゃん。DVDプレヤー用とか、家電流用でも昔なら日本製が占めていたはず。今の日本には趣味の達人はもう凄い人が沢山いらっしゃいますがメーカーは、、、ってコト?。

※今回のようにirrecordで作ったGPIO IR レシーバー(IRモジュール)用の設定ファイルを/etc/lirc/xbox-lircd.confに上書き後、Enable GPIO TSOP IR ReceiverをON、リモコンタイプをXboxにするとUSBレシーバーは使えなくなりますが、GPIOレシーバーで動作します。
(メニューの[Xboxリモコン]は/etc/lirc/xbox-lircd.confに掛かっている。)

20140305_012.jpg


●項目名:GPIO IR Remote Profile のうち、最初の[GPIO]が余計じゃないの? 又は[USB]入れるとか。
 ↑コレこそが嵌った(勘違いした)最大の原因
2014年3月の時点では IR Remote Profile (USB or GPIO) だと思います。

熱中して気分転換できたし、他のリモコンでも使えて電源OFFやボリューム・音声ミュートできることも解ったので良しとしましょう。高価なhama remoteとか、買わずに済んで幸い。



【リモコンの設定ファイル作成 方法②】

irrecordを使ってボタンを登録して行くのは①と同じ。①の作業で苛々したのはキーネームを打ち込む時のスペルとか、途中でどこまで登録したか解らなくなるボタンでした。
ならば最初は適当な一連のキーネームを登録し、その後にエディタ(nano/vi)でキーネームを変更する事に。
これならWindowsのスクリーンエディタも使えますし、、、。

●HARD OFFにて購入。最近気付きましたがジャンクのリモコンは液漏れの有無によって値段が違うみたい。安いと思って電池のフタを開けると、、、まあ数百円なら高い方(綺麗な方)となる訳です。
今回使うのは得体の知れないリモコンなので液漏れが無くとも格安。電源ボタン、ミュート、ボリューム、、、欲しい物は揃っています。

※使いもしないだとろうと考えていたカラーボタン(赤・緑・青・黄)がRaspbmc&LIRC未改造でビデオ・ピクチャー・ミュージックへのダイレクトジャンプになっているのに気付いて感激。これとミュート、ボリュームなんかはXboxリモコン+USBレシーバーを使っている方も再振り分けをオススメします。
raspbmc_gpio_ir_remote_01.jpg


●登録順序も考えつつ、【リモコンの設定ファイル作成 方法①】でlircd.conf_2を作成。
この程度のリモコンでもボタン数は42個もあります。入力が簡単で割付(登録)に変更の予定が無いボタンはそのまま打ち込み、他はキーリストにある一連のキーネーム(F*なら1~24まで存在)で仮登録。
このリモコンでは白丸の部分を仮登録しました。
raspbmc_ir_remote_key_mapping.jpg


●作った設定ファイルはバックアップの意味も兼ねてUSBメモリに保存。
仮登録~実際のキーネームへの変更は数が多いのでWindows上のエディタを使って修正。
その後、Raspbmcの /home/pi/ に戻し、少数のキーネーム変更はnanoエディタを使う事にします。

●RaspbmcにUSBメモリーを挿す

↓USBメモリーの場所と名前を確認(/media/***は個別に異なります)
df
20140308_001.jpg

↓/home/pi/ を確認。lircd_2.confが仮登録ファイル。念の為パーミッション・オーナーをメモ)
ls-l
20140308_002a.jpg

↓須藤さん(社長代行)になってUSBメモリーにコピー
sudo cp /home/pi/lircd_2.conf /media/***/lircd_2.conf
20140308_003.jpg

↓USBメモリーの内容を確認。バックアップ終了。設定変更はWindowsでする事に
   (フォルダ(紫色)の内容はご想像にお任せします)
ls -l /media/***
20140308_004.jpg

Windowsのスクリーンエディタにてlircd_2.confの書き換え
※オーバーライトせず、lircd_3.confとして保存

 エディタはPIGYEDIT(←リンク有)。これに慣れちゃって手放せません。
20140308_012.jpg
↑※このリモコンは何度やってもrawデーター扱いになるヤツでした。


(トップ画像と重複しますが今回のキーマップです)
raspbmc_ir_remote_key_mapping_sample_01.jpg


↓書き換えが終ったlircd_3.confをUSBからPiのホームへ
sudo cp /media/***/lircd_3.conf /home/pi/lircd_3.conf
(スクショ忘れ)

↓確認。オーナーがrootになってますね。
ls -l
20140308_009.jpg

↓念の為、オーナー・グループをPiに戻して確認。
sudo chown pi:pi lircd_3.conf
ls -l
20140308_010.jpg


●lircd_3.confをlircd.confとするか、/etc/lirc/xbox-lircd.confに上書きする事で利用可能

●ちなみに、ホームディレクトリのlircd.confにする場合

①以前に作った別のlircd.confがあるならリネーム
mv /home/pi/lircd.conf /home/pi/lircd.conf.bkup  ←リネーム
ls -l ←確認
20140308_013.jpg


②lircd_3.confをlircd.confにリネーム
mv /home/pi/lircd_3.conf /home/pi/lircd.conf
ls -l
20140308_014.jpg


Raspbmcの方に身体を移動してGPIO IR Remote ProfileをCustomに変更、再起動で完了
20140305_011.jpg


●Profile[Custom]を他のリモコンで使っている場合
 作ったlircd_3.conf を/etc/lirc/xbox-lircd.confにしてしまう。

sudo mv /etc/lirc/xbox-lircd.conf /etc/lirc/xbox-lircd.conf.bkup ←オリジナルを退避
sudo cp /home/lircd_3.conf /etc/lirc/xbox-lircd.conf ←ホームからコピー
(スクショ省略)

後はリモコンタイプをXboxに。再起動で完了
20140305_012.jpg



【USBレシーバー仕様のリモコンボタンを再設定する場合】

(現状でUSBレシーバーを使い、リモコン操作ができているという前提で)

●例えばXbox DVDリモコンならnanoエディタを使って/etc/lirc/xbox-lircd.confの中のキーネームをキーリストに存在する他のキーネームに書き換えるだけでOKでした。

↓オリジナルのバックアップを作ってから
sudo cp /etc/lirc/xbox-lircd.conf /etc/lirc/xbox-lircd.conf.bkup

Xbox DVDリモコン下部の数字キーを一部変更してみます。
 7→ボリュームDOWN
 8→音声ミュート
 9→ボリュームUP
※新たに登録するキーネームがキーリストに存在することを確認。

↓nanoでxbox-lircd.confを書き換え
sudo nano /etc/lirc/xbox-lircd.conf

20140308_016.jpg

ctrl+oで保存して、ctrl+xで終り。Raspbmc再起動。

[8]を押した時に画面右上にミュートアイコン
raspbmc_mute_icon.jpg


[7]、[9]でボリューム表示が出てコントロール可ならOK
raspbmc_volume_indicator.jpg

(金髪のおでこが映っているように見えますが気のせいです)



ここまで、3月の初めから検証しつつ1週間で書きました。
高校生の姪にも検証を依頼し、向こうでも出来たというレポートを貰ったのでアップします。

※英文フォーラムの読みが浅く、本当はもっとインスタントに出来る事なのかも知れません。

                                           2014/03/09 AM8:00


スポンサーサイト



コメント

非公開コメント

プロフィール

Dellbee

Author:Dellbee
デルビィです(少年時代にハマったアマチュア無線局のコールサインを捩りました)。
子供の頃から電子電気・機械物弄りが好きで、今も自分の時間が取れた時は何か弄っています。

検索フォーム

ブロとも申請フォーム

QRコード

QR