以前より現在稼働中の自作服薬システムに機能追加をしたいと思っていました。
そんな中「STM32マイコンとTouchGFX GUIチャレンジ」が開催され、STM32で実現可能ならば同時に実装してしまおうと思いました。
2021年に製作したものが我ながら便利で、現在も使い続けています。
https://elchika.com/article/4bbe61d9-ebaa-44b8-a334-34aef64c7351/
この既存システムでできることは以下の③つとなります。
①頭痛薬の服薬日時を記録
②環境データ(気温・湿度・気圧・騒音・照度)を30分おきに記録
③①②を照らし合わせてグラフ表示
近年、以下のことから追加機能が欲しいと思っていました。
<頭痛薬以外の薬について>
皮膚科で処方されているアレルギーの薬は痒みが出たときに飲むのが、「落ち着いてくるとだんだん間隔があいてきます」と言われており、それを記録して間隔がどうなっているか確認したい
定期的(12時間おき)に服用しないといけない薬ができこれが驚くほど飲み忘れるのでアラートを出したい
上記から、
3種類の薬の服薬記録
うち1つは飲み忘れアラート表示(音声通知はやかましいためあえて行わない)
それぞれの薬について前回服用の時刻を確認可能にする
という機能を実装することにしました。
また、私は数字を覚えるのがすごく苦手で一日に何回もアレクサに今日の日付を尋ねている状況があり(うちにはディスプレイ表示タイプのアレクサ(Amazon Echo)がありますが、ランダムに画面が切り替わり時々しか日付を表示してくれない)、今回のシステムは常に電源ONの想定なのでトップ画面に日付を表示させるようにしようと思いました。
操作する際ににちょうどよい角度で置けるスタンドを3Dプリンタで作成しました。
|自作スタンドを利用している様子|横から見たところ| |
|
|
||
|
温度・気圧・湿度を表示させるようにしました!
飲み忘れアラートがぬるっとしたアニメーションで出てくるところ
読み込み中(通信中)の画面をサークルタイプのプログレスバー(Circle Progress)をモーダル表示させて表現
画面遷移をスライド移動(TouchGFXで簡単に設定できて便利です!)
今回通信をさせようと思いESP8266を使用したので、その部分の実装(C++)がかなり難しかったです。
デザインもTouchGFXが優秀とはいえやはり実装者にデザインセンスは必要で(あたりまえですが)その部分の難しさもありました。
紆余曲折あり結局STM32の実装部分はほぼすべてmemetan氏が行いました。
まだ長くは使ってないものの、自画自賛ですがとても使用感が良いです!
飲み忘れアラートがとても役に立っています。
また常に日付が表示されているのも、目をやるだけですぐに日付がわかるのでとても便利です。
常に輝度がMAXなので、一定時間使っていない場合輝度を落としたい。(ただし常に日付表示したいのでスリープにはしたくない)
せっかく同じGASで取得できるので、TOP画面に環境値も表示したい
2024/8/2対応
上記構成図はSTM32+TouchGFXを利用した部分のものであり、システム全体の一部となります。
Wi-FiにはESP8266、通信はシリアル通信のATコマンド(Wi-Fi通信コマンド)を使用しました。
下図のESP8266のイメージはピンの数が同じというだけのものを代わりに使用しています。
3Vは当初STM32からとっていましたが電力不足のようで動作不安定だったので別で電源をとっています。
|ESP8266配線図|ブレッドボードで配線| |
|
|
||
|
ブレッドボードを基板にはんだづけしたものに置き換えようとしたときに、STM32がArduinoピン配置と同じということだったのでユニバーサル基板でなくArduinoに嵌るように作られている基板がいいと考え探していたところ、スイッチサイエンスにESP-WROOM-02(ESP8266)がすでに実装されている素晴らしいものを見つけました!
https://www.switch-science.com/products/2619
こちらを購入し上記のブレッドボード部分はこちらに差し替えました。
ジャンパワイヤによる配線がなくなりスッキリしました!
実際にはうまく動かないなど紆余曲折ありましたが、最終的に正常に動作するようになり、電源を別でとる必要もなくなりました。
システム全体は、以下の図のようになります。
点線枠で囲った部分は2021に自作・自宅運用しているもので、ここに機能を付加するべく今回STM32マイコン(STM32U5G9J-DK2)+TouchGFXを使用しました。
なお今回SoracomのLTE-M ボタン(IoTボタン)を使用して外出先からも記録できる機能も追加しました。