Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JAWS DAYS 2020 | AWS IoT CoreとM5StickCで作る自動出退勤記録システム

Y_uuu
March 14, 2020

JAWS DAYS 2020 | AWS IoT CoreとM5StickCで作る自動出退勤記録システム

AWS IoT Core, LambdaをはじめとするAWSの各種サービスとM5StickCを利用して、
出退勤記録を自動化するIoTシステムを開発した事例を紹介します。

M5StickCはESP32-picoを搭載したプログラマブルな小型デバイスで、
IoTシステムのプロトタイピングと相性の良いデバイスです。

IoTシステムの開発は「デバイス」と「クラウド」それぞれの開発スキルが必要となります。
本発表ではその両者を一通りご紹介いたします。

- 想定する聴講者
- IoTで日常生活を記録・改善したいという想いを持った方
- AWSを使ったIoTシステムの開発に興味がある方
- デバイスに興味がある方

- お話する内容
- M5StickCを開発するための環境を構築する
- M5StickCをWiFi接続する
- M5StickCからIoT Coreへデータを送信する
- 受信したデータを処理するサーバレスシステムを構築する

Y_uuu

March 14, 2020
Tweet

More Decks by Y_uuu

Other Decks in Programming

Transcript

  1. IoT開発における課題  • システムの全体像を描きづらい • 技術要素が多彩(デバイス, 通信, クラウド, Web, etc)

    • ⼀品モノが多く、開発⼿法を画⼀化しにくい • プロジェクトにおけるステークホルダーが多い
  2. 解決策: iBeaconで出退勤を検知  • iBeacon: スマホをBeacon化する技術 • Bluetooth Low Energyでの通信なのでバッテリー

    消費が⾮常に⼩さい • iBeaconを検知したときに出勤を通知 • iBeaconを検知しなくなったときに退勤を通知 ※iBeaconの検知には⼿元にあったM5StickCを使⽤
  3. つまりこんな感じ – 出勤時  1. iBeaconを発信する スマホを持った⼈が出勤 2. iBeaconを検出 3.

    iBeaconの情報を クラウドへ送信 4. iBeaconの情報から 出社した⼈物を特定 5. Slackへ通知
  4. AWS Amplifyとは︖  • サーバーレスなWebアプリケーションを簡単に構築 • 今回使ったサービス • Congnito: ユーザ登録・認証

    • AppSync・DynamoDB: GraphQLサーバ・クライアント • S3: フロントエンドアプリのホスティング
  5. React + Material-UI  • SPAの簡易ダッシュボードを構築 • React: フロントエンドフレームワーク •

    Material-UI: マテリアルデザインを採⽤したComponentセット Material-UIでデザインした簡易ダッシュボード
  6. GraphQLのスキーマ定義(Beacon)  • Beaconテーブルは「検出中のBeaconの⼀覧」を格納する • 検出されなくなったらTTLを使ってテーブルから⾃動削除する type Beacon @model {

    id: ID! address: String! detected_at: String! deleted_at: Int! } • idにはiBeaconのUUIDを使⽤ • detected_atにiBeaconを検知 した時間を格納 • deleted_atはdeletec_atの1分 後を設定(DynamoDBのTTL⽤)
  7. GraphQLのスキーマ定義(AttendanceLog)  • AttendanceLogテーブルは「出退勤時刻」を格納する • パーティションキーはUUID, ソートキーを出勤時刻とする type AttendanceLog @model

    @key(fields: ["id", "started_at"]) { id: ID! started_at: String! ended_at: String } • idにはiBeaconのUUIDを使⽤ • started_atに出勤時刻を格納 • started_atをソートキーとする • ended_atに退勤時刻を格納
  8. 補⾜: DynamoDBのTTL発動タイミング  • 仕様: 期限切れから48時間以内に削除 • https://docs.aws.amazon.com/ja_jp/amazondynamodb/lat est/developerguide/howitworks-ttl.html •

    48時間だと今回のシステムには遅すぎる • 実際に動作検証→結果: 15分以内には削除される • 今回のシステムには15分が丁度良い • 今後、TTL発動タイミングを調整したくなった場合 • Dynamo DBのTTLをOFF • Cloud Watch EventをトリガとしLambdaを定周期実⾏ • LambdaにてTTLを過ぎたItemを削除する
  9. 今回使ったデバイス: M5StickC • ESP32-picoを搭載したスティック状の マイコンモジュール • 48 x 24 x

    14mm • 0.96インチのカラー液晶パネル • 電源スイッチ、A・Bボタン • マイク • IRトランスミッタ • 外部8ピン端⼦ • USB-Cポート • GROVEポート • 6軸IMU • 無線LAN • Bluetooth • ⼩型ながらいろいろなことができるの でプロトタイピングに最適 
  10. iBeaconのアドバタイズパケットを判別  • 受信したデータを以下の通りチェック • 先頭2byte(Apple Company ID)が「0x4C00」であること • 次の2byte(iBeacon識別⼦)が「0x1502」であること

    • 受信データはBLEAdvertisedDeviceの getManufacturerData()関数により取得可能 • 値が異なるものはiBeacon以外のBLE通信なので無視
  11. iBeacon情報を読み出す  • それぞれ以下の⽅法で読み出す • デバイスアドレス • BLEAdvertisedDeviceのgetAddress()関数で取得 • RSSI

    • BLEAdvertisedDeviceのgetRSSI()関数で取得 • UUID • 受信データの4〜19byteを抜き出し、16進数表記に変換