言語切り替え

obnizとAlexaの連携 -IFTTTを使ってLEDを点滅-

はじめに

obnizを使うと簡単にスマートスピーカーからLEDを光らせたりものを動かせたりできます。Amazon Echoなどに搭載されているAlexaと連携させてみました。

Alexaの機能拡張にはSkillの開発という方法もありますが、今回はSkillを作るよりも手軽に機能拡張できるよう、IFTTTを使います。IFTTTとは、様々なWebサービスやデバイス同士の連携が簡単にできるWebサービスのことです。

つくるもの

Alexaに話しかけてLEDを点滅させる

Alexaに話しかけるとLEDが点滅する仕組みを実装します。 概要は以下の通りです。

  1. Alexaに「アレクサ、LEDを点滅させて(をトリガー)」と話しかける
  2. IFTTTがそれをトリガーとしてobnizのイベントのWebhook URLを叩く
  3. obnizのイベントに登録されているプログラムが実行されてLEDが点滅する

準備するもの

  • obniz Board *1
  • Alexa搭載のスマートスピーカー(Amazon Echo)
  • 電源(モバイルバッテリーなど)
  • LED
  • (抵抗なしLEDの場合は、抵抗・ブレッドボード・ジャンパも準備)

手順

1. obnizにLEDを配線する

下の表や図のようにobnizにLEDと抵抗を配線します。(抵抗入りLEDの場合は抵抗を挟まずobnizにそのまま挿してください。) 一般的なLEDの場合は大抵220〜330Ωの抵抗を挟めば大丈夫だと思いますが、不安な場合は各LEDのデータシートを参考にしてください。

また、このときLEDの向きに注意してください。足が長い方(アノード)がobnizの0番ピンに近くなります。

obniz LED
0 アノード(長い方)
1 カソード(短い方)

2. プログラム

この後設定するobnizのイベントがWebhook URLを叩いたらLEDが点滅するようにプログラムを書きます。

プログラム

<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title>AlexaでLEDを光らせよう</title>
    <script src="https://unpkg.com/obniz@2.2.0/obniz.js" crossorigin="anonymous"></script>
    </head>
<body>
    <script>
        let obniz = new Obniz("OBNIZ_ID_HERE");
        obniz.onconnect = async () => {
            let led = obniz.wired("LED", {anode:0, cathode:1});
            const BLINK_MS = 300;
            const WAIT_MS = 3000;

            if(typeof req === "object"){
                if(req.body.led){
                    console.log("blink!");
                    await led.blink();
                    await obniz.wait(WAIT_MS);
                    await led.endBlink();
                }
            }else{
                console.log("failed");
            }

            if(typeof done === "function"){
                done();
            }
        }
    </script>
</body>
</html>

プログラムの以下の部分で、obnizの0番をLEDのアノード側、1番をカソード側用に割り当てています。

let led = obniz.wired("LED", {anode:0, cathode:1});

また、if(typeof req === "object")〜のif文の中で、WebhookによってPOSTされたjsonの内容に応じてLEDを光らせます。このプログラムでは、json内の”led“というキーの値が”true“だったら、LEDを300ミリ秒間隔で3秒間点滅させています。

LEDはobnizのJSパーツライブラリに登録されているので、簡単に制御できるようになっています。
LED (JSパーツライブラリ) | obniz

3. イベントを設定する

obnizのイベントを設定して、この後作るレシピからWebhook URLが叩かれたら先ほど書いたプログラムが実行されるようにします。 obnizのイベントについて詳しくはこちらをご覧ください。

まずobnizの公式サイトにアクセスし、”開発者コンソール” に入ります。

次に、左メニューの “リポジトリ” から新規作成をクリックし、先ほどのプログラムを貼り付けて保存します。

 

 

その次に、”イベント” の欄から新規作成をクリックし、イベントを作成します。
設定内容は以下を参照してください。

名前 (任意)
実行するWebapp リポジトリに保存したプログラム名を選択
きっかけ Webhook

 “作成” をクリックして、設定完了です。

 

最後に、このような画面になるので、 “Endpoint” の欄に書かれているURLを控えておいてください。このURLは次の「IFTTTでレシピを作る」の章で使います。

4. IFTTTでレシピを作る

Alexaに「アレクサ、LEDを点滅させて(をトリガー)」と言うと、先ほど作ったイベントのWebhook URLを叩くように、IFTTTでレシピを作ります。残念なことに、現状「をトリガー」というワードを言わないと反応させることができません。

まず、IFTTTにアクセスしてログインしてください。IFTTTを初めて使う方は会員登録かGoogle or Facebookのログインが求められると思います。

ログインできたら “create” をクリックしましょう。 “If This Then That” という文字が出てくると思います。まずはThisの部分(トリガーと呼びます)をクリックします。

検索バーに “alexa” と入力し、Alexaを選択します。その後、 “Say a specific phrase” を選択してください。

 

(トリガーにAlexaを初めて使う方は、ここでお手持ちのAlexaと紐付けされているAmazonアカウントのログインをする必要があります。)

Alexaに話しかけて反応するワードを入力する画面が出てくるので、 “ledを点滅させて” と入力します。(半角英字の大文字は使えませんでした。)

次に、That(アクションと呼びます)の部分をクリックします。

検索バーに “webhook” と入力し、Webhooksを選択します。その後、 “Make a web request” を選択してください。

以下のような入力画面が出てくるので、 “URL” を先ほど「イベントを設定する」で控えたURL、 “Method” をPOSTに、 “Content Type” をapplication/jsonに、 “body” を{"led":true}にしてCreate actionをクリックします。

これで準備はできました。

動かす

Alexaに「アレクサ、LEDを点滅させてをトリガー」と話しかけてみましょう。うまくいけば、下の動画のようにLEDが3秒間点滅します。

(IFTTTは最大15分の遅延の可能性があるため、すぐに反応しないことがあるかもしれません。)

応用編

前の章ではAlexaに話しかけることによってLEDを点滅させましたが、これを様々なものに応用させることができます。

スイッチをON / OFFさせる

例えば、LEDの部分をサーボモーターに変更すると、Alexaに話しかけるだけで照明やコンセントのスイッチをON / OFF させることができます。

スマート家電でなくても、アレクサに話しかけるだけで(物理的に)簡単にスイッチをON / OFFできるので、手が空いていないときや他の部屋にあるスイッチを操作するときに便利ですね。

試しにコンセントのON / OFFのスイッチでやってみました。(下の動画参照)
このようにアレクサに話しかけるだけで物理スイッチを簡単に操作できます。

Alexaのタイマー機能をアゲアゲ⤴︎⤴︎にする

IFTTTのAlexaのトリガーに “Your Timer goes off” というのがあったので、IFTTTのトリガーとプログラムを少し変更して、アレクサのタイマーが鳴ったときにリングLEDをカラフルに光らせて、タイマーをアゲアゲにしてみました。

おわりに

このように、IFTTTを使ってobnizとAlexaを簡単に連携できます。

ただし、IFTTTの場合はアクション側にAlexaがないため、obnizからのセンサ値によってアレクサを喋らせることはできません。

AlexaのSkillを作ることによって、より柔軟な機能拡張ができます。
次回は「Skillを使ったobnizとAlexaの連携」をご紹介します。

関連記事