Smart Home

ラズパイでイケてるスマートリモコンを作ろう!赤外線制御で家電のIoT化

2022年9月18日

ラズパイでイケてるスマートリモコン構築 あらゆる家電をIoT化しちゃおう

こんにちは。ポン吉です。

スマートホームと言えば「あらゆるものがインターネットにつながりITで制御された家」というIoTのイメージがありますよね~。最新はスマホで操作できる家電が増加中。ただ、マーケティング戦略的に「フラグシップモデル!」として強気な価格設定がされる製品が多い!

ぶっちゃけネットにつなげただけなのに高すぎ!

読者
ポン吉

そこで登場するのがスマートリモコン!

スマートリモコンはこの数年でかなり普及しました。そんな2022年現在、ラズパイでスマートリモコンをオススメする意味はあるのか?と自問自答しておりました。

先に結論を述べますと、これからスマートホーム化を検討される方は市販スマートリモコンを推奨します。既にラズパイを持っている方で「市販品にないアツい機能を作りこんでやるぜ!」という方はラズパイのスマートリモコン化にチャレンジしてほしい!

スマートホームでの家電操作
スマートリモコン タブレット
タブレットからの操作(未来のイメージ図)

 
家電で使われているリモコンは、未だに赤外線方式が主流です。ラズパイからリモート経由で赤外線発信を制御して、古い家電もIoT化しちゃいましょう!

こちらの記事を読めばラズパイから家電をコントロール出来るようになります。

電子工作も一切不要です!誰でも簡単にコピペで出来るようにしました。また、「やってみた」で終わらずに、スマートホームとして活用するための一歩先を行くアイデアも紹介します。
 

今回のテーマはこちら!

  • Raspberry Piによる赤外線リモコンの作り方を紹介
  • スマートホームでの赤外線リモコンの活用アイデアを紹介

それではやってみましょう~♪

スマートリモコンとは?

スマートリモコン タブレット

スマートリモコンで出来ること

市販品スマートリモコンやラズパイでのスマートリモコンで出来ることは以下の通りです。

スマートリモコンで出来ること

  • スマホのアプリから各種家電の操作が可能
  • リモコンをスマホに集約できる
  • センサ情報などから条件を付けて操作が可能
     - 温度が28℃以上になったら冷房をつける
     - 照度が落ちたらライトをつける
     - GPS情報から家族が家に近づいたら空調をつける

市販のスマートリモコン使えばよくね?
ぶっちゃけ今ラズパイ高いから安価じゃねーだろ!

読者
ポン吉

本来は安価でお手軽が魅力のラズパイだったのですが(涙)

ラズパイでスマートリモコン作るメリットある?

市販のスマートリモコンと、ラズパイのスマートリモコンを比較してみました。

市販品スマートリモコン ラズパイでスマートリモコン
お手軽さ


便利なスマホアプリで簡単に使えます

×
ないものは作れ!の世界なのでお手軽さは皆無!

拡張性


スマホのアプリ仕様に制限あり。スマホアプリ連携としてIFTTTなどで拡張可能


スマホのアプリに縛られない自由な拡張性!ここが最大のメリット

センサ種別


製品の種類に応じて「温度・湿度・照度・人感・GPS」など豊富な選択肢あり


ラズパイでは左のセンサに加え「臭い,CO2,ドア開閉」など∞の選択肢あり

使いやすさ


スマホの標準アプリが付属

???
ここは自作アプリ実装の腕次第!

  • お手軽にスマートホームしたい人: 迷わずに市販のスマートリモコンを活用!
  • 各家庭のライフスタイルに合わせて究極までこだわりたい人: ラズパイでのスマートリモコンを活用! 

という感じでしょうか。こだわりのある方は是非ラズパイでスマートリモコンの活用をしてみましょう!

【準備】Raspberry Pi に 赤外線リモコンアドバンス をセットアップ

コーディング・チューニング

電子工作としてブレッドボードに赤外線受光モジュール&赤外線LEDを配線して実装する方法もありますが、エアコンのリモコン学習がやや困難なんですよね。エアコンのリモコンデータは情報量が多く100%上手くいく方法と紹介しにくい… スマートホーム本番運用を想定し、初心者でも簡単に使える機器を使った方法を紹介します。

ラズパイでスマートリモコンを作るのに必要なもの

うちのスマートホームでも5年ほど使っている Bit Trade Oneさんの赤外線リモコンアドバンス を紹介します。赤外線制御についてはこの製品で困ったことはありません。素晴らしい商品ありがとうございます!赤外線通信にCPUパワーは不要なので、ラズパイはどの種類を使ってもOKです。

赤外線リモコンアドバンスにはUSBケーブルは付属していません。別途購入が必要なので注意。

注意

赤外線リモコンアドバンスの端子は「USB miniB」となります。ラズパイ3,4等と接続する場合は「USB A ⇔ USB mini B」のケーブルが別途必要となります。ケーブル種類を間違えないようにしましょう。

ラズパイ自体も品薄で購入が難しい状況が続いています。ラズパイの在庫と価格をリアルタイム確認できるページを作りました。ラズパイを購入しようとしている方は是非参考にしてみてください。

赤外線リモコンアドバンスの仕様

スペック情報

  • 製品名: USB赤外線リモコンアドバンス
  • 本体寸法: 32W×66.5D×6Hmm(突起部除く) 重量: 約10g
  • 動作環境の温度 0~45℃、湿度10~60%(結露なきこと)
  • USB規格: USB2.0(タイプminiBコネクタ) USBフルスピードモード
  • 対応赤外線周波数: 38kHz
  • 赤外線記録時間: 1つの信号につき約3秒

エアコンなどの複雑な赤外線情報にも対応!

赤外線リモコンアドバンス

大出力赤外線LEDが3つ搭載されています。赤外線は指向性がありますので向きが重要ですが、部屋中の広範囲にわたって赤外線を飛ばすことができます。基盤自体はむき出しでケース等はありません。ちょうどラズパイzeroのサイズ感なのでフリスクケースなどに入れるのも良いかもしれません。

なお、うちのスマートホームでは「むき出しのまま」で使っています。リモコン×3台を5年ほど故障もなく使えておりますので品質面は問題なし!

赤外線リモコンアドバンスをラズベリーパイに接続

ラズベリーパイへの接続はUSBにつなぐだけ!

ラズベリーパイへ必要パッケージをインストール

keyboard
ポン吉

難易度:☆☆☆☆

赤外線リモコンアドバンスを使うのは簡単なのですが一点難点があります。こちらのBit Trade Oneさんのサイト…どこに何があるのかわかりずらく必要なプログラムを探すのが非常に難しいという点(汗)ここ数年で更にサイトの形も変わりますます謎になっていました。

そういう難易度かい!

読者
ポン吉

皆さんはコピペすれば良いだけなのでご安心を

必要パッケージをインストール

赤外線リモコンアドバンスはWindows向けの製品であるため、ラズパイで使うための正式パッケージはありません。ただ、非公式のツールは存在していますので、こちらをダウンロードしてmakeします。makeするために libusb が必要となるためインストールしておきます。

sudo apt update
sudo apt install -y libusb-1.0-0-dev

libusb-1.0.0 : USB デバイスへの汎用アクセスを提供する C 言語のライブラリ

赤外線リモコンアドバンスをインストール

公式サイトにあるツールをラズパイから直接wgetで取得してインストールしていきます。

cd ~/
wget https://bit-trade-one.co.jp/wp/wp-content/uploads/mydownloads/bto_advanced_USBIR_cmd101.zip
unzip bto_advanced_USBIR_cmd101.zip
cd bto_advanced_USBIR_cmd-1.0.1
make
sudo make install

注意

将来、Bit Trade Oneさんのサイトに変更があるかもしれないので、公式サイトURLも記載しておきます。

USB赤外線リモコンアドバンス・UNIX系環境用コマンドライン操作ツール&GUI操作ツール Ver1.0.1と書いてあるファイルです。

bit-trade-oneのHPからコマンドをダウンロードしてmake&インストールを実行。非常に小さいプログラムなので数秒で終わります。以下のように「bto_advanced_USBIR_cmd」コマンドが実行できることを確認してください。

bto_advanced_USBIR_cmd
ponkichi@raspberrypi:~ $ bto_advanced_USBIR_cmd
usage: bto_advanced_USBIR_cmd <option>
  -f <freq>     -dオプションまたは -rオプションを指定した場合のみ使用できます。
                指定しない場合は38000になります。
  -t {AEHA,NEC,SONY,MITSUBISHI}
  -c <code>     家電協(AEHA)フォーマット、NECフォーマット、SONYフォーマット、三 菱フォーマットの
                コードデータをこの -cオプション引数として指定します。
                書式は-dオプションと同じ 0xFF,0xFF,... です。必ず-tオプションと セットで指定します。
  -C <Code>     家電協(AEHA)フォーマット、NECフォーマット、SONYフォーマット、三 菱フォーマットの
                コードデータをこの -Cオプション引数として指定します。
                書式は0xの付かない16進文字列 FFFF... です。必ず-tオプションとセ ットで指定します。
  -d <data>     受信設定または送信設定コンフィグレーションツールで、クリップボードに
                コピーボタンでコピーしたデータ、または、-gオプションで取得したデータが、
                この -dオプション引数として使用可能です。
                -fオプションのみ追加で指定可能です。
  -r            受信開始を指令します。
                -fオプションのみ追加で指定可能です。
                受信設定または送信設定コンフィグレーションツールで取得できるデータが、
                本コマンドでも取得できます。
  -s            受信停止を指令します。
  -g            直前に受信を終えたデータが所得できます。
  --Plarail_StopA               このオプションは必ず単独で指定します。
  --Plarail_StopB               このオプションは必ず単独で指定します。
  --Plarail_Speed_UpAF          このオプションは必ず単独で指定します。
  --Plarail_Speed_UpAB          このオプションは必ず単独で指定します。
  --Plarail_Speed_UpBF          このオプションは必ず単独で指定します。
  --Plarail_Speed_UpBB          このオプションは必ず単独で指定します。
  --Plarail_Speed_DownA         このオプションは必ず単独で指定します。
  --Plarail_Speed_DownB         このオプションは必ず単独で指定します。
  --version
  --firmversion
※ getopt_longモジュールの制限を回避する為、プラレール用のオプションは末尾まで正確に指定して下さい。

使い方の例
受信系
$ bto_advanced_USBIR_cmd -r         # (生データ)受信開始
$ bto_advanced_USBIR_cmd -s         # (生データ)受信停止
$ bto_advanced_USBIR_cmd -g | tee data.txt  # 生データ所得

送信系
$ bto_advanced_USBIR_cmd -d `cat data.txt`
$ bto_advanced_USBIR_cmd -t AEHA       -C 123456789ABC
$ bto_advanced_USBIR_cmd -t NEC        -C 08F6817E
$ bto_advanced_USBIR_cmd -t SONY       -C 08F6817E
$ bto_advanced_USBIR_cmd -t MITSUBISHI -C 08F6817E
$ bto_advanced_USBIR_cmd --Plarail_Speed_UpAF
ponkichi@raspberrypi:~ $ 

オプションなしで実行すると、コマンドのヘルプが表示されると思います。

ポン吉

オプションなしでコマンド実行するとヘルプが表示されます

bto_advanced_USBIR_cmd
このファイル名なんとかならなかったのか…

読者

赤外線リモコンの受信・送信方法(Raspberry Piでの方法)

プログラム 動かし方

赤外線データの受信

下記コマンドを入力すると「赤外線受信待ちモード」となります。コマンド自体は即時で終わったように見えるので???と思うかもしれませんが、赤外線受信処理はバックグラウンドで非同期実行されています。

bto_advanced_USBIR_cmd -r
ponkichi@raspberrypi:~ $ bto_advanced_USBIR_cmd -r
受信を開始しました。
ponkichi@raspberrypi:~ $ 

次に、赤外線リモコンアドバンスに向かって記録したいリモコンを押して赤外線受信させます。

リモコン操作が終わったら、次のコマンドで赤外線受信を終了させます。

bto_advanced_USBIR_cmd -s
ponkichi@raspberrypi:~ $ bto_advanced_USBIR_cmd -s
受信を停止しました。
ponkichi@raspberrypi:~ $ 

赤外線データの保存

次のコマンドで受信した赤外線情報をテキストファイルに保存します。ここでは remo_tv_on.txt というファイル名で保存しています。

bto_advanced_USBIR_cmd -g | tee remo_tv_on.txt
ponkichi@raspberrypi:~ $ bto_advanced_USBIR_cmd -g | tee remo_tv_on.txt
取得したbyte配列の要素数:456=114ビット分の生データ : Freq=38000Hz
0x01,0x3f,0x00,0x9f,0x00,0x15,0x00,0x15,0x00,0x16,0x00,0x14,0x00,0x16,0x00,0x3b,0x00,0x16,0x00,0x14,0x00,0x15,0x00,0x15,0x00,0x16,0x00,0x3c,0x00,0x15,0x00,0x3d,0x00,0x16,0x00,0x3b,0x00,0x15,0x00,0x9f,0x00,0x15,0x00,0x3d,0x00,0x16,0x00,0x3c,0x00,0x16,0x00,0x14,0x00,0x16,0x00,0x14,0x00,0x15,0x00,0x15,0x00,0x15,0x00,0x15,0x00,0x15,0x00,0x14,0x00,0x16,0x00,0x14,0x00,0x16,0x03,0x68,0x01,0x3f,0x00,0xa0,0x00,0x15,0x00,0x15,0x00,0x15,0x00,0x15,0x00,0x15,0x00,0x3c,0x00,0x15,0x00,0x15,0x00,0x15,0x00,0x15,0x00,0x15,0x00,0x3d,0x00,0x15,0x00,0x3d,0x00,0x15,0x00,0x3c,0x00,0x15,0x00,0xa0,0x00,0x15,0x00,0x3d,0x00,0x15,0x00,0x3d,0x00,0x15,0x00,0x15,0x00,0x15,0x00,0x15,0x00,0x14,0x00,0x16,0x00,0x15,0x00,0x15,0x00,0x13,0x00,0x16,0x00,0x14,0x00,0x16,0x00,0x14,0x03,0x6a,0x01,0x3e,0x00,0xa1,0x00,0x15,0x00,0x15,0x00,0x14,0x00,0x16,0x00,0x14,0x00,0x3d,0x00,0x14,0x00,0x16,0x00,0x14,0x00,0x16,0x00,0x14,0x00,0x3e,0x00,0x14,0x00,0x3e,0x00,0x14,0x00,0x3d,0x00,0x14,0x00,0xa1,0x00,0x14,0x00,0x3e,0x00,0x14,0x00,0x3e,0x00,0x14,0x00,0x16,0x00,0x14,0x00,0x16,0x00,0x13,0x00,0x17,0x00,0x13,0x00,0x16,0x00,0x13,0x00,0x17,0x00,0x13,0x00,0x17,0x00,0x13,0x03,0x6a,0x01,0x3d,0x00,0xa2,0x00,0x14,0x00,0x16,0x00,0x14,0x00,0x16,0x00,0x13,0x00,0x3f,0x00,0x13,0x00,0x16,0x00,0x14,0x00,0x16,0x00,0x13,0x00,0x3f,0x00,0x13,0x00,0x3f,0x00,0x13,0x00,0x3e,0x00,0x13,0x00,0xa2,0x00,0x13,0x00,0x3f,0x00,0x13,0x00,0x3f,0x00,0x14,0x00,0x16,0x00,0x13,0x00,0x17,0x00,0x13,0x00,0x17,0x00,0x13,0x00,0x16,0x00,0x13,0x00,0x17,0x00,0x13,0x00,0x17,0x00,0x13,0x03,0x6b,0x01,0x3e,0x00,0xa1,0x00,0x16,0x00,0x14,0x00,0x15,0x00,0x15,0x00,0x15,0x00,0x3d,0x00,0x14,0x00,0x14,0x00,0x15,0x00,0x15,0x00,0x15,0x00,0x3d,0x00,0x15,0x00,0x3d,0x00,0x15,0x00,0x3c,0x00,0x15,0x00,0xa0,0x00,0x15,0x00,0x3d,0x00,0x15,0x00,0x3d,0x00,0x15,0x00,0x15,0x00,0x15,0x00,0x15,0x00,0x15,0x00,0x15,0x00,0x14,0x00,0x16,0x00,0x14,0x00,0x15,0x00,0x14,0x00,0x16,0x00,0x15,0x03,0x69,0x01,0x3f,0x00,0xa0,0x00,0x16,0x00,0x14,0x00,0x16,0x00,0x14,0x00,0x15,0x00,0x3c,0x00,0x16,0x00,0x14,0x00,0x16,0x00,0x14,0x00,0x16,0x00,0x3c,0x00,0x15,0x00,0x3d,0x00,0x15,0x00,0x3c,0x00,0x16,0x00,0x9f,0x00,0x15,0x00,0x3d,0x00,0x16,0x00,0x3c,0x00,0x16,0x00,0x13,0x00,0x15,0x00,0x15,0x00,0x15,0x00,0x15,0x00,0x16,0x00,0x14,0x00,0x16,0x00,0x14,0x00,0x16,0x00,0x14,0x00,0x16,0x1e,0x0d

コマンド実行してもデータが取れなかった場合は、赤外線受信に失敗していますので再度受信からやりなおしましょう。

赤外線データの送信

次のコマンドで赤外線データを送信します。コマンドの仕様がファイル名指定ではなく、直接データを渡す仕様になっています。やや違和感ありますが catコマンド実行結果を引数に入れています。

bto_advanced_USBIR_cmd -d `cat remo_tv_on.txt`
ponkichi@raspberrypi:~ $ bto_advanced_USBIR_cmd -d `cat remo_tv_on.txt`
ponkichi@raspberrypi:~ $ 

テレビの電源がON/OFFできたか確認しましょう!

赤外線リモコンの受信・送信方法(Windowsでの方法)

プログラム 動かし方

リモコンデータの学習自体はWindowsでも出来ます。WindowsPCをお持ちの方は、WindowsのGUIアプリで家のリモコンデータを大量に取り込み、テキストデータをラズパイにコピーして使うのが作業効率的にオススメです。

Windows用アプリのダウンロード

ビットトレードワンさんのgithubにWindows用のアプリがあるのでダウンロードします。2つアプリがあるので非常にややこしいのですが、ADIR01P_Recv_CT_v13.zipと書いてある方を使えばよいです。もう一つは「赤外線リモコンでマウスやキーボードを操作するためのアプリ?」なので不要。下記アプリのダウンロードボタンからzipファイルをダウンロードしましょう。

リモコンでマウス動かしたいニーズってあるのか…

読者
ポン吉

うーん 思いつかない(汗)

こちらのzipファイルをWindowsで解凍すると実行形式ファイルが出てくるのでそのまま起動できます(インストール不要)

 

赤外線データの受信

赤外線リモコンアドバンスGUI
赤外線リモコンアドバンスGUI

例としてテレビ電源ON/OFFの赤外線信号を取り込んでみます。

中央にある緑色LEDが点滅し、赤外線データが16進数で表示されると思います。

赤外線データの保存

赤外線リモコンアドバンスGUI

記録停止をクリックしたら名前を付けて保存しておきましょう。取得したテキストデータはラズパイにファイル転送しておきましょう。

赤外線データの送信

アプリの送信ボタンを押すと赤外線を送信できます。テレビの電源がONになれば動作確認は完了です。同じようにして、家じゅうのリモコンを大量に学習しちゃいましょう!

保存した赤外線データはクリップボードにコピー などでテキストファイルに保存してラズパイに転送して使いましょう。

【実践】スマートリモコン活用アイデア

スマートリモコン

うちのスマートホームのコンセプトは「勝手に空気読んで動けコラっ!」です(笑) 声で「電気つけて~」とか命令するのって、ボタン押すより効率悪いと感じてしまうんですよね。家の各種センサ情報から家族のニーズを察して動いてほしい。そんな一歩先をいくスマートホームをラズパイで構築していきましょう!

絶賛工事中! 以下雑にメモだけ記載(汗)

シーリングファン

Ceiling fan

うちのスマートホームにおける活用事例

  1. リビングとロフトの温度差をチェックし回転速度をリアルタイムに制御
  2. ラズパイの日付情報から「夏季」「冬季」ごとに回転方向を変更
  3. GPS情報から自宅の半径5km以内に家族がいなければ自動で電源On/Off

各部屋に配置している温度センサの値を連携させます。2階リビングと3階ロフトの温度差により、回転速度をリアルタイムに変更。温度差が無い場合は「小」温度差が大きい場合は「大」。室内のリアルタイムな温度情報によりシーリングファンをIoT化できます。

また、シーリングファンは季節により回転方向を変更する必要があります。そこで6月~10月までを「夏季」、11月~5月までを「冬季」として回転方向も自動で切り替えるように実施。また、節電のために、家に誰もいなくなった場合に止める機能も実装。ただ、現在は在宅勤務中心となりほぼ機能していません。

部屋のライト

うちのスマートホームにおける活用事例

  1. 在宅時にIoTボタンでライトをON/OFF
  2. 外出中や別の部屋からLineでライトをON/OFF
  3. 暗くなって人が部屋に人がいる場合は自動でON

こちらは定番ですね。誰もいないときに明かりをつけて防犯対策!とよく記事を見ますが「そんなかわいらしい使い方はしていません…」布団に入る時にライト消したい場合ありますよね。リモコン取るのすらめんどい!布団に入って0.3秒で寝るのび太向けの機能です。家のダウンライト等、赤外線リモコンになっていないものが多いと思います。そんなときは家のスイッチの方を赤外線方式にしてしまいましょう!

うちのスマートホームで使っているのはこちらの商品です。

こちらは単純な2線式でLED調光機能などないものです。ご家庭の環境に合わせて選ぶ必要がありますので注意。

掃除ロボット(ルンバ)

うちのスマートホームにおける活用事例

  1. 定期スケジュール+家に誰もいない時のみルンバで掃除をさせる
  2. 床に物が散らかっていている時はルンバ起動をさせないよう制御(カメラ画像で判定)
  3. 暗くなって人が部屋に人がいる場合は自動でON

スケジュール機能自体はルンバに搭載されているので、ラズパイで制御しなくてよくね?って思うかもしれませんが追加条件を付けて使いましょう。ルンバはうるさいので基本、家に誰もいない時に動かすようにしています。うちは共働きなので昼間時間帯かつ誰もいない時に動かすという感じです。

また、ルンバを掃除させるには部屋の床を片付けておく必要があります!我が家はズボラ家族なので、床に物が置いてある状況で掃除されると、ルンバが変なものを吸い込んでエラーとなります。そこで、部屋が奇麗かどうかをAI画像分析により判断させ、汚いときはルンバは動かない というインテリジェンスを与えます。

保育園登園で朝の激務で数秒を争っているときは、あえてルンバを動かさないために、カメラ撮影ポイントにクッションとかを投げ置いて、掃除させないようにするのが便利でした。こちらも在宅勤務となり機能していないです。

在宅勤務!スマートホームへの
モチベーション落としすぎ!

読者

エアコン

夏場に外出先から帰ってきた際に蒸し風呂のような部屋に入ることなく、GPSと部屋の温度情報から、エアコンを制御してストレスフリーで快適な環境を手に入れられます。こちらも在宅勤務により不要に・・・(むしろエアコンつけっぱなし)

トイレ

コロナウイルス感染拡大により非接触がいいですよね。トイレの機種によりますがリモコン付きのウォシュレット型のトイレですと制御可能です。臭いセンサと組み合わせてあまりにも臭い場合は強制的に流す等が可能です。

まとめ

まとめ

冒頭でも述べましたが、正直なところこれからスマートホームを作ってみようと思っている方は市販のスマートリモコンをオススメします!(オイ)。既にラズパイで家じゅうの温度センサ・湿度センサ・照度センサの情報や、家族のGPS情報等、収集できるようになっている方など、ラズパイでスマートリモコン化する事でさらなる高みを狙っていく人は参考にしてみてください。

しかし、在宅勤務のせいで便利機能をほぼ使わなくなってしまったのが悲しいです。今後はwithコロナの時代。家にいても便利なスマートホームの機能を考えていこうと思います。

 

まとめ

  • スマートホームに赤外線制御は必須!(ラズパイでやるかは置いておいて)
  • 各種センサ情報を元にプログラムを組み、家電にインテリジェンスを与えよう。
  • コロナ渦の在宅勤務のせいでスマートホームとして実装した機能が無駄に(涙)
ポン吉

あと赤外線以外の無線型RFリモコンもなんとかしたい

-Smart Home