ラズパイでスマートホームする【エアコン編】

この記事は[東京大学航空宇宙工学科/専攻 Advent Calendar2020](https://adventar.org/calendars/5407)の25日目の記事として書かれています。

今年の夏，外出から帰宅した直後の部屋が暑くて仕方なく，エアコンをつけても冷えるまでに時間がかかるのが嫌で嫌でたまらなかった時期がありました。ラズパイがあれば外出先からでもエアコンを操作できるようにできることを知り，コロナ禍で暇だった私は家のスマートホーム化に手を出しました。それを機にラズパイでいろいろ遊んだので，それに関してまとめてみようと思います。

@「Raspberry Piって何？」状態の人 
この記事を読んで，DIY的なことをしたい気分になってくれるとこちらも書いた甲斐があって嬉しいです。Linuxとかプログラミング辺りの技術もお手頃に勉強できると思うので是非始めてみてください。

@「Raspberry Pi持ってるよ/やったことあるよ」って人
具体的な実装方法をここに書くというよりは，既に存在している優秀な実装方法に関する記事たちへのリンク集を提供する方向性で書きました。この記事に載っていないラズパイ応用例や実装記事などをご存知でしたら是非教えてください。

# 0. Raspberry Piって何？
書く時間がなかったので省略しますが、簡単にいえばパソコンです。

# 1. エアコンをスマホで操作
ラズパイで赤外線LEDを操作することであなたの家のエアコンをSlackやLINEなどのアプリ経由で操作することができます。これを作成すれば外出中でも家のエアコンを操作できるので，「家のエアコンを消し忘れた」「今から帰るけど，部屋が寒い/暑いだろうからエアコンを付けたい」といった場合に使えます。

システム構成は，**スマホアプリ-ラズパイ間通信**と**ラズパイ-赤外線LED間通信**の2つに大まかに分別できます。わかりやすくするためにそれぞれソフトウェア側/ハードウェア側とも記述します。

### 【ソフトウェア側】 スマホアプリ-ラズパイ間通信
私の実装した限りだと**SlackもしくはLINE**経由が一番簡単かつ使いやすい方法だと思います。

Q: じゃあその中だとどっちが良いの？
A: どっちも一長一短です。Slackなら自分のワークスペースを作ってそこから操作できますし，LINEならbotとの個人チャットにメッセージを送ることで操作できます。SlackではOutgoing WebHooks API，LINEではLINE DevelopersのMessaging APIというAPIをそれぞれ使用しましたが，他にもいろいろやりようはあるみたいです。Slackの方が参考記事も多く実装自体は楽ですが，操作性はLINEの方が上です（あくまで個人の感想です）。


### 【ハードウェア側】 ラズパイ-赤外線LED間通信
ソフトウェア側と異なり，この部分はSlackを使おうがLINEを使おうが共通です。

赤外線LEDを点滅させることでリモコンに相当する信号を送信します。

点滅させるだけなので，ラズパイ入門編としてもよく挙げられる「Lチカ（LEDを点滅させること）」と内容はほぼ同じです。赤外線なので人間には見えません。なおまずは赤外線LEDを含む回路（ちゃんと組まないとLEDが壊れたり信号強度が足りなくなったりするので注意）を組み，次に赤外線LEDを点滅させて信号を送信するスクリプトを書き，さらにスマホアプリ側から送られてくるコマンドに応じて適切にそのスクリプトを呼び出せるようにしたら完成です。

ちなみに，赤外線LEDを適当に点滅させても当然信号にはなりません。あなたがハックしたい機器付属のリモコンと同じ信号を発する必要があります。そのためには一旦「リモコンの信号を記憶する」必要があり，そのために赤外線センサを使ってリモコンの信号を解析する必要があります。この辺りの詳しい実装方法は優秀なリンク先にお任せします。

### 具体的な実装方法リンクまとめ
SlackとLINEそれぞれの記事を別々にまとめました。上記にも書いたとおり，ハードウェア側は共通なのでどの記事も大体一緒です。

#### Slack経由で操作する方法

- [Slack経由で家の外からエアコンをon, offできる装置を、Raspberry Piで作ってみた。（しかも御坂美琴ちゃんが応答してくれる）](https://qiita.com/KAKY/items/55e6c54fa2073cdc0bbe) （とても端的にまとまっていてわかりやすいです）
- [ラズパイに初めて触る人が、Slackから自宅のエアコンを制御する](https://qiita.com/yoshi65/items/33b2cc243ba8dee88e45) （Pythonに慣れている人はこちらの方がシンプルかもしれません）

#### LINE経由で操作する方法
- [RaspberryPi zero WH・LINE API・heroku・Beebotteを使ってエアコンを遠隔操作する【ソフトウェア編】](https://qiita.com/2019Shun/items/c055d56f948aba99d758) （ハードウェア側も含めて体系的にまとまっています。）

#### その他
- [Raspberry Piでエアコン操作♪](https://sakiot.com/wp-content/uploads/2018/01/93f6221b16e8df32ae57e82a5ce07b26.pdf) （こちらはウェブブラウザで操作する形式をとっていますが要は一緒です。）

![スクリーンショット 2020-11-29 12.35.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272738/b4725a9c-2241-8740-4734-c8faf51a85bb.png)


# 2. 外出中でもエアコン/部屋の状態をモニタリング
エアコンのON/OFFができるだけでなく、状態をセンサを使ってモニタリングできます。
Raspberry Piに様々なセンサを接続して，1.と同様にSlackやLINE経由で家の状態量を取得することができます。通信の順番は逆ですがこちらもハードウェア側とソフトウェア側に分別することができます。ソフトウェア側は1.と同じなので省きます。

### 温度/湿度センサ
部屋の温度を監視できます。外出中でも家の温度を把握できるので，エアコン操作がしやすくなりますね。

### カメラ
Raspberry Piにカメラを接続し，web経由で撮影コマンドを送ることで撮影します。多分ストリーミングとかもできると思いますが面倒なのでやっていません。
個人的には，エアコンの送風口にカメラをむけておいて，エアコンのスイッチON/OFF操作後に写真を撮って確認したりしています。エアコンの信号がたまに効かない場合があるので，ちゃんと操作できているかを確認するためです。

### 二酸化炭素濃度センサ
最近だと感染対策の一環として空間の換気状況みたいなものを観測する手段の一つになり得るようです。


# 3. まとめ
いかがでしたか？

なおエアコン編と書きましたが次回作の予定はありません。
もしROS×RaspberryPiでRoombaをいじる方で進捗が生まれたらアップデートするかもしれないですが。

ちなみに本気でスマートホームしようと思ったらamazonでSwitchBotとか買ってきた方が早いです多分。