カテゴリー
ESP8266+ESP32+RISC-V

「OK Google, LEDをつけて」 Wio Nodeで未来の家へ! 超簡単実験

この実験は、2019/5/8以降、出来なくなります。
https://bokunimo.net/blog/esp/451/



Google Homeを使えば音声で家電をコントロールできます。しかし、対応家電の普及はこれからです。
そこで、家電を改造して、Google Homeから制御するといった需要が考えられます。
ここでは、Seeed Studio社のWio Nodeを使って、超簡単にLEDを制御する実験方法について、説明します。
 
写真左=Google Home、右=Wio Node + LED(実験用)
 
Google Home(写真左)を使って、Wio Nodeに接続したLED(写真右)を制御する実験の様子
 
Wio Nodeとは、Seeed Studio社が開発したIoTモジュールです。同社が提供するクラウドサービスを利用することで、遠隔地に設置したWioNodeをインターネット経由で制御することが出来ます。
Wio Nodeには、2つのGrove端子が搭載されており、市販の様々なGroveモジュールを使って機能を拡張することが出来ます。
今回の実験では、Grove LEDモジュールをGrove端子へ接続しました。LED部を自作する場合は、Grove端子のSIG信号へ、負荷抵抗とLEDを直列接続してください。
 

Wio Node 本体の大きさは28mm程度しかない。

 
 
Wio Nodeをセットアップするには、iOSかAndroidが動作するスマートフォンかタブレット端末が必要です(Google Homeの設定にもスマートフォンが必要)。この実験にパソコンは無くてもスマートフォンで代用できますが、その反対にスマートフォンをパソコンで代用するには、Android開発に関する知識が必要です。
App Storeなどからアプリ「Wio Link」をダウンロードし、アカウントを登録してください。Wio Nodeの左側のFuncボタンを4秒以上、押すとペアリング状態になります。Wio Linkとのペアリングが完了したら、下図のような画面から、LEDを設定してください。
 
注意しなければならないのは、この図はWio Node本体を裏側から見た図であることです。どちらの端子に設定しても、かまいませんが実際のLEDを接続する端子を間違わないようにしてください。
 
 
 
設定が完了したら、ファームウェアをWio Nodeへダウンロードし、画面最下部の「View API」ボタンにタッチします。下図のようなWio Node用のAPIが表示されます。
Test Requestの枠内に、0または1を入力し、[POST]ボタンにタッチするとLEDの制御が出来るでしょう。
 
 

Google HomeとIFTTTのセットアップ

今後はGoogle Home側のセットアップです。こちらもApp Storeなどからアプリ「Google Home」をダウンロードし、アカウントを作成(または入力)して設定を行います。
 
また、Google Homeから入力した音声を Wio Nodeへ橋渡しする必要があります。IFTTT(https://ifttt.com/)はクラウド間の橋渡しを行うのに便利なサービスです。
「If THIS then THAT」の「THIS」にトリガ項目を、「THAT」にアクション項目を設定し、トリガが発生した時に、アクションを動作させます。ここでは、Google Homeから音声で「LEDをつけて」と話したことをトリガにして、Wio NodeのLEDの点灯アクションを行います。
 
 
 
IFTTTの画面右上のアカウント表示から「New Applet」を選択し、「this」の部分をクリックし、「Google Assistant」を選択してください。次に、GoogleのアカウントをIFTTTと連携すると、下図のような画面が表示されるので、「Say a simple phrase」を選択してください。
 
 
 
 
選択すると、設定画面(下図の左側)が開きます。これらの設定方法について、図の後で説明します。
 

Google Assistant 左図の画面

最初の枠には認識させたい音声を入力します。ここでは、「led をつけて」と入力しました。「led」の後には半角スペースが必要です。「つけて」は全角ひらがなです。2番目と3番目の枠への入力は必須ではありませんが、命令となる言葉を入れておきます。
最後から2番目の枠には、音声認識に成功した時に応答するメッセージを入力します。ここでは、「led をつけました」と入力しました。
最後に「Japanese」を選択し、「Create trigger」をクリックしてください。

Maker Webhooks 右図の画面

こんどは、期待の音声が入力された時の動作内容を設定します。アクション用のサービスには「Webhooks」を選択します。以前は「Maker Webhooks」と呼んでいたと思うのですが、「Maker」がとれて単に「Webhooks」と呼ぶようです(URLは以前と同じhttps://ifttt.com/maker_webhooks)。
Webhooksの画面では、上図の右のように入力すると、Wio Nodeへデー?
??を送信することが出来ます。最初の枠には、Wio Nodeの「View API」で表示されたURLを入力します。URLには、ON/OFFの指示と、個々のWio Nodeを特定するためのトークン(token)が含まれています。下記のように「1」を指定すると点灯、「0」で消灯です。
Methodの部分で「POST」を選択してから、「Create Atction」をクリックして入力を完了させてください。
 
「OK Google, エルイーディーをつけて」と音声で命令すると、Wio NodeのLEDが点灯します。Groove LEDの場合、半固定の可変抵抗がついているので、精密ドライバーなどで回して輝度を調整してください(位置によっては点灯しない場合もあります)。
 
 
 
LEDが点灯したら、こんどは消してみましょう。点灯の時と同じように、IFTTTへ「led を消して」「led 消して」「led 消灯」を追加登録します。「led」の後には半角スペース、「消して」は、ひらがなでは無く漢字を使用してください。また、WebhooksのURLには消灯用の「0」を指定してください。
 

手持ちの家電へ組み込む

超簡単でしたね。Wio Nodeを手持ちの家電へ組み込み、音声でコントロールすることも容易であることが分かったと思います。ただし、実際の家電に組み込むときには、いくつかの注意が必要です。
まず、Wio Nodeへ供給する電源です。当然ですが、AC 100Vを供給してはいけません。DC 5Vが必要です。多くの家電の内部には5Vの電源回路が含まれているので、それを利用する方法が考えられます。ただし、Wio Node用に60~100mAほどの余力が必要です。また本来であれば、電源容量の合計や電源回路の発熱などを考慮しなければなりません。少なくとも、動作時に電圧が低下しないかどうかの確認をしておきましょう。
信号の接続先は、家電製品内のEnable信号やスイッチ、ボタンなどの回路になるでしょう。この場合、信号電圧の確認も必要です。Wio Nodeの電源入力は5Vですが、Grove端子の入出力信号は3.3Vです。必要に応じて変換回路や論理和回路を追加しましょう。
 
なお、家電の改造によって人命にかかわる火災などの事故が発生する恐れがあります。そのような場合であっても、当方は一切の責任を負いません。本ブログなどに書かれた情報に誤りがあったとしても同様です。
 
ボクにもわかるWi-FiモジュールESP8266
 
by ボクにもわかる電子工作
https://bokunimo.net/
 

セキュリティに関するご注意
 
ここでは、インターネットから宅内の機器を制御する手段として、Wio Nodeを使用しましたが、アクセス用のTokenが流出するとサイバー攻撃の対象になる可能性があります。この場合、外部から対象機器が制御されるだけにとどまらず、家庭内の全てのネットワーク機器が危機にさらされる可能性も(少ないが)在りえます。Wio Nodeに限らず、Blinkやngrokなどを使った場合も、同様です。
Tokenの流出には十分に注意するとともに、攻撃者が乱数を使って適合するTokenを探し当てる可能性もあることも知ったうえで、ご利用ください。現時点では、多くのシステムが、親切にもTokenが適合したかどうかを知らせてくれるので、攻撃者にとってTokenを探し当てやすくなっています。
なお、ゲートウェイ(ブロードバンドルーター)の設定を変更する方法も考えられますが、ネットワークセキュリティに関する知識が不十分なまま、家庭内の機器をインターネットへ曝すような行為は、極めて危険です。少なくとも、Wio NodeやBlink、ngrokなどを用い、外部からのアクセスが必要な機器ごとに、対象機器から外部サービスへのトンネルを生成する、またはVPNで接続するといった方法を利用しましょう。
 
 - 
Chinese (Simplified)
 - 
zh-CN
Chinese (Traditional)
 - 
zh-TW
English
 - 
en
French
 - 
fr
German
 - 
de
Italian
 - 
it
Japanese
 - 
ja
Korean
 - 
ko
Russian
 - 
ru
Spanish
 - 
es