はじめに
ほたー おはようございます! こんにちは!
うおとホタルです。今回は自分を追い込むためアラーム作りで達成したいことと締め切りについて書き出しました。20日のフリースタイルもくもく会で見せる資料にもなります。
現状ではままごとの段階ですが、深化させて締め切り後にまとまった資料を出せるようにします。
アラーム作りがなぜ課題になっているのか?それは次の理由からです。
色織まいはさん(Who)が、リビングで(Where)お茶会をするときに(When)アラームを鳴らして事前に開始時間を知るため(Why)
作っているときはトリさんをイメージしましょう。それでは書き出します。
アラーム作り 締め切り
締め切り:9月25日(日)
アラーム作りの締め切りは9月25日とします。締め切りを決めないと新しい知らせが来ても古い約束にこだわり、ぬかるみに足をとられるためです。色織まいはさんのエネルギーは7月に高まり9月の新月(26日)には弱まると捉えています。まいはさんは手作り大好き。手作りに挑戦するとひらめく流れがきていたからこそ電子工作という知らせがきました。次はトモチカさんかな?トウリちゃんかな?どっちでもいいよ。どっちのエネルギーが高まっても知らせてきたことに挑戦するだけです。電子工作キットが手元にある以上、いつだって挑戦できます。
25日までに出来たこと、反省点を評価してZennに書きだします。
この3か月間電子工作を通じて何を学んだか。
25日にどんな結果を迎えようとも上記をテーマに記事を書きます。アラーム作りが上手くいかなくてもなぜ上手くいかなかったか分析して記録できれば自分にとっては上出来です。挑戦したからには上手くいきたいものですがね。
自分の場合はまどろみみっくを育むという使命があります。そのため電子工作以外にも絵を描いたりフィールドワークしたり身体を伴った不思議を経験しています。
アラーム作り 達成したいこと
達成したいことは次の3点です。
- リアルタイムを参照して決まった時間に通知処理が行われること
- LINEやSlackといったアプリケーションのAPIを通じて通知されること
- 通知ログが記録され、利用者がログ一覧で確認できること
まずアラームづくりで必須となる部品を紹介して、次に上記の3点についてざっくりと説明します。
必須部品
ESP32-DevKitC-32E ESP32-WROOM-32E開発ボード
言うまでもなく必須な「Wi-Fi」や「Bluetooth」を内蔵したマイコンボードです。以下ESP32と表記します。「技適」取得済みであり、日本国内で使用できます。Arduino Unoでも「Wi-Fiシールド」を使えばWi-Fi接続できますが、ESP32を買うよりも倍近く高い値段になっています。
モバイルルータのSSIDとパスワードを参照してESP32がWi-Fi接続できることは確認済みです。アラーム作りには必須要件だったので、接続が上手くいってよかったです。
1個1,230円
リアルタイムクロックモジュール(DS3231 AT24C32)
現在時刻を取得するために使います。以下DS3231と表記します。取得する際に一度現在時刻をセットする必要がありますが、下記事を参考に試したところ大きくずれており成功していません。
【Arduino】リアルタイムクロック(DS3231)で現在時刻の表示
DS3231を商品購入ページから購入するとCR2032というリチウム電池も付いてきます。ただしこの電池の場合ESP32の電源が切れると一緒に切れて時計がストップするという問題があります。そこでLIP2032というリチウム電池を使います。充電池になっており、ESP32の電源が切れても時計が動き続けます。
1個749円
ボタン電池(LIP2032)
4個入り1セット1,079円
サンハヤト SAD-101 ニューブレッドボード
ESP32とDS3231を固定するために使うブレッドボードです。Arduino Uno スターターキットの付属品のブレッドボードと比較して感触ががっちりしています。購入する際は複数買うことをお勧めします、案外小さいので。
1個535円、3個購入したので1,605円
ジャンパワイヤ
ESP32とDS3231を接続するために使います。
あとはんだ付けを行うと物理的に安定しますが、今回のアラーム作りでは行わない前提です。参考記事から新しく購入した部品ではんだ付けが必要になれば導入を検討します。
1セット4,659円
①決まった時間に通知
15時にお茶会を開きたい→アラームで15時にセットして30分前に通知する設定を入れる→14時30分に通知処理が走る。
決まった時間に通知するには下の3点が必要になります。
- 現在時刻を取得できること
- アラーム時間をデータベースに記録していること
- データベースから取得した時間に通知処理が走ること
リアルタイムクロックモジュールは現在時刻の取得に使用します。8月18日時点では取得に成功していませんが、締め切りまでに取得したいところです。
Using the ESP32 with RTC DS3231 module
RTCを使ってESP32をDeep SleepからWake upさせる
ESP32-DevKitCでNTPサーバと時刻同期して RTCモジュール DS3231SNの時刻合わせを行うLCD時計:環境モニタ(1)
データベースはAWS EC2上にPostgreSQLをインストールして作成する予定です。HerokuのPostgreSQLも考えましたが、EC2の方が実務経験があり早く済みます。実務ではMySQL・PostgreSQL両方とも使う機会があります。
インスタンスタイプはt3a.nanoとして、スワップ領域を2GB確保します。スワップ領域というのは物理メモリを使い切らないように退避させる場所のことを言います。物理メモリを使い切ると動作が遅くなるリスクがあり、回避する必要があります。t3aとすることでEC2のアベイラリティーゾーンが1箇所(a)だけになり障害を受けたときに逃げられなくなりますが料金が安くなります。PostgreSQLをインストール出来たらpgAdmin4で接続できるか試します。サーバー登録時にホスト名をEC2のIPv4アドレスに設定して接続を行い、中身を見れればOKです。pgAdmin4とはPostgreSQL用のGUI管理ツール、つまり直感的にデータベースを操作できるツールで、実務でも使っています。
サーバーサイドの言語はPHPとしますが、アラーム時間を登録する処理と通知処理がどんな仕様になるかは未定です。切羽詰まったらCakePHP4をcomposerを使ってインストールしてcake bakeコマンドを使って簡単にCRUDシステムを実装しますが、PHP(+HTML)だけで小さく実装したいものです。CRUDというのはシステムに必要な4つの主要機能「新規作成(Create)」「一覧(Read)」「編集(Update)」「削除(Delete)」の頭文字をまとめたものです。
②アプリケーションに通知
ESP32とアプリケーションのAPIを使ってお茶会を通知する。
通知に使うアプリケーションはLINE、Slackでしょうか。両者ともESP32を使って通知するプログラムの例がございます。LINEについては社内の実験でLINE APIを使ったオークションアプリを作った経験がございます。出品物の名前・説明・開始額を入力から写真を撮影して出品します。購入側の動作も試して出品者に通知されることを確認しました。
LINE通知については16日に下リンクで紹介されている方法を試したところ成功しました。この方法は学習書籍でも紹介されています。本にすることで振り返るときにスクロールして視点を変えなくても済むメリットがあります。
設定した時間に通知処理が行われ、アプリケーション側に通知メッセージが表示されればOKとします。
締め切りまでに時間が余ればブザーを使って音で知らせる方法も試します。ブザー音ではアプリの通知音と違って音を自作できるのでより面白い!!
ブザーであればスターターキットにアクティブブザー(Active Buzzer)がございます。別のブザーを使った例で、金銭的に余裕があれば追加購入します。
③通知記録を画面表示
通知した時間を記録して一覧画面に並べる。
達成するには通知時間がデータベースに格納されている必要があります。そこでESP32とEC2を通信させて送られた時間をデータベースに登録する処理を実装します。登録した時間を使って通知時刻を縦並びに表示します。ページネーションや通知時刻の範囲検索があるとなお良くなります。
下のようなテーブル表示で値が表示されればOKです。データベースに格納するのが難問で画面レイアウト自体はすぐにできます。
通知時刻 | 通知先 | 通知内容 |
---|---|---|
2022年8月21日 14:30 | LINE | お茶会がもうまもなく |
2022年8月21日 19:00 | LINE | ごはんの時間です |
2022年8月22日 5:00 | LINE | 起きてください |
Fritzing(フリッツィング)
Fritzingというアプリケーションを使って配線・回路図を書けるようになる。
アラーム作りで構築した回路はFritzingという電子回路設計ツールを使って可視化します。hackster.ioというサイトでESP32の記事を見てFrizingで配線・回路図を起こしていたので自分も使いたくなりました。
Fritzingの使い心地を確かめる目的で「②アプリケーションに通知」で紹介したLINE通知を行うときに組んだ回路を書き起こしました。
ワイヤを点から点にまっすぐ引くことができ、抵抗器やスイッチなど基本的な部品は揃っているので使いやすいと思いました。
上の図の説明としてはまず3.3V電源とスイッチを接続して動かせるようにします。スイッチに使用するピンをIO34と設定して、スイッチが入ればIO34から10kΩの抵抗器を通してGND(グラウンド)へ「スイッチがONになったよ」と信号が送られます。スイッチがONになったときにLINEのAPIサーバにSSL接続してリクエスト送信を行い、LINEにメッセージが届くという仕組みです。
Fritzingで配線・回路図を書き起こすメリットは後で再現しやすくなることです。文字や画像だけではピンの役割やワイヤの位置関係が分かりづらい。何事ももう一度挑むときは楽勝になるようにしたいものです。
またFritzingは無料のものを使います。公式サイトでは有料版のみ紹介されていますが、下記事を参考にGitHubからZipダウンロードして展開すると無料で使うことができます。
電子回路設計ソフトの Fritzingを無料でダウンロードして使用する方法
ワークフロー
アラーム作りという課題を達成するためのワークフローをFigJamを使って作成しました。
ESP32側、AWS EC2側、利用者(色織まいは)側、ワークフローに示されているそれぞれの課題をこれから解決します。
基本的には「他の誰かがこの問題を解決しているだろうか?その解決方法は自分にも生かせるだろうか?」と考えて記事をディグします。それから記事を組み合わせて新しい解決方法を作成し、いったんドキュメントや図を作成して見える化した後、実装します。
既知の知識のコラボレーション、誰かがいてこそ上手くいきます。手を止める時間も楽しむには焦らないこと、ホタルたちや誰かが応援していると知覚することですね。下手でも始めればいい、時々触腕が凝り固まって動かし方を忘れるときがありますが、そんなとき自分は作業場から離れます。一旦「ほたー」と海に向かって叫ぶと再起動できます。
最後に
現時点では拙い説明になります。
自分で見ても理解できていないと感じますが、やりたいことははっきりしています。
設定した期限まで1か月しかなく、さらにまどろみみっくたちのストーリーも描く必要があるため1か月フルに使うわけではありません。9月はエッセイ2話だけにする予定です。
自分を追い込むには何を達成したいか明らかにする必要があったため本記事を書いてよかったです。
以上になります。
それでは最後まで読んでいただきありがとうございました。ほた~