声で部屋の電気のON/OFFをしたい(前編:赤外線リモコンコントロール)
アレ草……じゃないアレクサさんことAmazonのスマートスピーカーAmazon Echoをお部屋にお迎えしました。
いろいろスキルという追加機能が使えるようなのですけれど、まだよくわからないので、これまた自分でちょいと作ってみましたです。
※自分でやってみるとハードからソフトまでいろんな方面のスキルが必要なんですよねぇ。こういうのをまとめて習得できる学習法って、やっぱり自分で作るのが一番ためになりますね。そいでもって買ってそろえるよりとっても安上がり!(そこが大事?w まあその分大変ですけどw)
それぞれ細かい情報はすべて書くととんでもない量になりますので、簡単に情報元をリンクしておきます。そこと、あとは情報の海を検索して探検してみてくださいませ☆
今回は、ずばり
欲求:部屋の照明を声で操作したい!
という夢を自分で叶えてみることにします。
ちなみに、最初からアレクサのスキルに対応している照明があるならこんな苦労をする必要はありません。今回は安物のシーリングライトなのでいろいろ大変でしたがw お金で解決するのもオトナ的な一つの解決法だとおもいます。
まず用意するモノ(ハード)
・Raspberry Pi Zero W
・ビットトレードワン ADRSZIRS ゼロワン 赤外線送信拡張基板
・赤外線リモコン付きシーリングライト(ドウシシャのLuminousというタイプ(安いw))
今回は(も?)Raspberry Pi Zeroを利用します。
Raspberry Pi Zeroは言わずと知れたちびっこいコンピュータ。
詳しくはググってください。あ、今回はWiFiが必須なのでRaspberry Pi Zero Wというタイプを使います。
いちおう、公式サイトはこちらです。(英文)
それに、ビットトレードワンの ADRSZIRS ゼロワン 赤外線送信拡張基板というやつを乗せて使います。
こちらは、赤外線リモコンが発する目に見えない(赤外線だもんね)発光信号を受信してコード化(16進数に変換)したり、逆にコードの内容を赤外線信号として発光発信したりする、コンピュータに取り付ける赤外線リモコンの Input / Output ボードといったかんじの子です。
赤外線リモコンコードについて
コードと言ってもリモコンについているケーブルのことではありません。赤外線リモコンが発光・発信する赤外光のコードのことです。(あたりまえ)そのコードは、リモコンや機械によってバラバラなのですが、同じ命令を各社がつかっていると、A社のテレビをつけようとしたらB社のエアコンが作動してしまったとかいう事故(昔はあったそうです)が起こりかねないということで、色々な経緯の末、現在では、各社暗黙の了解でおおよそ統一フォーマットができているそうです。
↑に詳しいことが書かれています。
メーカーごとのコードは
こちらに書かれていますね。
使いたい赤外線リモコンのコードがこの表に乗っているかまず確認です。
ちなみに、今回使うADRSZIRS ゼロワン 赤外線送信拡張基板の上位機種のラズベリー・パイ専用学習リモコン基板
用に、ビットトレードワンさんがリモコンコードCSVファイルを用意してくれています。「家電からエアコンまで!各社 2500 以上のリモコンコードを公開!!」ってあるからきっとあるじゃろーと思ってダウンロードしたZipファイルを解凍してみたのですが、、、ウチのシーリングライト用のはありませんでした(涙)
安物はこれだから・・・><
しかたがないので、これまた自分でコードを取り出してみます。
見えないものを見ようとして~♪
IR-LEDを覗き込んだ~♪
けれど見えませんw。あと、もしかしたら目によくないかもなのでやめておきましょう。ここはIR(赤外線)を読み取れる機械に任せるべきです。
Raspberry Pi Zeroは安物を買うとピンヘッダが付いていないのではんだ付けする必要があったり、OSを入れてPythonが使えるようにしたり、基板との通信用にI2Cを有効にしたり、などなどの準備はできているものとして、先に進みますw(わからなかったらググりましょう!)
とりあえず半分自分用メモ
$ sudo apt-get install i2c-tools
$ sudo i2cdetect -l
$ sudo i2cdetect -y 1
↑作業historyログによると、こういうことをしていたようです(手抜き)
pi@raspberrypi:~ $ sudo i2cdetect -l
i2c-1 i2c bcm2835 I2C adapter I2C adapter
pi@raspberrypi:~ $ sudo i2cdetect -y 1
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: -- -- -- -- -- -- -- -- -- -- 5a -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
pi@raspberrypi:~ $
i2cdetect は、こういう結果が出ます。5aと書かれている位置をメモです。
ビットトレードワンさんのgithubからサンプルプログラムをゲットしてきます
ソースを見ると
52 SLAVE_ADDRESS = 0x5A
なんて書かれてます。
なんだ、メモる必要なかったじゃん……。(もし食い違っていた場合はここを書き換えるはずですが、今回は不要だった模様)
使い方も、サンプルページにあるように
実行方法
赤外線コード読み取り ./3_2adrszIRS-sample.py r
書き込み ./3_2adrszIRS-sample.py w 5B0018002E001800
これだけでよいそう、ラクチンですね。ちなみにサンプルとしてソニーのテレビの電源を入れるコードは
sample-data:ソニー デジタルテレビ1 電源
5B0018002E001800180018002E001800170018002E00190017001800170018002E00180018001800170018001700180017004F03
ですとのこと。なっがw
こんな長いコードをリモコンぽちっと押すたびに赤外線で発信しているわけですねえ。
やってみる
さっそく、シーリングライトのリモコンと角を突き合わせて受信させてみます。
赤い丸の部分がIR受信(RCV)センサです。写真ではこんなに近づけましたが、ここまで近い必要はありません。
この状態で、
$ python3 3_2adrszIRS-sample.py r
というコマンドを実行して、受光センサに向けて読み出したいリモコンのボタンを押します。
すると、こんな結果になりました。
ついでにお部屋の電気も消えました><
このリモコン、ON/OFFボタンが一つしかないので、どうやら同じ命令で電源のONとOFFが行われているようです。その命令コードは、いま取り出したコレ
820043000F0034001000120011001200110012001200110012001200120011001200120010001300120011001200120011001200120033000F001300100034001000340010001200110012001100330010003300100012001100120011001200110012001100130011001200120011001200120012003200100012001100120011001300100034001000120011001200110012001100120012001100120012001200320011004F03
たかが(失礼)ライトをつけるだけなのにけっこう長い命令ですね。
試しにこのコードを今度は発信させてみましょう。
コードの発信は
$ python3 3_2adrszIRS-sample.py w 〈発信したいコード〉
です。
上の長いコードをコピペして実行してみました。
こんな風になり、ふわっと電気が付きましたよ!!(∩´∀`)∩☆
やったー☆
あとはこのながーいコマンドを、シェルスクリプトにしておきましょう。
こんなかんじ。
〈lighton.sh〉
#!/bin/sh
#/home/pi/work/ADRSZIRS_IR_Sender/
python3 /home/pi/work/ADRSZIRS_IR_Sender/3_2adrszIRS-sample.py w 1500DB1982004300100034000F001300100013001000130011001200120012001100120012001200100013001100120012001100110012001200320010001300100034000F0034001100120010001300100034000F003400100012001100120011001200110012001100120012001200110012001200120011003300100012001100120011001200110034000F00130010001300100013001000130011001200120012001100330011004F03
というかんじ。
$ chmod +x lighton.sh
で実行権限を与えておくのを忘れずに。
こうしておくと、今後、
$ ./lighton.sh
とするだけで
あ、部屋が暗くなった!w
もっかい
$ ./lighton.sh
おし、明るくなった!
ぐっ!╭( ・ㅂ・)و ̑̑
と、ゆーわけで、とりあえず簡単なコマンドでお部屋の電気をON/OFFすることはできるようになりましたので今回はここまで。
―――
後編、音声でのコントロール編はこちら~
よろしければサポートお願いします!いただいたサポートはクリエイターとしての活動費にさせていただきます!感謝!,,Ծ‸Ծ,,