見出し画像

M5StickC Plus とUIFlowでプログラミング(Ex2) - RTCとNTP

 M5StickC Plusには、RTC(Real Time Clock)が搭載されています。RTCは、現在の時刻を記憶しておくもので、Arduinoやmicro:bitなどのマイコンでは後付けで増やす必要があります。

 マイコンの活用を考えたときに、現在時刻を取得できるというのは大きな利点で、例えば、「毎日何時に動作させる」とか、「夜間だけ動作させる」とか時刻に依存した処理を実現することができます。

 液晶やブザーなんかもそうですが、M5StickC Plusは、そういった、Arduinoやmicro:bit v1では外付けでしか対応できなかったものを予め内蔵しているという点で(ある意味)教育向きなのかなと思います。

 授業の中では生徒に、活用方法を考えさせることがありますが、だいたいは「絵に書いたもち」になりがちです。「こういう活用方法があるかも」と考えても、「それは外付けで時間を教えてくれる装置が欲しいね」とか「液晶がほしいね」とかで、到底現実に落としきれないことが多々あるのです。

 機能の実現に必要なものが、あらかじめ搭載されているというのはそれだけでメリットです。「外付けでつなげればなんとかなるけど…」よりはよっぽど教育的です。

 さて、前置きはこのくらいにして、「RTC」は「ハードウェア」の中にあります。

画像2

 「設定」ブロックでRTCに時刻を設定、「年」「月」「日」「時」「分」「秒」「日時」で日付や時刻を取得します。

画像2

 例えば、「2021年8月11日午前8時30分10秒」に時刻を設定するには上の画像のような感じになります。

 初期設定では時刻は正しく設定されていませんし、バッテリが放電しきってしまうと正しくRTCに時刻が設定されてあっても、時刻の情報は失われます。

 その度に時刻を設定ブロックから設定し直すのでは大変です。そこで、NTP (Network Time Protocol)を使って、インターネットから時刻を取得してみましょう。

※もちろん、M5StickC Plusがインターネットに接続している必要があります。今回はUIFlowをブラウザで使っている関係上すでにその点はクリアしていますが、もしデスクトップ版のUIFlowをお使いの場合はお気をつけください。

 「NTP」のブロックは「高度なブロック」の中の「NTP」にあります。

 使い方としては、

画像4

「Init ntptime with host (NTPホスト) and timezone( タイムゾーン )」ブロックで時刻を取得、「Get ~」で~を取得のような感じです。

画像7

 RTCのブロックと組み合わせたプログラムは以下のようになります。RTCの「年」の設定が「2021」未満(要するに、未設定)ならNTPで時刻を取得してRTCに設定します。日本のタイムゾーンはUTC+9(協定世界時から9時間進んでいる)なので、9を指定します。

画像3

 せっかくなのでバッテリ表示と合わせて現在時刻をRTCから取得して表示させるプログラムを書いてみました。

画像5


画像7

 m5fファイルもつけておきますので、UIFlowのメニューから読み込んでお使いいただけます。


この記事が気に入ったらサポートをしてみませんか?