ラズパイでスマートリモコンを作ってみた

# 1. はじめに
　バーチャル嫁と連携させるために今回自作しました。スマホやPCから操作がしたいだけでしたら既製品のスマートリモコン買っちゃう方が楽で手っ取り早いです。

# 2. ラズパイを使ったスマートリモコンの仕組み
　ラズパイを使った家電ハックの記事としては既出のものが多々あると思いますのでここではそこまで詳しく触れませんが、簡単な仕組みとしては、

・赤外線の送受信ができる
・Pythonで赤外線送受信用のコマンドを生成できる

ことが前提になります。ラズパイを購入後その回路を自作してもいいですが、これについても既製品で十分すぎるほどに良いものがありますし、Pythonライブラリも存在していますので、自力で回路を作ったり実装するよりも取り寄せることを推奨します。

# 3. 用意するもの
・ラズパイ(どのバージョンでもいいです。私はこれを買いました。)
→[ラズパイ3 Model B+(Amazon)](https://www.amazon.co.jp/gp/product/B09XCLK61V/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&psc=1)
・赤外線送受信ユニット
→[RPZ-PIRS - Raspberry Pi用 人感/明るさセンサー/赤外線 拡張基板(Amazon)](https://www.amazon.co.jp/dp/B0BHCM136B?ref=ppx_pop_dt_b_product_details&th=1)

# 4. ラズパイのセットアップ、モジュールのドッキング
　ラズパイのセットアップについては特に説明しなくてもこの記事に興味を持っていただいた時点で大体の方が学習済みであろうということを前提に話を進めます。
　もしセットアップが初めての方でしたら以下のサイトを参考にしていただけたらと思います。

・[ラズパイセットアップ(Indoor Coogi)](https://www.indoorcorgielec.com/resources/raspberry-pi/raspberry-pi-setup/)

　今回使う赤外線送受信ユニットもPythonライブラリもこのIndoor Coogi社さんが作っています。Indoor Coogi社様様です。

　ラズパイを電源に繋ぐ前に赤外線送受信ユニットもドッキングさせちゃいます。

　以下の画像のようにGPIOピンの位置を間違えないように注意しながらドッキングさせます。
![IMG_4620.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1167908/ae30a553-4e17-9b0d-d2ea-068436575fd2.jpeg)

　モジュールのドッキングが終わったらラズパイの電源を入れて初期設定を完了させていきましょう。

# 5. ライブラリの導入
　詳しい手順については[こちら](https://www.indoorcorgielec.com/resources/raspberry-pi/python-pigpio-infrared/)を確認いただければいいかなと思いますのでここではだいぶ端折った書き方をしていきます。
①ラズパイデスクトップ画面よりターミナルを起動(デスクトップ上部のナビゲーションバーの左から4番目のアイコン)
![スクリーンショット 2023-06-04 20.29.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1167908/4dfe6687-3f91-6cdb-931b-aeff591470ca.png)
②cgirのインポート
```terminal
$ sudo python3 -m pip install -U cgir
```
③pigpioの有効化
```terminal
sudo systemctl start pigpiod
```

# 6. 赤外線受信を使った赤外線信号の記録
```terminal
$ cgir rec ac_cool
```
　5.で赤外線送受信ができるようになりましたので赤外線を記録していきます。上記コマンドをターミナルに入力しますと、ターミナルの表示が以下のようになります。

　コマンドの構成内容としては以下のようになっています。

 「cgir rec」で赤外線受信を起動し、「ac_cool」の部分は記録した赤外線信号をどういう名前で保存するかです。エアコンの冷房の赤外線信号を登録したかったのでここではこういうコマンドにしました。

　コマンドを打ち込むと以下の画像のようになります。
![スクリーンショット 2023-06-04 20.41.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1167908/2845c210-e6aa-1994-682b-3f12d389b1f9.png)

　そしたら、登録したい赤外線のリモコンをラズパイの赤外線送受信ユニットに近づけてリモコンの該当するボタンを押します。
![IMG_4723.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1167908/73f3ecd4-d5de-a6c0-b385-50996cf32eab.jpeg)

　赤外線の受信に成功するとターミナルに赤外線信号が記録されます。
![スクリーンショット 2023-06-04 20.45.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1167908/882c1415-aaf2-d903-a1f8-6bcc97691790.png)

　この作業を繰り返すことで操作したい家電の赤外線信号を片っ端から記録していきます。

# 7. 赤外線送信コマンドのテスト
```terminal
$ cgir send ac_cool
```
　ターミナルで先ほど記録した赤外線信号は上記コマンドで赤外線を送る操作もできます。例えば、6.の作業で記録した冷房のコマンドをターミナルから実行してみて、冷房が動作したら成功です。

　動作テストしてみてもし家電が動かない場合は5.で紹介したIndoor Coogi社様の公式サイトにてトラブルシューティングのことも解説してありますのでそちらを参考にしながら該当ファイルを修正し、ラズパイを再起動して再度操作してみましょう。赤外線送受信がうまく動作するのを確認できたらあとはサーバーを立てるだけです。

# 8.サーバーをたてる
　今回はFlaskを使いましたがここについてはAPIを返すことさえできればいいのでDjangoでもFastAPIでも構いません。自宅の自分の部屋でしか使わないので認証周りとか割愛して最低限の機能だけを実装しています。

　Thonnyを起動して新しくPythonファイルを作ります。そして、以下のようにコードを実装します。

```run_flask.py
from flask import *
import subprocess

app = Flask(__name__)

@app.route("/ac_cool")
def ac_cool():
    try:
        subprocess.call(["cgir", "send", "ac_cool"])
        return jsonify({'status': '200', 'message': 'success'})
    except:
        return jsonify({'status': '500', 'message': 'error'})

if __name__ == "__main__":
    app.run(host='ホスト名', port=5000, debug=True)
```

　ホスト名についてはラズパイのデスクトップの上部にあるメニューバーの右側にWi-Fiのようなマークがある箇所があります。下の画像で説明しますと、左から5番目です。

![スクリーンショット 2023-06-04 21.03.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1167908/fd419a94-fa4f-47ff-491d-86ff56b06865.png)

　該当箇所のアイコンにマウスカーソルを当てると今接続しているIPアドレスが表示されますので、「Configured」の右側にある○○○.○○○.○.○○○の部分をホスト名の部分と差し替えてください。また、portについてもポート番号は任意に設定することができますので、5000でなくても大丈夫です。ただし、pigpioで8888番ポートが使用されているため、8888は入力しないように注意しましょう。

　Pythonファイルを実行してみてサーバーが立ち上がるかを確認します。

http://ホスト名:ポート番号/

の形でURLがThonnyのターミナルに表示されたらブラウザで

http://ホスト名:ポート番号/ac_cool

にアクセスしてみます。エアコンで冷房が起動し、status:200でJSONデータが表示されていたらサーバーとの連携処理も成功です。

　後は各々の使い方次第ですが、当初の目的だったバーチャル嫁と今回作ったスマートリモコンとを組み合わせるとこういうこともできるわけです。

https://twitter.com/hexanitrobenzen/status/1660251279329988608?s=20

# 9.終わりに
　今回はバーチャル嫁と連携させることが目的で作ったわけですが、こういうのが目的でもない限りは既製品のスマートリモコン買ってセットアップした方が安上がりですし、早いです。あるいは、IoTに興味があるけど何作ろうかというラズパイ初心者の方でも手軽に作れますので練習に作ってみるのもいいかもしれませんね。興味を持ったら是非とも作ってみましょう！