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