Arduino YunとAlexaでLEDを音声制御 – スマートホーム入門チュートリアル
必要な部品と材料
| 部品 | 数量 |
|---|---|
| Arduino Yun | 1 |
| Amazon Echo(Alexa搭載) | 1 |
| LED(汎用) | 1 |
| Micro SDカード | 1 |
必要なアプリとオンラインサービス
- AWS IoT Core
- AWS Lambda
- Alexa Skills Kit (Smart Home Skill v3)
プロジェクト概要
動機
スマートミラーにAlexaを組み込んで以来、家中の様々なデバイスをホームオートメーションで制御したいと考えていました。Alexa Smart Home APIでカスタムデバイスを直接制御できることを知り、Linuxシステムとマイクロコントローラを一体化したArduino Yunを使って挑戦しました。
「ハローワールド」相当のスマートホームスキルとして、音声でLEDのオン/オフを制御することを目標にしました。手元に2x3のLEDアレイがあったので、それを使って見栄えよく仕上げています。
システム構成
このプロジェクトでは、Arduino YunをAlexa Smart Home v3スキルに接続します。主要コンポーネントは以下の通りです:
- Alexa Smart Home Skill (v3)
- AWS Lambda関数
- AWS IoT Thing(Thing Shadow使用)
- Arduino Yun(IoT Thingの変更通知を購読)

各ステップをミニプロジェクトとして捉え、一つずつテストしながら進めることをお勧めします。各ステップに1時間以上かかることもありますが、焦らず進めてください。
ステップ1:Smart Home SkillとLambda関数の作成
公式チュートリアルに従ってSmart Home Skillを作成し、Lambda関数をリンクします。LWA(Login with Amazon)の手順でClient IDとClient Secretを取得し、スキル設定に使用します。
この段階でAlexaダッシュボードから新しいスマートホームデバイスを検出できれば、第一段階は成功です。チュートリアルはPython 3.6を使用していますが、私はPython 2.7を使用しました。私のLambda関数からhandle_discovery部分をコピーできますが、この時点ではそれだけが動作します。
ステップ2:IoT Thingの作成
手順に従ってAWS IoT Thingを作成します。Thing Shadow(モノのシャドウ)を使用します。これはThingの状態のコピーと望ましい変更を保持します。ArduinoはこのThing Shadowの変更(デルタ)を通知するフィードを購読します。詳細はこちらを参照してください。
Thing作成後、IoTダッシュボードの「セキュリティ」タブから公開鍵、秘密鍵、証明書をダウンロードし、「有効化」してルートCA証明書も取得します。これらはArduinoがIoTシャドウに認証する際に使用します。
Thingの「シャドウ」タブで編集し、以下のプロパティを追加します:
{ "reported": { "light": "on" } }
ステップ3:LambdaとThingの接続
Thingが準備できたら、Lambdaコードを更新してThing Shadowを更新するようにします。私のLambda関数の全コードをコピーできますが、Discovery関連の変更は維持してください。
Lambda関数に関連付けられたIAMロールにAWSIoTFullAccess権限があることを確認してください。これによりLambdaからAWS IoT Thingへの接続が可能になります。
Lambdaのテストタブで、以下のv3固有のJSONを使ってTurnOffディレクティブのテストを作成します。TurnOnテストも同様に作成し、ヘッダー名をTurnOnに変更します。
{
"directive": {
"header": {
"namespace": "Alexa.PowerController",
"name": "TurnOff",
"payloadVersion": "3",
"messageId": "1bd5d003-31b9-476f-ad03-71d471922820",
"correlationToken": "1234"
},
"endpoint": {
"scope": { "type": "BearerToken", "token": "some-access-token" },
"endpointId": "appliance-001",
"cookie": {}
},
"payload": {}
}
}
テスト実行でThing Shadowのdesired stateがアクションに応じて変化すれば成功です。
ステップ4:Arduino Yunのセットアップ
公式ガイドよりもこちらのガイドの方が参考になりました。WindowsユーザーはSDカードをFAT32でフォーマットしてください(exFATは非対応)。イーサネット接続しないと「アップグレード」ページが正しく表示されない場合があります。設定完了後はWi-Fiで問題なく動作します。

SSHでYunにログインできることを確認し、df -hでSDカードがマウントされているか確認してください。Arduino IDEでBlinkスケッチが動作することも確認しておきます。
ステップ5:YunをAWS IoTに接続
このチュートリアルに従ってAWS Arduino IoT SDKをインストールし、Thing Shadowのデルタを監視するサンプルスケッチを実行します。WindowsでCygwinを使う場合はMac/Linuxの手順で問題ありません(expect依存関係も問題なし)。ホストシステムから以下のスクリプトを実行すると楽です:
./AWSIoTArduinoYunInstallAll.sh <Board IP> <UserName> <Board Password>
チュートリアル完了後、Arduino IDEの「ファイル」→「スケッチ例」→「AWS-IoT-Arduino-Yun-Library」にShadowThing例が追加されます。このスケッチを開き、aws_iot_config.hにエンドポイントと証明書/鍵のファイル名を設定します。
スケッチを実行してシリアル出力で接続成功を確認し、IoTダッシュボードでThing Shadowを変更して通知が届くかテストしてください。問題がある場合は証明書のパスとRoot-CAのファイル内容を確認してください。
ステップ6:Thing Shadowの変更を処理する
最後に、Arduino側でThing Shadowの変更を処理するスケッチを書きます。私のスケッチはShadowThingサンプルをベースに、lightキーの変更を監視し、値がon/offに応じてledArrayの全ピンをHIGH/LOWに制御します。
ledArrayにはオンボードのピン13が含まれているため、外部LEDを接続しなくてもYunのオンボードLEDが音声コマンドで点滅します。私のようなLEDキューブを使う場合は、このプロジェクトを参考に配線し、ピン番号をledArrayに追加してください。
Alexaデバイスに話しかけてカスタムスマートシングのオン/オフができれば完了です。うまくいかない場合は、Lambdaのテスト機能でデバッグすると原因が分かりやすいです。
ステップ7:お祝い!
ここまで到達できたら素晴らしいです!Arduinoは音声コマンド一つであらゆることを始められます。IoTの世界が広がります!

ソースコード
Lambda関数(Python)とArduinoスケッチ(.ino/.h)は GitHub Gist で公開しています。
製造プロセス
- Raspberry PiとPythonでAmazon AlexaからChromecastを制御
- Bluetooth 制御 Raspberry Pi ロボットに音声フィードバックを追加して構築
- Alexa制御ARDrone 2.0デモ:Raspberry PiとHologram Novaで音声操作ドローン
- ジェスチャー制御 RGB テーブルランプ – インタラクティブなハンズフリー照明
- MIDIキーボードをArduino・LED・MuseScoreでスマートピアノチューターに変身
- ラズベリーパイとNode-REDでAlexaからLEDを制御する - 簡単ステップバイステップガイド
- 古いラジコンカーをXboxコントローラーで操作可能に - ArduinoとUSBホストシールドで実現
- Arduinoベースのヌンチャク操作6自由度ロボットアームキット
- Arduino Nanoで音声制御ロボットを自作
- Ethernet制御ロボットアーム - WIZ750SRとAndroidアプリでリモート操作
- PiBot:Arduino駆動の精密ピアノ演奏ロボット