Home Made Garbage

Amazon Echo と ESP8266 で スマートホーム ―テレビ制御―

お父ちゃん お父ちゃん  2018.7.19 
ホーム
電子工作
Raspberry Pi
IOT
WEB

以前ラズパイでスマートスピーカAmazon Echoを自作したのだけど、ウェブカメラのマイクで感度が低かったりAmazon Musicと連携ができないなどで。。。

ラズパイでAmazon Echo 自作

本物ほしいなぁなんて思っていたら。。。。先日のプライムデーでなんとEcho dotが¥2,980(¥3,000 OFF)だったのでやっと買いました。

着後、早速子どもたちは喜んで遊んでます。

そして憧れるのが音声認識による家電制御。そう!スマートホーム!
以下みたいのに憧れていました。

早速、参考にしてESP8266に赤外線LEDを接続してEchoでコントロールするテレビリモコンを作ってみました。我が家はリモコンがどっかになくなったり、子どもが〇〇観たいとか忙しいときに言ってきたりするので、声でTVコントロールできたらかなり便利。まさに#完全にNEXT!

Arduinoライブラリ準備

マイコンESP8266をArduinoでプログラミングして赤外線を使用できるようにします。かつAmazon Echoと連携させます。

Arduino用ESP8266ライブラリ

バージョンアップ(現在2.4.1)があり、以下を参考に導入しました。

Wi-Fi の WPA2 脆弱性ニュースを受けて、Arduino - ESP8266 もパッチが適用されました。そのインストール方法を説明してます。2.4.1 では Crystal Frequency を 26MHz に設定すれば 不具合が無くなります・・・

ESP8266 赤外線通信ライブラリ

以下のIRremoteESP8266ライブラリを使用してESP8266で赤外線信号の解析や信号出力しました。
 https://github.com/markszabo/IRremoteESP8266

ZipをダウンロードしてArduinoのメニュー[スケッチ]→[ライブラリのインクルード]→[.zip形式ライブラリをインストール…]でダウンロードしたファイルを指定してインストールします。

ESP8266-Alexa連携ライブラリ

以下のライブラリを使用してESP8266をスマートホームデバイスにしてAmazon Echoと繋ぎます。
 https://github.com/witnessmenow/esp8266-alexa-wemo-emulator

IRremoteESP8266ライブラリと同様にZipをダウンロードしてArduinoにインストールします。

テレビリモコン赤外線信号解析

まずは自宅のテレビリモコンの赤外線信号の解析を行います。

構成

部品

Arduinoコード

インストールしたIRremoteESP8266ライブラリのexampleコードを使用します。
 Arduinoメニュー[ファイル]→[スケッチ例]→[IRremoteESP8266]→IRrecvDumpV2.ino

解析

上記コードを実行しリモコン受信モジュールに向けてテレビリモコンのボタンを押します。

うまく赤外線が受信できるとシリアルモニタに信号解析結果が表示されます。

我が家のテレビリモコンの通信フォーマットはNECフォーマットでした。各リモコンのボタンを解析してCodeをメモしておきます(上図では1C6F00F)。ここでは電源ボタン、音量ボタン、各チャンネルボタン(ch1〜ch8)の解析を実施しました。

赤外線送信

赤外線LEDをESP8266に接続してリモコン信号を出力します。

構成

部品

Arduinoコード

IRremoteESP8266ライブラリとesp8266-alexa-wemo-emulatorライブラリを使用します。

それぞれのスケッチ例
IRsendDemo.ino
MultiSwitch.ino
を参考にプログラムしています。

70〜75行でAmazon Echo用のスマートホームデバイスを6個生成しています。ポート番号はそれぞれ違う値を使用します(ここでは80〜85)。

スイッチデバイスをエミュレートしているのでONコールバックとOFFコールバックの2個の動作が実行できます。

デバイスtvでは名前を”テレビ”としてコールバックtvOn()、tvOff()を実行します。それぞれのコールバックでテレビリモコンの電源ボタンの赤外線信号を出力します(91行、96行)。信号は解析した赤外線フォーマットとcodeを指定します。

その他のデバイスで音量とチャンネル切り替えを実施しています。詳細は後ほど。

Amazon Echo連携

ESP8266で生成したスイッチデバイスをEchoに連携して音声でテレビ操作できるようにします。

スイッチデバイス検出

連携にはスマホアプリAmazon Alexaを使用します。

アプリのスマートホームをクリックします。

 

ESP8266を起動した状態で”デバイスを追加”をクリックすると数十秒でESP8266で生成したスイッチが検出されます。

この状態で
「アレクサ、デバイス名(テレビなど)つけて」、「アレクサ、デバイス名(テレビなど)オン」

「アレクサ、デバイス名(テレビなど)消して」、「アレクサ、デバイス名(テレビなど)オフ」
でそれぞれONコールバックとOFFコールバックが実行されます。
簡単!!

定型アクション指定

デフォルトでスマートホームデバイスは「つけて(もしくはONして)」とか「消して(もしくはOFFして)」で動作します。

しかし、音声をコントロールしたい時やチャンネルを変える時に、「ONして」や「消して」は不自然なので実行発話をカスタマイズします。

音量調整

Amazon Alexaアプリの定型アクションをクリックして、”+”をクリック。

“実行条件を設定”をクリック

「音を大きくして」と入力して保存。
“アクションを追加”をクリック

“スマートホーム”を選択

デバイス”sound”を選択

オン状態で”次へ”→”追加”→”作成”をクリック

これで音量大きくするアクションができました。

続いて音声小さくするアクションも同様に作成します。「アレクサ、音小さくして」でsoundデバイスのOFFコールバックを実行するようにします。

soundデバイスのONコールバックとOFFコールバックではそれぞれテレビリモコンの音量大小ボタンの赤外線code出力が実行されます(上記の赤外線送信プログラムの101行、106行)。

チャンネル切り替え

デバイスchA〜Dでチャンネルボタンを実行します。

chAデバイスのONコールバックではTBSに切り替わるようにしました。

chAデバイスのOFFコールバックでは教育テレビに切り替わるようにしました。実行条件を「アレクサ、Eテレ」にしたかったのですがAlexa側の問題なのかE テレと言語認識できませんでした。しかたなく教育テレビにしました。

同様にchB〜chDのONコールバックとOFFコールバックを利用して各チャンネルに切り替えるようにしました。

動作

 

#amazonecho と #esp8266 でスマートホーム テレビ音声制御

Home Made Garbageさん(@homemadegarbage)がシェアした投稿 –

ヤッター!

便利!これで子供抱っこしたままでもテレビ消したりチャンネル変えたりできるよ。

便利な世の中になりましたね。

参考

Related Posts

コメントはこちらから

メールアドレスが公開されることはありません。コメントのみでもOKです。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

TOP