Raspberry Pi と 学習リモコン（ADRSIR）で家電を操作する

#Raspberry Pi と 学習リモコン（ADRSIR）で家電を操作する
以前、irMagician でエアコンを操作しようとしたところ、データ容量が大きくてできませんでした。
[エアコンが irMagician（赤外線モジュール）で操作できない](https://qiita.com/minatomirai21/items/e432ed4a7bcce79ac7c8)

他に良い赤外線モジュールがないかと定期的に調査していると、以下の製品を発見しました。
[ADRSIR　ラズベリー・パイ専用 学習リモコン基板](http://bit-trade-one.co.jp/product/module/adrsir/)

早速、試してみます。

## 電源接続
Raspberry Pi の5V、もしくは、USBから給電します。
給電方式は、基板上の電源切替ジャンパピンで切り替えます。
今回はUSBから給電します。
Raspberry Pi のUSBポートと基板のUSBポートを接続します。

## 赤外線信号の学習
1. 基板上の記憶/送信モード切替SWでLEARNを選択します
2. 記憶先の基板上の操作スイッチを押します
3. リモコンを操作し、赤外線を基盤に照射します

記憶モードの際は、インジケータLEDが青色点灯します。
赤外線を受信した際は、緑色点滅します。

今回は、SW番号1にエアコンの停止を記憶させました。

## 赤外線信号の送信
1. 基板上の記憶/送信モード切替スイッチでCONTROLを選択します
2. 送信したい赤外線が記憶されている操作スイッチを押します

操作スイッチ1を押すと、稼働していたエアコンが停止しました。
irMagician では実現できなかった、エアコン操作もできました。


## Raspberry Pi からの操作
基板上に保存されている赤外線データを Raspberry Pi に保存したり、保存したデータから赤外線を照射します。
ビット・トレード・ワンよりスクリプトが公開されていますが、 Raspberry Pi で動作させるには少し修正が必要でした。

参考にさせていただいたサイトは以下です。
[ADRSIRのコマンドラインツール IR-remocon02-commandline.pyを使ってみる](https://signal-flag-z.blogspot.jp/2018/01/adrsir-ir-remocon02-commandline-py.html)

### スクリプトのダウンロード
ビット・トレード・ワンのサイトに公開されているスクリプト群をダウンロードします。
[リモコンいじり放題！！ラズパイ専用 学習リモコン基板で使えるソフトウェア3種詰め合わせ公開 | Bit Trade One, LTD](http://bit-trade-one.co.jp/blog/2017121302/)

実際に利用するスクリプトは「IR-remocon02-commandline.py」のみです。


### スクリプトの修正
ダウンロードしたまま実行してもエラーとなったり、想定と異なる動作をするため、ソースを修正します。

30行目あたりの空行に下記内容を記載します。

~~~
from __future__ import print_function
~~~

161行目あたりに記載されてるパスを、スクリプトを保存したパスに変更します。

~~~
変更前
dir_name = '/home/pi/I2C0x52-IR/'
~~~

~~~
変更後（例）
dir_name = '/home/pi/ADRSIR/'
~~~

202行目が照射ではなく書き込みになっているので修正します。

~~~
変更前
write_command(memo_no,block2)
~~~

~~~
変更後
trans_command(block2)
~~~

### ジャンパピンの接続
RSコンポーネンツ製の Raspberry Pi ケースには入らなかったので、必要なジャンパピンだけ接続しました。
[ASM-1900036-01 | 拡張ボードケース Raspberry Pi用, ABS樹脂, クリア | DesignSpark 【通販RS】](https://jp.rs-online.com/web/p/development-board-enclosures/9084218/)

1. I2C SDA（pin3）
2. I2C SCL（pin5）
3. GPIO 4（pin7）

10個の操作スイッチに記憶されている赤外線データは、以下のGPIO番号から出力されます。
今回は1に保存したため、GPIO 4 を接続します。

|スイッチ番号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|GPIO番号 | 4  | 17  | 27  | 18  | 5  | 6  | 13  | 12  | 22  | 23  |


### I2Cの有効化
I2Cが無効化されている場合は有効化しておきます。

### I2Cデバイスのアドレスの確認
I2Cデバイスとして認識されているか確認します。

~~~
$ i2cdetect 1
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.
I will probe address range 0x03-0x77.
Continue? [Y/n] y
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          03 04 05 06 07 -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- 52 -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
~~~

認識されているみたい。


### 赤外線データの保存
基板に保存されている赤外線データを Raspberry Pi に保存します。
「0」と入力している引数は操作スイッチ番号です。SW番号1は0となります。

~~~
$ python IR-remocon02-commandline.py r 0 > filename.dat
~~~

~~~filename.dat
00001200110012001100120011001100110012001100C20385004400100034001000110011001200110012001100340010001200110012001100120011001100110034001000120011003400100034001000120011003300100034001000340010003400100033001000120011001200110034001000120011001200110012001100110011001200110012001100120011001200110012001100120011003300100012001100340010001200110012001100120011003400100033001000120011001200110012001100120011001200110012001100120011001100110012001100120011001200110012001100120011001200110011001200110011003400100034001000340010001200110033001000120011003400100034001000250584004400100033001000120011001200110012001100340010001200110012001100120011001200100034001000120011003400100034001000120011003300100034001000340010003400100033001000120011001200110034001000120011001200110012001100110011001200110012001100120011001200110012001100120011001200110033001000120011001200110012001100120011003400100012001100110011001200110012001100120011001200110012001100120011001200110012001000120011001200110012001100120011001200110012001100120011001200110012001000340010001200110034001000120011003300110011001100250584004400100034001000120011001200110012001100340010001200100012001100120011001200110034001000120011003300100034001000120011003400100034001000330010003400100034001000120011001200110033001100110011001200110012001100120011001200110012001100120011001200110012001000120011001200110012001100120011001200110012001100120011001200110011001100340010001200110012001100340010001200110012001000340010001200110012001100340010001200110033001000120011003400100012001100120011001200110012001100120011001100110012001100110011001200110012001100120011001200110012001100110011001200110034001000120011003400100012001100120011001100110012001100120011001200110012001100120011001200110012001100110012001100110012001100120011001200110012001100120011003300110033001000120011001200110012001100120011001200110012001100110011001200110012001100120011003400100034001000120011001100110012001100120011001200110012001100120011001200110012001100110012001100110012001100120011001200110012001100120011001200110033001000120011001200110012001100120011001200110034001000330010001200110012001100120011001200110012001100120011001200110011001100120011001200110012001100120011001200110012001100120011001200110011001100120011003400100034001000120011001200110033001000120011004205
~~~

### 赤外線データの照射
 Raspberry Pi に保存されているデータをもとに赤外線を照射します。
 
~~~
$ python IR-remocon02-commandline.py t `cat filename.dat`
~~~

稼働していたエアコンが停止しました。