iアプリでリモコンを送信する方法

2008年12月10日 このエントリをはてなブックマークに登録 このエントリをBuzzurlにブックマーク Yahoo!ブックマークに登録 このエントリをlivedoorクリップに登録

当サイトでは、iRemo2で利用しているリモコン・データをこちらのDBで公開しています。
で、それをiアプリで使う方法をちょっとだけ説明
リモコンアプリの作成を考えてる人は参考にして下さい。

長くなったので折りたたみ↓↓↓

 iアプリでリモコンを扱うには、

パッケージ com.nttdocomo.device のクラス IrRemoteControl と IrRemoteControlFrame の2つのクラスを使います。

NECのTVの電源ボタンに割り当てられているデータは以下のようになっています。

割り当て信号
キャリア:132ns / 132ns
コード0 PT:0 600us/550us
コード1 PT:0 600us/1620us
ヘッダー:9000us/4500us
ストップ:600us/39200us
データ:0×18E710EF
ビット数:32bit
送信回数:1回
 

キャリア:132ns / 132ns
コード0 PT:0 600us/550us
コード1 PT:0 600us/1620us
ヘッダー:9000us/2200us
ストップ:0us/95200us
データ:0×00
ビット数:1bit
送信回数:無限
 

ボタン押下リピート:最終信号

割り当て信号は、上から順番に、フレーム1・フレーム2と一番下に、ボタンが押し続けられた場合の信号送信方法を示しています。
リモコンによっては、フレームが1つだけの物もあれば、複数フレームの物も有ります。

iアプリでは、複数のフレームを1度に指定して送信する事が可能です。
(ただし、キャリア / コード0 / コード1 は1つしか指定できないので、この3つの数値が異なるフレームは、複数回に分けて送信する必要が有ります。)

それでは、まず、IrRemoteControlFrameクラスで、データを用意します。

このデータの場合フレームは2つなので、2個の配列と実態を用意

	IrRemoteControlFrame [] irf = new IrRemoteControlFrame[2];
	irf[0]=new IrRemoteControlFrame();
	irf[1]=new IrRemoteControlFrame();

フレーム1のヘッダー / ストップ / データ / ビット数 / 送信回数 をセットします。

	// ヘッダー
	irf[0].setStartHighDuration(9000);
	irf[0].setStartLowDuration(4500);
	// ストップ
	irf[0].setStopHighDuration(600);
	irf[0].setFrameDuration(1072);
	// データ+ビット数
	irf[0].setFrameData(new byte[] {(byte)0x18,(byte)0xE7,(byte)0x10,(byte)0xEF},32);
	// 送信回数
	irf[0].setRepeatCount(1);

注意点は、setFrameDuration

これは、このフレーム全体の送信時間を指定する必要があって、自動で計算してくれないので自分で計算する必要があります。

ヘッダー時間+ストップ時間+データ送信時間

データ送信時間の計算が面倒。

18E710EFを2進に変換して、0の数 x コード0時間 + 1の数xコード1時間

16進 18E710EF > 2進 0001 1000 1110 0111 0001 0000 1110 1111

0 = 16個 / 1 = 16個

全部足すと

9000+4500+600+39200+16*(600+550)+16*(600+1620)
=107220us

指定は、0.1ms単位なので、1072が正解

続けて、次のフレームも設定します。

	irf[1].setStartHighDuration(9000);
	irf[1].setStartLowDuration(2200);
	irf[1].setStopHighDuration(0);
	irf[1].setFrameDuration(1075);
	irf[1].setRepeatCount(IrRemoteControlFrame.COUNT_INFINITE);
	irf[1].setFrameData(new byte[] {(byte)0x00},1);
setRepeatCountには、無限を表すIrRemoteControlFrame.COUNT_INFINITEを指定。

これで、フレームのデータ設定は終了

続いて、IrRemoteControlクラスを使って用意したフレームデータの送信です。

IrRemoteControlクラスの宣言と、キャリア / コード0 / コード1のセット

	IrRemoteControl ir = IrRemoteControl.getIrRemoteControl();
	ir.setCarrier(132,132);
	ir.setCode0(0,600,550);
	ir.setCode1(0,600,1620);

後は、送信

	ir.send(2,irf);

 これでは、10秒間でっぱなしなので、適当な所で

	ir.stop();

で止めると言った具合です。

リモコン送信 サンプル プログラム

参考用に、今回のプログラムのプロジェクトファイルをアップしておきます。
DoJa 3.5で作ってます。

irTest.zip

※2つ目のフレームの指定の表示が間違っていましたので、修正しました。(2009/2/16)

タグ: ,



コメント / トラックバック2件

  1. 河内 大介 より:

    こちらはとてもすばらしいアプリだと思います。
    ただ会社の携帯がdocomoでなんとか使用かのうですが、私用の携帯がsoftbankのためこちらも対応することは可能でしょうか。

  2. Futaba より:

    iRemoのことですよね?
    僕自身、docomoの携帯しか持ってないので・・・難しいですね。ごめんなさい。
    リモコンデータ公開してるので、誰か実機を持ってる人が作ってくれればいいのですがね

コメントをどうぞ