WRX micro:bitを車両で使う その32 環境モニターを作る(RTCモジュール追加編)

2021年1月22日micro:bit,社外部品・DIY

前回までの3回の記事で気温や湿度、eCO2(二酸化炭素濃度相当値)などをmicro:bitで測定出来る様になりました。現状ではLCDパネルに表示されるだけなので時間によっての変化量までは知る事が出来ません。せっかくなのでさらにRTC(リアルタイムクロック)モジュールとデータロガーモジュールを追加してみようと思います。今回はRTCモジュールについてです。

スポンサーリンク

RTC(リアルタイムクロック)モジュール

micro:bitにはハード的に時計機能はありません。プログラムで作る事も出来ますが(ただし誤差が大きい)、電源をOFFにするとそれまでの情報は消えてしまいます。RTCモジュールは時間を測定する専用のICを搭載していて、年月日から時分秒までの時計機能を持っています。バックアップバッテリーを利用する事で本体(今回の場合はmicro:bit)の電源がOFFでも、最初に設定された時からの日付や時刻を維持します。RaspberryPiやArduino用にバッテリーやヘッダーピンを合わせたモジュールも数多く販売されています。

micro:bit用RTCモジュール

micro:bit用にもRTCモジュールは幾つかありますが、RaspberryPiやArduino用の汎用モジュールでも利用出来る事があります。Microsot MakeCodeの拡張機能から「RTC」と検索するとDS1307やDS1302といったRTCのIC名の拡張機能が表示されます。従って同じくDS1307やDS1302を搭載したRTCモジュールであれば、micro:bitでも利用出来るかもしれません。※私は実際に利用していません。

購入したRTCモジュール

今回購入したRTCモジュールは、「SparkFun gator:RTC」という製品です。micro:bit用でブレイクアウトボードを含む「gator:bit」シリーズのアクセサリー品で、RTC用ICに「RV-3028」とバックアップバッテリーも搭載しています。またmicro:bit用なのでメーカーから拡張機能も公開されています(後々にこれで苦労しますが・・・。)

micro:bit用なので端子はmicro:bit本体と同じエッジコネクタです。モジュールの両側に同じコネクタがありますが、「gator:bit」シリーズの他のアクセサリー品やモジュールを数珠繋ぎに出来ます。通信はこれまでのBME280やCCS811と同じI2C通信です。

モジュール上にはバックアップ用の電池と、真ん中に押しボタンスイッチが付いています。電池はgator:RTCの仕様書にセイコーインスツルの「ML414H」と記載されていて、充電可能なリチウム二次電池の様です。スイッチについては押した時の日時がタイムスタンプとして記録(最新の1回のみ)されるとあります。

購入先は新バージョン(v2.0)のmicro:bitを購入した、スイッチサイエンスから。前回までの記事でBME280やCCS811では汎用モジュールを購入しましたが、「gator:bit」シリーズにはこの2つが一緒になった「gator:environment」があります。本当はこれを購入したかったのですが、前回までの時は在庫無しでした。

また同時にmicroSDカードにログを保存出来る、同じく「gator:bit」シリーズのアクセサリー品で「gator:log」も購入しています(先の写真で左側)。同じメーカー品でどちらにも拡張機能もある事から、手間が無いと思い購入しました。「gator:log」については次回記事で扱います。

メーカー(SparkFun)のガイドページ ⇒ gator:RTCgator:log

配線

「gator:bit」シリーズはエッジコネクタなのですが、数が増えると逆に接続が大変です。ブレイクアウトボードやこれまでのBME280等はヘッダーピンなので、さらに面倒な形になります。手持ちのジャンパー線もオスメスの関係もあって数が足りません。

仕方が無いのでワニ口クリップの配線とジャンパー線をコネクターで繋ぐ形にしました。コネクターにしておけばジャンパー線側のオスメスを交換する事も出来ます。ただし配線色が都合良くは揃いませんでした。配線時には注意が必要です。

とりあえず今回はgator:RTCのみを試してみます。配線自体は簡単で、micro:bitのブレイクアウトボードから電源となる3.3VとGND、I2C通信のSCLとSDA(端子19、20)を繋ぐだけです。

プログラム

Microsot MakeCodeでは最初にメーカーが公開している拡張機能を追加します。検索では出てこないので、案内されているGitHubのアドレスを検索欄に入れて表示させます。

上記の様にgator:RTC用のブロックが追加されます。

!注記!

先に書いておきますが、現在(2021年1月時点)ではこの拡張機能は最新のMicrosot MakeCodeでは使えません。プログラムをmicro:bitに転送する時に、コンパイルエラーが出てしまいます。GitHubにも問題として報告が上がっていますがまだ修正されていません。他の「gator:bit」シリーズでも同様の問題がある製品がある様で、SparkFunのフォーラムに同じ現象と思われる報告があります。SparkFun社員さんからの返信で現在修正中とあるので、このgator:RTCも修正される事を期待しています。

とりあえずの回避方法としてはMicrosot MakeCodeの古いバージョンでこの拡張機能の追加とプログラム作成を行う必要があります。Microsot MakeCodeは常に最新が提供されていますが、過去のバージョンもしばらくの間は使用する事が出来ます(micro:bitヘルプページ)。現在での過去バージョンはv2、v1、v0とあり、Microsot MakeCodeのアドレス「https://makecode.microbit.org/」の後ろにそれぞれv2~v0を追記するだけです。

私が試した所、Microsot MakeCodeの「v2」では動作しました。しかし過去バージョンなので最新のmicro:bit(v2.0)は使用する事が出来ません。ただし最新のmicro:bitではI2C通信に問題があるので、結局はダメなのですが・・・。

---注記ここまで

※上記プログラムは現状、Microsot MakeCodeのバージョン「v2」で作成しています。

拡張機能として追加されるブロックは色々ありますが、それほど難しい物は無いと思います。とりあえず上記の様にプログラムを作ってみました。最初に日時を設定する必要がありますが、バックアップバッテリーがあるので、しばらく通電状態にしておけば充電され、設定した日時も保持されると思います。「set date to」で年月日を指定しますが、数値の最初は月、「20」に続く数値は西暦年です。上記では2021年1月1日(金)にしています。

「set time to」で時間を指定します。数値の上から時・分・秒で上記は10:15:30にしています。最後にAM・PMを選択しますが、注意点として数値は直接入力すると範囲外でも入ってしまいます。その場合はgator:RTCでは予期せぬ結果が反映されてしまう可能性があります。

また正確に時間を合わせるには、ある程度先の時間をプログラムで設定しておき、micro:bitに転送後に時計を見ながらAボタンを押して設定など、専用のプログラムを作った方が良いかもしれません。

I2C通信のアドレス設定ブロックがありませんが仕様では0x52が書き込みアドレス、0xD2が読み込みアドレスとなっていて、変更は出来ない様子です。

結果

Aボタンを押す事で日付と曜日がmicro:bitのLEDに表示されます(1-1-2021 Friday)。Bボタンで時間が表示されます(10:15:30 AM)。もちろん設定から経過した日時です。他にも別の形式(順序)のブロックもありますが、無い場合は「配列」のブロックで切り分けたり合わせたり出来ると思います。

その他

今回のgator:RTCは、最新のMicrosot MakeCodeで拡張機能が利用出来ない事は事前には未確認でした。とりあえずv2で動いていますが、逆に今度はこれまでのBME280やCCS811、LCDパネルが機能するのかという問題が出てきます(実際には既に確認済みですが、非常に苦労しました)。さらに全てI2C通信なので、こんなに繋いで大丈夫だろうかと心配な所もあります(これも既に確認済みで問題無し)。

またバックアップバッテリーについてはしばらく通電していても、一向に充電される様子がありません。先のプログラムで日時の設定ブロックを省いて一度電源を切ると、初期状態の「1-1-200 Monday 0:0:0」に戻ってしまいます。製造から時間が経っていて、過放電にでもなってしまっているのでしょうか?

追記

バックアップバッテリーについてはモジュールに搭載されている「RV-3028」に、電源とバックアップバッテリーの切替機能があり、EEPROM BACKUP REGISTERへの設定(書き込み)で機能を選択する事になっています。gator:RTCの拡張機能内でこれを行っているのか、最新のMicrosot MakeCodeで利用出来ない事にも原因があるのか、不明な点が多くて分かりません。

---追記ここまで

前回は汎用モジュールのCCS811で苦労したので、今回はmicro:bit用のモジュールを購入しましたが、逆に裏目に出てしまったか・・・。次回はgator:logを扱いますが、こちらはI2Cではなくシリアル通信です。

※micro:bit用のモジュールはメーカーから拡張機能も提供されている場合がほとんどですが、RaspberryPiやArduino用の汎用モジュールは利用出来る拡張機能が無い場合もあります。汎用モジュールを購入する場合は先に利用出来そうな拡張機能を探した方が良いと思います。最終的には実際に試してみないとわかりませんが・・・。

「micro:bit」関連記事

以下は「micro:bit」タグの記事一覧です(投稿順)。現在の記事とこれ以降に投稿した記事も含みます。「その24」までの記事ではmicro:bit本体のバージョン「1.5」を使用しています。

その他

FA用PLCとELM327を使用した「OBD2」関連の記事は以下の記事から始まります。

注記

    • このブログ内で書いている内容はあくまで私の利用する製品(アプリ含む)や機器での場合です。他メーカーの製品や機器をはじめ、同じメーカーの製品・機器であってもバージョン違い等の場合もあるので、記事内容の保証や責任を負う事は出来ません。
    • 記事内で紹介している製品や、その他の類似製品を購入・利用する場合はそのメーカーや購入先で仕様等を確認し、自己判断と自己責任の下で利用して下さい。
    • 記事内で公開しているmicro:bit用プログラムは自由に利用・改変して頂いて構いません。ただし不具合やバグもありますので、プログラムを利用した際の故障や事故等についての保証や責任を負う事は出来ません。自己判断と自己責任の下で利用して下さい。
    • micro:bit製品やプログラミング、その他記事内容について個別の問合せや依頼を頂いても回答する事は出来ませんので、予め御了承下さい。
    • BBC micro:bitは、micro:bit教育財団の登録商標です。その他のブランド名または製品名は各所有者の商標です。