Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
KASHIKOIHAKO PWAで作るIoTアプリケーション
Slide 2
Slide 2 text
自己紹介 ● SNSでの名前 ○ ufoo68(@ufoo_yuta) ● 出身 ○ 温泉じゃない方の草津 ● すきなこと ○ シンプルなものづくり
Slide 3
Slide 3 text
ある日のこと こんな景品をもらいました
Slide 4
Slide 4 text
この箱なにかに使えそう
Slide 5
Slide 5 text
さらにある日のこと スイッチサイエンスにてあるものを購入した
Slide 6
Slide 6 text
これでなにか作れないだろうか ・・・・・・・・
Slide 7
Slide 7 text
それでつくったもの これをスマートボックスのプロトタイプと勝手に定義した 180度回転するサー ボアーム サーボアームが回転すると 箱がロックされる
Slide 8
Slide 8 text
スマートボックスとは ● 箱の開閉をスマートに制御できる ○ PC・スマホのアプリを用いた開閉制御 ○ 箱の開閉者の認証 ● 箱の状態管理ができる ○ GPSを使った位置情報のトラッキング ○ 内包物の状態の確認 つまりは、より賢い(KASHIKOI)ことができる箱のことをいう
Slide 9
Slide 9 text
イメージ図(つくりたいもの) スマホを用いた認証機能で開く箱 1. スマホアプリでログイン 2. 箱のロック解除 認証されたユーザー以外は箱を開くこ とができない
Slide 10
Slide 10 text
最初にやったこと ● ロック機構の実装 ○ サーボモータを使用 ● セキュアな通信 ○ M5Stack Core2 for AWSに内蔵されたセキュア通信の機能を使用 ○ MQTT + TLSでAWS IoT coreと通信
Slide 11
Slide 11 text
サーボモータの動かし方 PWMの波形の形がサーボモータの角度と連動する https://monoist.atmarkit.co.jp/mn/articles/0708/22/news116.html
Slide 12
Slide 12 text
セキュアな通信 X.509を使用した証明書認証をデバイスとAWS IoTの間で行う デバイス AWS IoT core 認証された(証明書を持っている)デバ イス以外は通信できない
Slide 13
Slide 13 text
MQTT over TLSを用いた通信 openとcloseのトピックをサブスクライブする
Slide 14
Slide 14 text
次にやったこと ● ユーザー認証との連携 ○ CognitoとIoT Coreを組み合わせる ● UIの実装 ○ AmplifyライブラリでAWSリソースと連携
Slide 15
Slide 15 text
ユーザー認証との連携 やりたいことのイメージ
Slide 16
Slide 16 text
Cognitoとはなにか ● AWSが提供する認証サービス ● Apple、Facebook、Google、Amazon などのソーシャル ID プロバイダー、SAML 2.0 および OpenID Connect によるエンタープライズ ID プロバイダーを使用した サインインをサポート ● 早い話がログインとかパスワード管理とかの機能を作りたいときに使うサービス
Slide 17
Slide 17 text
AWS IoTと連携する 1. Cognitoでユーザーを作成する 2. 以下のコマンドを実行する aws iot attach-policy --policy-name {{policy name}} --target {{cognito identity id}} policyは証明書を持ったデバイスが持つ権限。Cognitoのユーザーをpolicyにア タッチすることで、証明書と同じ権限をユーザーが持つことができる。
Slide 18
Slide 18 text
具体的な実装内容は こちらのQiita記事を参照してください
Slide 19
Slide 19 text
UIをつくる Amplifyを使えば認証機能を楽々実装できる
Slide 20
Slide 20 text
その次にやったこと AWS IoTのデバイスシャドウを使って、 箱の開閉状態を管理してみた
Slide 21
Slide 21 text
今までの課題 例えば箱の開閉を操作するとき、 目の前に箱があるときは 「開」「閉」の どちらを押せばいいのかがわかる
Slide 22
Slide 22 text
今までの課題 しかし、 箱が目の前にないときは「開」「閉」 のどちらを押せばいいのかがわからない (これはあまりかしこくない)
Slide 23
Slide 23 text
そして考えたこと 箱とアプリの間で箱の開閉状態を管理するものを立ててみる ?
Slide 24
Slide 24 text
デバイスシャドウを使ってみた デバイスの状態を管理するためのAWS IoTの機能 { "desired": { "boxStatus": "open" }, "reported": { "boxStatus": "open" } } desired: { “boxStatus”: “open” } reported: { “boxStatus”: “open” }
Slide 25
Slide 25 text
デモ動画 使用技術 ● ハードウェア ○ M5Stack Core2 for AWS ○ Free RTOS ● バックエンド ○ AWS Cognito ○ AWS IoT ● フロントエンド ○ Amplify ○ React ○ Material UI
Slide 26
Slide 26 text
おまけにやったこと アプリをPWAに対応してみた WEBマニフェストを記述してスタートアイコンを作り、 ネイティブアプリのように起動させてみた。
Slide 27
Slide 27 text
ソースコード https://github.com/ufoo68/kashikoihako-ui https://github.com/ufoo68/kashikoihako-device デバイス側 アプリ側
Slide 28
Slide 28 text
さいごに ● まとめ ○ AWS IoTとAmplifyを組み合わせることで、手軽に IoTのウェブアプリケーションをつくることができた ○ M5Stack core2 for AWSを使うと手軽にデバイスと AWS IoTとの連携が実現できる(ただし FreeRTOSでの開発となる) ○ PWAを導入することでネイティブアプリのような動きを実装できた ● 今後やってみたいこと ○ プッシュ通知をなにかに活かしたい ○ 箱をもう少しかっこよくしたい ○ ロック機構とかも本格的なものを作ってみたい
Slide 29
Slide 29 text
というわけで より賢いスマートボックス、 KASHIKOIHAKOの製作を今年はやっていきたいと思っています