スイッチIoTで服薬管理 〜M5Stack × AWS〜 [Part1] | 服薬カウンター(1/4)
技術情報 IoT M5Stack UIFlow ビジュアルプログラミング AWS AWS Lambda Amazon DynamoDB 作り方
更新日:2023/05/09
私には、毎日飲まなければいけない薬があります。
喘息薬なので、正確には「飲む」というより「吸引」しなければならないのですが。
でも、ついつい吸引し忘れてしまうこともありますし、吸引したのかどうかを思い出せないことも。
そこで、服薬記録をとるためのガジェットを開発することにしました。
IoTデバイスの「M5Stack」とストレージサービスの「AWS」を使って。
紹介ビデオ
完成した「服薬カウンター」を使ってみた動画がこちらです。
IoTのシステム構成
ユーザインタフェースには「M5Stack Core2」を使い、バックエンド処理には「AWS(Amazon Web Services)」を使います。
M5Stackのスイッチボタンを押すことで、AWSのWeb APIを呼び出し、AWS上のデータベースに服薬回数を記録することにしましょう。
そして反対に、Web APIを介してデータベースから服薬回数を取得し、M5Stackのディスプレイに表示します。
「M5Stack Core2」がIoTデバイスとして優れている点は、タッチパネルモニタとなっていることです。
画面上にボタンを自由に配置して、スイッチ動作を組み込むことができます。
M5Stackの開発プラットフォームである「UIFlow」を使って、次のような画面をデザインします。
ガジェットの名称は「Medication Counter」(服薬カウンター)と命名しました。
データベースの構築
データベースには「Amazon DynamoDB」を使います。
DynamoDBは、NoSQLというタイプのデータベースで、パーテションキーとソートキーで構成されます。
パーティションキーとソートキーは、検索キーとして使用できます。
また、ソートキーを使って、昇順/降順に並び替えることができます。
今回は「服薬した日付」をパーティションキーとして、「記録した日時」をソートキーとして、記録することにしました。
毎朝2回服薬した場合は、次のようなイメージでデータが保存されます。
パーティションキー |
ソートキー |
yyyymmdd(服薬した日付) |
entry_datetime(記録した日時) |
20230401 |
2023-04-01 09:21:36 |
20230401 |
2023-04-01 09:22:03 |
20230402 |
2023-04-03 08:48:54 |
20230402 |
2023-04-03 08:49:12 |
1. AWSのDynamoDBコンソールにサインインして、[テーブルの作成]ボタンを選択します。
2. テーブルの作成画面で、テーブル情報を入力します。
- ① テーブル名に「medication-management-table」と入力
- ② パーティションキーに「yyyymmdd」(服薬した日付)と入力
- ③ ソートキーに「entry_datetime」(記録した日付)と入力
- ④ [テーブルの作成]ボタンを選択
Web APIのルートを作成
「Amazon API Gateway」で、Web APIのルートを作成します。
ルートは、「HTTPメソッド」と「リソースパス」の2つから構成されます。
Web APIのルートを次のように設計しました。
APIの種類 |
HTTPメソッド |
リソースパス |
服薬情報登録API |
PUT |
/items/{year}/{month}/{day} |
服薬情報削除API |
DELETE |
/items/{year}/{month}/{day} |
服薬情報取得API |
GET |
/items/{year}/{month}/{day}/{offset} |
リソースパスに含まれる「{year}」「{month}」「{day}」は、画面に表示している対象日付とリンクします。
服薬情報取得APIのリソースパスにある「
{offset}」については、「前日」ボタン、「当日」ボタン、「翌日」ボタンとリンクさせるために付けています。
「0」を対象日付当日とし、「-1」が前日、「1」が翌日を意味します。
(例)
- GET /items/2023/04/01/0 であれば、2023年4月1日の情報を取得
- GET /items/2023/04/01/-1 であれば、2023年3月31日の情報を取得
- GET /items/2023/04/01/1 であれば、2023年4月2日の情報を取得
1. AWSのAPI Gatewayコンソールにサインインして、「HTTP API」の[構築]ボタンを選択します。
2. APIの作成画面にて、API名を入力します。
- ① API名に「medication-management-api」と入力
- ② [確認して作成]ボタンを選択
3. 確認して作成画面にて、[作成]ボタンを選択します。
4. APIを作成したら、APIの「ルート」を作成します。
- ① [Routes]メニューを選択し、ルート画面を開く
- ② ルート画面で、[Create]ボタンを選択
- ③ ルートの作成画面で、PUT、DELETE、GETのルートを作成