IRリモコン
PCを赤外線リモコンを使って操作したいと思い,PCとUSBで接続出来るIRリモコン送受信機(AVRマイコン搭載ボード)を作成してみた。
以前LinuxのMythTVやRaspberry Piで学習リモコンを作るときにLIRCを使ったので,WindowsのLIRCであるWinLIRCを使いたいと思ったのだが,元々WinLIRCというかLIRCは,古いシリアルポートのDCDに赤外線受信センサーを接続したハードウェアのためのツール。
なのでシリアルポートが搭載されていない最近のPCでは使うのが難しい。シリアルポートが無いPCでシリアルポートを使いたい場合,普通はFTDI等のチップを搭載したUSB-Serialコンバーターを使うのだが,このようなコンバーターのDCDに赤外線センサーの出力を接続してもWinLIRCのプログラムはうまく動作してくれなかった。
これはWinLIRCではリモコン信号を解析する時にクリティカルなタイミングが必要となるのだが,USB-Serialコンバーターを使うとどうしてもダイレクトにポートにアクセス出来ないので,うまくリモコン信号の解析が出来ないみたいだ。
実際にFTDIのFT232RLなんかを使っていろいろやってみたが,受信データが正常に得られなかった。おそらくBig-Bangモードを使えばうまく行くと思うのだが,Bit-Bangモードの使い方がよくわからない。
ただWinLIRC(LIRC)ではプラグインによってシリアルポート以外のハードウェアのいくつかに対応するようになっている。
その中でもPCのマイク入力に赤外線センサーの出力を接続したハードウェアとAudioCapture.dllプラグインを使う方法がユニークなので試してみたが,なかなか安定してリモコンデータが取得できなかった。
うまく動けばハードウェアとしては安価に比較的簡単に作成できるし,どんなPCでも使えるメリットがある。
また,市販されているCOMポート接続のIRMan IR ReceiverやUSB接続のUSB Infrared Toyも,プラグイン経由でWinLIRCで使えるようだ。
これらのCOMポート接続タイプやUSB接続タイプでは,アダプター機器でリモコンデータを解析するようになっていて,その解析したリモコンデータをWinLIRCがプラグイン経由で受け取って使用出来るようにしているようだ。
そこで自作したIRリモコンでは,WinLIRCのIRManプラグインで動作するようにしてみた。
うまく動作すればWinLIRCと各種のコンパニオンツールが使えるようになり,PCをリモコンで操作することが実現出来そう。
残念ながらIRManプラグインではIR信号の送信はサポートされてないので今回は受信専用となる。
送信も出来るようにIRManプラグインに機能を追加してみた。これで,PCから家電なんかを制御したりも出来るようになった。
ハードウェア
FTDIのUSBコンバーターが実装されている自作のATMEL AVRボード(ATmega168P)に,手持ちのIR受信センサーと赤外線LEDを接続した。
市販のボードを使う場合は,Arduino Nano互換ボードが小さくて良さそう。
作成したIRリモコン回路図
IR受信センサーは38KHzの物なら何でも良い。
作成した基板。
動作チェックプログラム
赤外線リモコン信号の解析はIRremoteライブラリを使ってみた。Arduinoボード(Arduino IDE)用に作られていて,多くのメーカーのリモコンに対応しているのもうれしい。
IRremoteライブラリは使い始めた時はバージョン2.xだったが3.x,4.xと更新されて,使い方もその都度変更されていたりする。
また,自作のAVRボード(ATmega168PやATmega328)で動くように少し修正して使用している。
作ったIRリモコンを,以下のプログラムで動作チェックをした。
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
-
!
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
-
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-
-
|
|
!
|
|
!
-
|
|
|
-
|
|
|
|
|
|
|
-
|
|
|
|
-
|
!
|
|
|
|
|
|
!
!
|
!
-
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
| #define MARK_EXCESS_MICROS 20
#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega168P__)
#define RAW_BUFFER_LENGTH 250
#else
#define RAW_BUFFER_LENGTH 500
#endif
#include <IRremote.hpp>
#include <avr/eeprom.h>
#define SW MISO #define LED LED_BUILTIN #define PUSH 1000
#define EEPROM_V1 0x0000 #define EEPROM_V2 0x0004 #define EEPROM_V3 0x0005
int IR_RECEIVE_PIN = 2; int IR_SEND_PIN = 3;
long recdata; byte recbits; byte rectype; byte recflags; uint16_t recaddr,reccom,recextra;
int swcount;
void setup() {
digitalWrite(LED, LOW); Serial.begin(9600); pinMode(SW, INPUT_PULLUP); pinMode(LED, OUTPUT); IrReceiver.begin(IR_RECEIVE_PIN, DISABLE_LED_FEEDBACK); IrSender.begin(IR_SEND_PIN);
swcount = 0;
eeprom_busy_wait();
recdata = eeprom_read_dword((uint32_t *)EEPROM_V1); eeprom_busy_wait();
recbits = eeprom_read_byte((uint8_t *)EEPROM_V2); eeprom_busy_wait();
rectype = eeprom_read_byte((uint8_t *)EEPROM_V3);
Serial.print("rcv and send IR remokon signal.\n"); SPRI(); }
void loop() {
if (IrReceiver.decode()) { recbits = IrReceiver.decodedIRData.numberOfBits; recflags = IrReceiver.decodedIRData.flags; recdata = IrReceiver.decodedIRData.decodedRawData; rectype = IrReceiver.decodedIRData.protocol; recaddr = IrReceiver.decodedIRData.address; reccom = IrReceiver.decodedIRData.command; recextra = IrReceiver.decodedIRData.extra;
eeprom_busy_wait();
eeprom_update_dword((uint32_t *)EEPROM_V1, recdata); eeprom_busy_wait();
eeprom_update_byte((uint8_t *)EEPROM_V2, recbits); eeprom_busy_wait();
eeprom_update_byte((uint8_t *)EEPROM_V3, rectype);
Serial.print("Memorized! "); SPRI();
for (byte i = 0 ; i < 5 ; i++) {
digitalWrite(LED, i % 2);
delay(100);
}
IrReceiver.resume(); }
while (digitalRead(SW) == 0) { digitalWrite(LED, HIGH); swcount++;
if (swcount > PUSH) { eeprom_busy_wait();
recdata = eeprom_read_dword((uint32_t *)EEPROM_V1); eeprom_busy_wait();
recbits = eeprom_read_byte((uint8_t *)EEPROM_V2); eeprom_busy_wait();
rectype = eeprom_read_byte((uint8_t *)EEPROM_V3);
if (rectype == UNKNOWN) { unsigned int rawData[100]; int sendsize = (int)(recbits/4); memcpy(&rawData[0],&recdata, sendsize); IrSender.sendRaw(rawData, sendsize, 38); } else {
IrSender.sendNECRaw(recdata, 3); }
Serial.print("SEND! "); SPRI(); digitalWrite(LED, LOW); delay(1000); IrReceiver.resume(); swcount = 0; }
}
swcount = 0; }
void SPRI() {
Serial.print("> Protocol:");
Serial.print(getProtocolString(rectype)); Serial.print(" BITS:");
Serial.print(recbits); Serial.print(" FLAG:");
Serial.print(recflags); Serial.print(" ADDR:0x");
Serial.print(recaddr, HEX); Serial.print(" CMD:0x");
Serial.print(reccom, HEX); Serial.print(" EXTD:0x");
Serial.print(recextra, HEX); Serial.print(" DATA:0x");
Serial.print(recdata, HEX); Serial.println();
}
|
- テレビなんかのリモコンのボタンを押すとそのリモコン信号を学習する。
受信したリモコン信号をEEPROMに保存する。
- MOSI(またはMISO)ピンをLowにすると,その保存したEEPROMのリモコン信号を送信する。
- リモコンはNECタイプを使う。
シリアルコンソールを使うと,リモコンの押されたボタンのコードやリモコン信号のタイプが確認できる。
学習したリモコン信号を送信してみて機器が反応すれば,ハードウェアはうまく動作していることになる。
IRMan IR Recieverプロトコル
IRMan IR RecieverはPCとシリアルポートで接続して,赤外線リモコンの信号を受信できる機器だったようだ。(もう販売はされていない)
IRMan IR Recieverでは赤外線リモコンから受信した信号を解析して,そのリモコンボタンの情報データをPCに送っている。
- PCとIRMan IR RecieverとのSerial通信パラメータ
Baudrate:9600
Data:8bit
Stop bit:1 stop
Parity: non parity
- PCのシリアルポートのRTSとDTRをHiにする
これによりIRMan IR Recieverに電源が供給されて起動される。
起動するとリモコンデコードモードになり,赤外線リモコン信号を受信したら解析しPCに返答する。
- PCからスタートコマンドを送信
HostからIRと送信する。(IとRの間は最小500usの時間が必要。)
- IRMan IR RecieverからOKの返答
HostからのIRへの返答としてOKを返す。
PCでOKを受信した場合,IRMan IR Recieverが正常に接続されていることがわかる。
- IRMan IR Recieverでリモコン信号を受信したら,そのリモコン・コードをPCに送信する
リモコンから受信したデータを,
0x1E, 0xXX, 0x00,0x00,0x00,0x00
という6byteのパケットデータでPCに非同期で送信するようだが,1Byte目は0x1E固定で,2byte目がリモコンのボタンに割り当てられているコマンドで,その後のデータはオプションのようだ。
6byteでのデータ転送なので,エアコンなどのサイズが大きいリモコンデータのやり取りは出来ない。
- PCからIRMan IR RecieverへIRリモコン・コード送信機能はない
WinLIRCのIRManプラグインとこのIRMan IR Recieverでは,リモコン・コードの送信は残念ながら実装されていない。
これ以外にもいくつか機能があるようだが,詳細はわからない。
WinLIRC用IRリモコンのソフトウェア
作成したIRリモコンをWinLIRCで使用出来るように,IRMan IR Reciver準拠の(実際のIRMan IR Reciverを見たこと無いので知らないけど・・・)プログラムavrlirc.inoを作成してArduino IDEから書き込んだ。
今回は以下の6byteをWinLIRCとやり取りするようにしてみた。
byte | データ | 内容 |
0 | Header | IRMan Pluginでのヘッダー(0x1E) |
1-2 | Address | リモコンのアドレス(LSB first) |
3-4 | Command | リモコンのコマンド(LSB first) |
5 | Protocol | リモコンのメーカー(タイプ) |
最初は32bitのRawDataを使っていたが,IRリモコンから赤外線リモコン信号を送信する時,RawDataでは送信できないリモコン・タイプがあったり,リモコン・タイプを特定する必要もあってこのように変更した。*1
WinLIRCのプラグインIRMan.dllでは,受け取ったパケットデータを全てデータとして利用しているのでこれでも問題ないようだ。おそらく,0x1Eのヘッダーもなくても良いんだと思う。
IRMan IR Recieverにはないリモコン信号の出力もできるようにした。
-
|
|
|
|
|
|
|
|
!
-
!
-
|
|
|
|
|
|
|
!
-
-
|
|
|
|
|
|
|
|
|
|
|
!
-
|
|
|
|
|
|
-
|
|
|
!
|
-
|
!
|
-
|
!
!
!
-
-
|
-
|
|
|
|
|
|
|
-
|
|
!
|
|
-
-
|
!
!
-
-
|
!
|
!
|
|
!
!
!
-
-
-
|
|
!
|
!
| #define MARK_EXCESS_MICROS 20
#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega168P__)
#define RAW_BUFFER_LENGTH 250
#else
#define RAW_BUFFER_LENGTH 500
#endif
#include <IRremote.hpp>
int RECV_PIN = 2; int SEND_PIN = 3; unsigned char lastdata[5] = {0x00, 0x00, 0x00, 0x00, 0x00}; unsigned char sdata[6] = {0x00,0x00, 0x00, 0x00, 0x00, 0x00};
int cmd; int cmdok;
char rcvdat;
long recdata; byte recbits; byte rectype; byte recflags; uint16_t recaddress; uint16_t reccommand;
IRData IRSendData;
void setup() {
pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, LOW); Serial.begin(9600); IrReceiver.begin(RECV_PIN, DISABLE_LED_FEEDBACK); IrSender.begin(SEND_PIN); cmd = 0; cmdok = 0; }
void loop() {
if (cmdok == 1) {
IRSendData.flags = IRDATA_FLAGS_EMPTY; IRSendData.address = (uint16_t)sdata[2] << 8; IRSendData.address += (uint16_t)sdata[1]; IRSendData.command = (uint16_t)sdata[4] << 8; IRSendData.command += (uint16_t)sdata[3]; IRSendData.protocol = sdata[5]; IrSender.write(&IRSendData, 3); delay(1000); IrReceiver.resume(); cmdok = 0; cmd = 0; }
if (IrReceiver.decode()) { recbits = IrReceiver.decodedIRData.numberOfBits; recflags = IrReceiver.decodedIRData.flags; recdata = IrReceiver.decodedIRData.decodedRawData; rectype = IrReceiver.decodedIRData.protocol; recaddress = IrReceiver.decodedIRData.address; reccommand = IrReceiver.decodedIRData.command; if (recflags != 1) { memcpy(&lastdata[0], &recaddress, 2); memcpy(&lastdata[2], &reccommand, 2); memcpy(&lastdata[4], &rectype,1); }
Serial.write(0x1E); for (int i = 0; i <= 3; i++) { Serial.write(lastdata[i]); }
Serial.write(lastdata[4]); IrReceiver.resume(); }
}
void serialEvent() {
while (Serial.available() > 0) { rcvdat = (char)Serial.read(); switch(rcvdat) {
case 'R': Serial.write("OK"); onoffLED(4); cmdok = 0; cmd = 0; break;
case 0x1E: if (cmd == 0 && cmdok ==0) { sdata[0] = rcvdat; cmd++; }
break;
default:
if (cmd >= 1 || cmd <= 4) { if (cmdok == 0) { sdata[cmd] = rcvdat; }
}
if (cmd == 5 ) { if (cmdok == 0) { sdata[5] = rcvdat; }
cmdok = 1; }
cmd++; break;
}
}
}
void onoffLED(int times) {
for (byte i = 0 ; i < times ; i++) { digitalWrite(LED_BUILTIN, i % 2); delay(100); }
digitalWrite(LED_BUILTIN, LOW); }
|
PC側のソフトウェア
Windows PCにはWinLIRCとWinLIRCに対応しているコンパニオンツールを使用する。
WinLIRCは作成したIRリモコンとPCをUSBで接続して,以下のことを行う。
- リモコンからのデータを受信する。
- リモコンからのデータを解析・学習してリモコンを識別・管理する。
学習したデータをファイルに保存して,識別や学習リモコンとして送信するときにファイルを利用する。
- コンパニオンツールやアプリケーションへリモコンデータ情報を提供する。
NetworkのTCP通信で,リモコンの情報をツールやアプリケーションに送る。
直接WinLIRCに接続出来るアプリケーションもいくつかある。
- リモコン信号をリモコンに代わって機器に送信する。
オリジナルのIRManプラグインでは送信には対応していなかったので,独自にIRMan.dllに機能を追加した。
iRExやEventGhostはWinLIRCに対応しているコンパニオンツールで,WinLIRCが受信したリモコンデータからPCでのキー入力やMouse操作をエミュレーションしたり,任意のアプリを起動したりすることが出来るようになる。
これらのソフトウェアを使うことで,PCをリモコンで操作出来るようになる。
WinLIRC
LIRCのWindows版であるWinLIRCをダウンロードする。ダウンロードするバージョンは0.9.0i。
インストールはダウンロードしたzipファイルを任意の場所に解凍すればOK。
ダウンロードしたWinLIRCとプラグインIRMan.dllを使ってみたところ,自作したIRリモコンとうまく接続出来なくて,IRRecordでの学習モードに移行しないですぐにエラーで終了してしまう。
DTR信号が出力されると自作のIRリモコンのCPUがResetされちゃう*2のと,IRManデバイスからOKの返答を待つ時間が250msと短いのと,ヘッダー送信前にゴミデータが受信されているのが原因と思われる。
しょうがないので,WinLIRC 0.9.0iのIRMan.dllのソースコードを少し修正して,DTR信号が出力された後の返答待ちの最大時間を5sと長めに変更した。また,赤外線信号を出力する機能も追加した。
この
修正したIRMan.dllファイルを,WinLIRCをインストールした場所にあるpluginsディレクトリのIRMan.dllと入れ替える。
これでうまく動作するようになった。
WinLIRCでリモコンを学習する
自作のIRリモコンをPCにUSBで接続する。
WinLIRCを起動して,最初に使用するプラグインをInput PluginでIRMan.dllに設定する。
そして使用するCOMポートをPlugin Setupボタンで設定する。
その後作成するconfigファイルを保存場所を指定してCreate Configボタンをクリックすると,リモコンの学習を行うIRRecordプログラムがコマンドプロンプトで起動する。
コマンドプロンプトを開いて,
> IRRecord -d IRMan.dll ..\px-w3u4.conf
とかしても同じ。
リモコン信号の学習は以下の手順で行う。
- 「Enterを押せ」と表示される
説明を読んでEnterを押す。
- 「任意のリモコンボタンを押し続けろ」と指示される
リモコンのどれかのボタンを押しっぱなしにする。
.....というようにドットが表示されていく。これでリモコン信号の解析を行っているのかな。
かなり入力すると,このフェーズが終了する。
- 「学習させたいリモコンのボタンの名前を入力して,リモコンのボタンを押せ」と指示が出る
リモコン送信機の学習したいボタンに相当する名前を入力する。
- 学習させたいリモコンのボタンを押す
リモコン送信機のボタン信号を一つ一つ学習していく。ボタンは学習するまで2回押す。
- リモコンにある学習したいボタンを繰り返し同じように行う。
- 全てのリモコンのボタン学習が終わったらラベル入力時にEnterのみを押す。
- さらに「Enterを押せ」と表示される
Enterを押す。
- リモコンのいくつかのボタンを1回づつ押していく
ボタンは押しっぱなしにはしないで1回だけ押す。学習データを最適化するために行うようだ。
設定ファイルが作成されたら,nameのところを任意のわかりやすいものに変更しておく。
コンパニオンツールのiRExでのリモコン指定は,このnameを参照する。
WinLIRCを再起動する
うまく学習してデータファイルが作成できたらWinLIRCを再起動する。リモコン信号の受信待ち状態になりシステムトレイに黄色の丸のアイコンが表示され,しばらくすると色が消えた丸アイコンになる。
これで自作にIRリモコンと接続が出来たことになる。
リモコンのボタンを押した時にこのアイコンが緑に変化すれば,学習したリモコン信号に反応していることになる。
WinLIRCの動作確認
WinLIRCを使って作成したIRリモコンの動作確認をしてみた。
- リモコン信号の受信の確認
コマンドプロンプトを起動し,telnetコマンドを使用してみた。
リモコンのボタンを押すとトレイアイコンが緑に点灯し,以下のようにどのボタンが押された/離されたかのメッセージの返答があった。
> telnet 127.0.0.1 8765
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
ffff1e2010300008 00 Ok PXW3U4
ffff1e2010300008 01 Ok PXW3U4
ffff1e2010110008 00 Right PXW3U4
ffff1e2010110008 01 Right PXW3U4
ffff1e20101d0008 00 1 PXW3U4
ffff1e20101d0008 01 1 PXW3U4
ffff1e20101e0008 00 2 PXW3U4
ffff1e20101e0008 01 2 PXW3U4
ffff1e20101f0008 00 3 PXW3U4
ffff1e20101f0008 01 3 PXW3U4
ffff1e2010210008 00 4 PXW3U4
ffff1e2010210008 01 4 PXW3U4
telnet> \q
Connection closed.
これでリモコン信号の受信の動作が確認できた。
- リモコン信号の送信の確認
リモコン信号の送信が出来るか確認してみた。
コマンドプロンプトを開き,WinLIRCのtransmitコマンドを使用してみた。
としたら,リモコン信号が送信され機器が動作した。
うまく送信できたようだ。
iREx
WinLIRCに対応したツールとしては,iRExやEventGhost等いくつかある。
今回はシンプルなiRExを使ってみた。
iRExはWinLIRCが受信したリモコン信号から,Windowsのキーイベント等を発生させる事ができるツール。
iRExのインストールは上記のリンクのDownloadからirex.zipをダウンロードして任意の場所に解凍すればOK。
下記のような設定ファイルを用意してirex.exeをダブルクリックで起動する。
iRExの設定ファイル
設定ファイルirexe.cfgをテキストエディタで作成する。
設定できる内容は,readme.txtに書かれている。
リモコン名<space>ボタン名<space>タイプ<space>動作内容
の設定を1行に1動作を定義する。
エミュレーションできる機能のタイプと動作内容には以下がある。
- exe
アプリケーションを実行する。アプリケーションはフルパスで設定する。
- key
キーボードの入力をエミュレーションする。通常のキーボードはその文字を設定すれば良い。
- 特殊なキー
文字では表せないキーは,以下のようにする。
enter, space,back, +, -, pgup, pgdn, home, end, insert
delete, help, pause, tab, print, shift, ctrl, alt, win
shift-alt, shift-ctrl, alt-ctrl, esc
up(カーソルキー), down(カーソルキー), left(カーソルキー), right(カーソルキー)
apps, F1, ... F19(ファンクションキー), num0-num9(テンキー)
- マルチメディアキー
- 一部のPCに搭載のキー
- WEBブラウザを制御するキー
b-back,b-forward,b-refresh,b-stop,b-search,b-favorites,b-home
- vol
音量を調整する。
v-up(音量を上げる), v-down(音量を下げる),v-mute(音をミュート)
- mouse
Mouseの動きをエミュレーションする。移動量は数字で指定する。
up ###, down ###, right ###, left ###
lmb(左ボタン), rmb(右ボタン), mmb(中ボタン)
###は移動量。
一つのリモコンボタンに複数イベントを発生するには,同じリモコンボタンに2行で設定するとエミュレートされる。
その他の設定。
- server
ip WinLIRCが動作しているIP Address
port WinLIRCが動作しているport(8765)
- editor
設定ファイルを編集するテキストエディターを設定する。
設定ファイルの例
作成したPX-W3U4のリモコン用のirexe.cfgファイル。
; remote key type command
server ip 127.0.0.1
server port 8765
trayicon on
mixer line main
editor C:\WinApl\Sakura\sakura.exe
keypause half
PXW3U4 1 key 1
PXW3U4 2 key 2
PXW3U4 3 key 3
PXW3U4 4 key 4
PXW3U4 5 key 5
PXW3U4 6 key 6
PXW3U4 7 key 7
PXW3U4 8 key 8
PXW3U4 9 key 9
PXW3U4 0 key 0
PXW3U4 * key shift :
PXW3U4 # key Shift 3
PXW3U4 VolUp key up
PXW3U4 VolUp key v-up
PXW3U4 VolDown key down
PXW3U4 VolDown key v-down
PXW3U4 Power key Q
PXW3U4 Tunner key Z
PXW3U4 Cc key C
PXW3U4 Data key D
PXW3U4 Full key F
PXW3U4 SndChange key S
PXW3U4 Mute key M
PXW3U4 Mute key v-mute
PXW3U4 Epg key E
PXW3U4 Up key up
PXW3U4 Down key down
PXW3U4 Left key left
PXW3U4 Right key right
PXW3U4 Ok key enter
PXW3U4 Play key play
PXW3U4 Stop key stop
PXW3U4 Pause key space
PXW3U4 ChUp key left
PXW3U4 ChDown key right
PXW3U4 RightSkip key >
PXW3U4 LeftSkip key <
PXW3U4 Fwd key right
PXW3U4 Back key left
PXW3U4 Tv exe C:\WinApl\TV\TVTest64\TVTest.exe /d BonDriver_Mirakurun.dll
PXW3U4 DvD exe "C:\Program Files\SMPlayer\smplayer.exe"
この設定ファイルで,リモコンのTVボタンを押すとテレビ視聴アプリのTVTestが起動され,チャンネルや音量なんかが操作ができるようになった 
任意のアプリを起動することも出来るので便利!
使ってみて
作成したIRリモコンとWinLIRC/iRExを組み合わせると,PCやアプリケーションをリモコンで操作できるようになった。またいくつかのアプリケーションではWinLIRCに対応している。
PCでテレビを見る時,リモコンで操作出来るようになってこれが便利。わりあい早く反応するのでストレスなどは感じない。
オリジナルのIRMan.dllにはPCからリモコン信号を送信する機能はなかったが,機能を追加して送信もできるようにしたので,PCから家電なんかを制御したりすることも出来るようになった。 
IRremoteのおかげで多くのメーカーの赤外線リモコンに対応出来ている。ありがたいです。
ただPanasonic製の扇風機のリモコンを学習してみると,リモコンタイプがUNKNOWNになってしまうので,RawDataで扱わないと送受信できない。
また,エアコンのように32bit以上のサイズのリモコンデータを使用するリモコンには対応できていない。
対応するには,自作のIRリモコンとWinLIRCでのリモコンデータのやり取りをRAW_CODESタイプで行うようにする必要がある。
UNKNOWNタイプやエアコンのリモコンにも対応出来るようにするのが今後の課題。
新しくコメントをつける