はじめに
M5Stackをデータロガーやセンサーノードとして使うときに、時刻情報を扱うことがあります。
Wi-Fi環境があればNTPが使えますが、ない場合はRTCも併せて使う必要があります。
私はM5Stackを簡易データロガーに使うケースが多く、Wi-Fi無し環境も想定してRTCを用いる際の覚書です。
また、データをMicroSDカードに保存することも考え、時刻情報をゼロ埋めしてファイル名に使う処理も同時に行っています。
ハードウェア
今回は手持ちのM5Stack FireとRTCユニットを使っています。
BasicやGrayなど、RTCを内蔵していないモデルの場合は同様の構成になります。Core2やSticksCはRTCを内蔵しているためRTCユニットは不要です。
時刻合わせ
まずはRTCの時刻合わせを行います。
開発中はWi-Fi有り環境が前提ですので、NTPを使って時刻合わせを行います。
プログラムの全景はこんな感じです。
NTPは日本のサーバから情報を入手して、日本のタイムゾーン「+9」に合わせています。
NTPの「Get year」ブロックは年を4桁、RTCの「set rtc」ブロックは2桁で扱っている様ですので、Get year - 2000をしてから入力しています。
また、NTPの「Get weekday」ブロックは曜日情報をテキストで出力するので、「weekday2num」関数を作って数値に変換したうえでRTCに設定しています。
ゼロパディングしてファイル名っぽくしてみる
filenameという変数を作って、その中にゼロ埋めして8桁にした年月日をテキストで入れています。
残念ながらゼロ埋してテキスト化するブロックはありませんので、コードを実行ブロックを使ってmicropythonのformat機能を使っています。
コード実行ブロックの中身はこんな感じです。
filename = str(rtc_0.get_date_time(6) + 2000 ) + ('{:02}'.format(rtc_0.get_date_time(5))) + ('{:02}'.format(rtc_0.get_date_time(4)))
rtc_0.get_date_time(6) は、RTCユニットから年情報を2桁の数値で取り出しているので2000を足してstrに変更しています。
rtc_0.get_date_time(5)とrtc_0.get_date_time(4)はそれぞれ時間と分ですので、formatで2桁のゼロ埋めstrに変更しています。
まとめ
最近は M5Stackを簡易的なデータロガーにするケースが良くあります。データはMQTTでサーバに投げる事が多いのですが、Wi-Fiが使えない場合はSDカードにCSVで保存しています。
そんな時にこの手の処理を使うのですが、細かいところはすぐに忘れてしまうので覚書にして公開しておきます。
投稿者の人気記事
-
airpocket
さんが
2023/03/03
に
編集
をしました。
(メッセージ: 初版)
-
airpocket
さんが
2023/08/22
に
編集
をしました。
-
airpocket
さんが
2023/08/22
に
編集
をしました。
ログインしてコメントを投稿する