茱萸note

電子工作の備忘録と旅行の記録

Alexa Arduino AWS ESP8266 IoT マイコン 電子工作

Alexa Smart Home Skill を実装して Alexa で ESP8266 を制御する【Alexa×Arduino その2】

投稿日:2020年12月10日 更新日:

AWS Lambda で Alexa Smart Home Skill を実装し、Alexa で ESP8266(Arduino)に接続した LED を操作できるようにします。


目次


前回と今回の記事で、Alexa Smart Home Skill と AWS IoT を組み合わせることで Alexa から ESP8266 に接続した LED を操作する方法を具体的に説明しています。

前回の記事では、AWS IoT Core と ESP8266 を連携させて、AWS から ESP8266 の LED を操作できるようになりました。

今回の記事は、AWS Lambda を用いて Alexa Smart Home Skill の実装をおこない、Alexa で ESP8266 の LED が操作できるようにします。

Amazon 開発者情報 を入力する

Amazon 開発者ポータル にアクセスします。AWS とは別物です。Amazon.co.jp のアカウントでログインします。

https://developer.amazon.com/dashboard

日本版 Amazon.co.jp のアカウントでログインしてください。『Amazon Developerアカウントを作成』を押してアカウント作成に進んではいけません。ここをクリックしてアカウントを作成すると、US版 Amazon.com のアカウントでログインした扱いになり、後の作業がうまくいかなくなります。

Alexa Smart Home Skill を作成する

スマートホームスキルを作成する

Amazon 開発者ポータルが表示されたら、『Alexa Skills Kit』を選択。

https://developer.amazon.com/alexa/console/ask

『スキルの作成』を選択。

名前を決めて入力します。『ESP8266Skill』とでもしておきましょう。デフォルトの言語は日本語とします。モデルは『スマートホーム』を選択して、作成を押します。

これでスマートホームスキルが作成されました。

セキュリティプロファイルを作成しアカウントリンクを設定する

次に、セキュリティプロファイルを作成します。Alexa Smart Home Skill と Amazon.co.jp を連携させるための設定です。

Amazon 開発者ポータルで、『Login with Amazon』を選択。

https://developer.amazon.com/loginwithamazon/console/site/lwa/overview.html

『セキュリティプロファイルを新規作成』を選択。

名前を決めて入力する。『ESP8266Skill』とでもします、説明とURLは適当に設定します。

セキュリティプロファイルが作成されました。『クライアントIDおよびクライアントシークレットを表示』します。表示された『クライアントID』と『クライアントシークレット』をコピっておきます。

再び『Alexa Skills Kit』の画面で作業します。

以下の通り入力します。

Web認証画面のURIhttps://www.amazon.com/ap/oa
アクセストークンのURIhttps://api.amazon.com/auth/o2/token
ユーザーのクライアントIDセキュリティプロファイルのクライアントIDを貼り付ける
ユーザーのシークレットセキュリティプロファイルのクライアントシークレットを貼り付ける
スコープprofile

最後の『Alexaのリダイレクト先のURL』の3つのURLをコピっておきます。

再び『Login with Amazon』に移って作業をします。

『管理する』の『セキュリティプロファイル』を選択。

『ウェブ設定』を選択し、『編集』を選択。『許可された返信URL』に、先ほどの『Alexaのリダイレクト先URL』3つを入力します。

AWS Lambda で Skill のプログラムを書く

AWS にログインして、『AWS Lambda』にアクセスします。

https://us-west-2.console.aws.amazon.com/lambda/home

リージョンを『米国西部(オレゴン)』に必ず変更します。これ以外のリージョンだと Alexa Skill で日本語が使えないようです。

Lambda 関数を作成する

『関数の作成』をします。

『一から作成』します。関数名は適当に決めます。『ESP8266Lambda』とでもしましょう。ランタイムは『Python 3.x』で。

実行ロールを『AWS ポリシーテンプレートから新しいロールを作成』に、ロール名は『ESP8266Role』とでもしておきます。

Lambda 関数が作成されました。

『アクセス権限』を選択。ロール名の下の青いリンク(ここでは『ESP8266Role』)を選択します。

ロールの設定画面に移りました。『ポリシーをアタッチします』。

『IoT』で検索して『AWSIoTFullAccess』を選択してポリシーの作成をします。ほんとはもう少し細かく設定したほうが良いのでしょうけど面倒なので

『AWSIoTFullAccess』が付与されているのを確認します。

AWS Lambda と Alexa Smart Home Skill を連携させる

Amazon 開発者ポータルから『Alexa Skills Kit』を開きます。

https://developer.amazon.com/alexa/console/ask

作成したスキルをクリック。

『スキルID』をコピっておきます。

『Lambda』の作成した関数の設定画面で、『トリガーを追加』を選択します。

『Alexa Smart Home』を選択。

先ほどコピーした『スキルID』を、『アプリケーションID欄』に貼り付けてから、追加します。

『Lambda』の関数設定画面の右上の ARN の値をコピります。

『Alexa Skills Kit』の作成したスキルの設定画面の『デフォルトエンドポイント』欄に、先ほどコピーした ARN の値を貼り付けて、保存します。

Lambda 関数の中身を用意する

私の作成したプログラムがあるので、ダウンロードしてください。

Lambda 以下のファイル群が、Lambda の中身です。alexa/skill-sample-python-smarthome-switch を参考に実装しました。ESP8266 は 前回の記事 で使用した ESP8266 のプログラム(スケッチ)です。

人によっては、2箇所ほど修正が必要かもしれません。

AWS IoT Core でオレゴン以外のリージョンを使っている人は、以下の region_name を変える必要があります。ここで指定するのは Lambda のリージョンではなく IoT Core のリージョンです。

client = boto3.client('iot-data', region_name='us-west-2')

AWS IoT Core で作成したモノの Thing Shadow のトピック名を、モノの名前に応じて変更します。

topic_shadow_name = "$aws/things/ESP8266/shadow/update"

アップロードしてデプロイする

Lambda フォルダの中身を .zip で圧縮します。

『Lambda』の設定画面の『関数コード』の『アクション』の『.zip ファイルをアップロード』から .zip ファイルをアップロードします。

下のようになればOKです。最後に、『デプロイ』をクリックします。

以上で終了です。お疲れ様でした。

携帯の Alexa アプリで Smart Home Skill をインストールして試す

Alexa アプリを起動し、『デバイス』を選択。

『スマートホームスキル』を選択すると、『ESP8266Skill』にように、スキル名が表示されると思います。表示されない場合は、Alexa のログインに用いているアカウントとAmazon 開発者ポータルの登録に用いているアカウントが異なる可能性があります。

Amazonアカウントとの連携画面に移ったら、Amazonアカウント情報を入力します。

その後、デバイスの検出に移ります。45秒くらいかかりますが気長に待つと、無事に照明として検出されます。

アプリからLEDのON/OFFができるようになりました!!!

この状態で、「アレクサ、LEDをつけて」と言ってみましょう。LEDがつきました!!!


以上で、Alexa から ESP8266 に接続した LED を制御できるようになりました。これを応用すれば、Alexa で何でもできるようになる気がしてきます。

次回(あるのか分からない)は、赤外線LED を用いて、ESP8266 をスマートリモコン化したいと思います。どっかでプログラムの説明もしないとですね。

-電子工作
-, , , , , ,


  1. ESP初心者 より:

    とても分かり易く参考になりました。特にAmazonの2つのサービスは初めて使ってみたのですが、このサイトの説明通りにやってみて初めてでもすんなりAlexaとESPを接続出来ました。

ESP初心者 へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

ESP8266 で RSA PKCS#1 V1.5 暗号の復号

ESP8266 で RSA 暗号化の方式の一つである RSA PKCS#1 V1.5 、別名 RSAES-PKCS1-v1_5 の暗号を復号する方法です。

ESP8266 で AES-CBC PKCS#7 Padding による暗号化・復号

ESP8266 で AES アルゴリズム・CBC モード・PKCS7 パディング の暗号化・復号化をする方法を述べます。

【Ubuntu】【Python】virtualenvを使う

UbuntuでPythonのパッケージ管理をしやすくするためにvirtualenvを導入します。

【上級者向け】Ubuntuをデュアルブートする《その2:USBメモリ・外付けHDDにUbuntuを入れる》

WindowsとUbuntuでデュアルブートさせたいけど、Ubuntuは空っぽのUSBメモリ・外付けHDDに入れたい人向けの説明です。(超)上級者向け。

ESP8266 で Tp-Link のスマートプラグ『Tapo P105』を直接操作する

Tp-Link のスマートプラグ『Tapo P105』をアプリや IFTTT といった外部サービスを用いずに、ESP8266 から直接操作してみます。