当サイトは広告が表示されます。

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

micro:bit,社外部品・DIY

micro:bitで環境モニターとして完成した構成に、さらにデータロギング機能を追加する内容の2回目です。前回はRTC(リアルタイムクロック)モジュールを追加しましたが、今回はSDカードに任意のデータを保存する事の出来る、ロギングモジュールについてです。

スポンサーリンク

前回のRTCモジュールについては下記記事を見て下さい。

ロギングモジュール

micro:bit用のロギングモジュールでメモリーカードに保存出来る物を探すと、現状(2021年1月)ではSparkFunの「gator:log(SparkFunガイドページ)」か、これまででCCS811のモジュールで利用した拡張機能(SG33用)のメーカーでXinaBoxの「IM01 bridge(XinaBoxサイト)」の2種類がある様子です。ただしXinaBoxの方はブレイクアウトボードの様にmicro:bit本体を直接スロットに刺す形なので、今回の私の使用方法には合いません。前回のRTCモジュールと合わせて、購入もスイッチサイエンスで一度で済む事もあり、gator:log(スイッチサイエンス)を使用する事にしました。

モジュールを使用しない方法

micro:bitではUSBを用いたシリアル通信で簡単にPCと通信が出来るので、PC側のターミナルアプリ等でログを保存する事も出来ます。ただし長時間や屋外でのデータロギングにおいてはPCと合わせての利用には向いていないと思うので、やはり直接メモリーカードに保存出来た方が断然便利だと思います。PCとのシリアル通信については下記にて。

SparkFun gator:log

gator:RTCと一緒に購入したgator:logです(右側)。大きさはgator:RTC(左側)と同じで、「ATmega328P」プロセッサーとmicroSDカードスロットが搭載されています。gator:logで異なる点はこれまでのセンサー類やgator:RTCはI2C通信でしたが、gator:logはシリアル通信である事です。micro:bitのシリアル通信でエッジコネクタ側を使用する場合は、端子や通信速度等の設定が必要ですが、gator:logではgator:RTCと同様にSparkFunから拡張機能(GitHub)が公開されているので、これを利用します。

配線とSDカード

配線は3.3VとGNDの電源の他に、シリアル通信用のRXとTXをそれぞれmicro:bitのP15とP14に繋ぎます。またRST(リセット)をP13に繋ぎますが、これらの接続は拡張機能内で決まっていて変更出来ない様です。micro:bitのP13~15の利用にはgator:RTCと同様にブレイクアウトボードが必要です。ちなみに前回までのブレイクアウトボードはこれまでの環境モニター一式で使用しているので、今回はサーボモーター用の拡張ボードを使用しています(たまたまSPI用にP13~15の端子があった為)。

後で書きますが、gator:logの初期化とはSDカードのフォーマットでは無いので、先にPCでSDカードのフォーマットが必要です。SDかSDHC規格のmicroSDカードで容量は64MB~32GB、FAT16またはFAT32形式となっています。

プログラム

プログラムでは最初にMicrosot MakeCodeで、先のSparkFunから公開されている拡張機能を読み込みます。gator:RTC同様に拡張機能の検索では出てこないので、GitHubのアドレスを入力する形で追加します。

拡張機能が追加されると、gator:log用のブロックが上記の様に追加されました。SparkFunのガイドページに解説とサンプルプログラムがありますが、それほど難しい事は無さそうです。

※前回のgator:RTC用の拡張機能は、現在(2021年1月)では最新のMicrosot MakeCodeでは利用出来ず(コンパイルエラー)、古いバージョンとなるMicrosot MakeCode(v2)側で動作しましたが、gator:log用の拡張機能は最新版で利用出来ました。ただし一緒に利用する場合はv2側でプログラムを作成する必要があり、gator:logの拡張機能はv2側でも利用出来ました。

※上記プログラムはSparkFunのガイドページからダウンロードした物です。

サンプルプログラムでは最初にgator:logを初期化し、次にデータの保存先となるテキストファイルを指定しています(そのファイルが無ければ新規作成される)。以降は単純に「write」のブロックで文字を書き込んでいるだけですが、「write」は入力された文字だけで「write line」で改行コード付きになります。従って「write line」で書くまでは、保存される文字列は連続した形になります。

サンプルプログラムでも良いのですが、分かり易く上記のプログラムを試します。gator:logの初期化後に「TEST.txt」を指定(新規作成)し、write lineで「This is test!」と「(無記入)」を書き込みます。write lineは何も入力しなければ改行だけになります。その後はAボタンで「write」ブロック、Bボタンで「write line」ブロック、A+Bボタンでは「その他」にある「write line~at position」ブロックでそれぞれTEST.txtに書き込みます。

結果

Aボタンでは連続で「A button!」が書き込まれますが、Bボタンでは「B button!」後に改行されています。

A+Bボタンの「write line~at position」は、どうやら先頭から数えて指定した数値の位置に書き込む様ですが、その追加のされ方が少々不明です。最初のA・Bボタンで書いた状態からA+Bボタンを押すと、上記の様な結果となりました。positionは「30」にしていますがカーソールでは28番目、加えて上書きしている様でもその文字数が合っていない・・・?このブロックはあまり使う事が無さそうなので、気にしない事にします。

注意点

保存先ファイル

gator:logの初期化を行うと「config.txt」という設定ファイルが作成されます。また保存先のテキストファイルを特に指定しない場合は、これも初期化後に作成されるデフォルトの「LOG00000.txt」に保存されるとなっています(ただし実際に何か書き込まれるまでは作成されない)。

しかし私の場合はファイルを指定しない場合でも「LOG00000.txt」には何も書き込まれませんでした。さらに何度か検証していると「LOG00000.txt」ではなく「LOG65281.txt」という謎のファイル名になりました。「LOG65281.txt」であっても何も書き込まれませんが、65281はエラーコード?でしょうか。しかしファイルを指定すればそのファイルにちゃんと書き込んでいますが、以降この「LOG65281.txt」の現象は続いたままです。

保存先ファイルとフォルダーの位置

※上記プログラムはSparkFunのガイドページからダウンロードした物です。

ログデータによって保存先ファイルを変えたい場合は、書き込む前にその都度ファイルを指定する事で可能です。SparkFunのガイドページには上記のサンプルプログラムもあります。またファイルは「remove file~」ブロックで削除も可能です。

フォルダーについても「create folder~」ブロックで新規作成が可能で、「change to~folder」ブロックで保存先をそのフォルダーに変更出来ます。変更後にさらにフォルダーを新規作成すればサブフォルダーになります。フォルダーは「remove folder~」ブロックで削除出来ますが、その中にあるサブフォルダーやファイルも当然削除されます。

上記のプログラムでは最初に「TEST1」フォルダーを作成して保存先を「TEST1」にし、さらに「TEST2」フォルダーの作成と「TEST.txt」ファイルを指定しています。

その結果は上記で、「TEST1」フォルダー内に「TEST2」フォルダーと「TEST.txt」が作成されています。保存先を「TEST2」とはしていないので、「TEST.txt」は「TEST2」フォルダーと同じ「TEST1」フォルダー内です。ここから保存を上位のフォルダーに戻したい場合は、「change to~folder」のブロックでフォルダー名を入力しなければルートディレクトリへの移動となっているので、一旦最上位に戻る形の様です。

micro:bitとPCとの接続

micro:bitをPCにUSBで接続しながらMicrosot MakeCodeでプログラムを作成、転送する事は通常ある事ですが、そのままgator:logを使用しようとすると正しく動作しない場合があるようです。これはmicro:bitがPCとUSBでシリアル通信を行っている状態なので、一旦PCとの接続を切った上でmicro:bitのリセットボタンを押してプログラムを再スタートさせる事で、gator:log側のシリアル通信が有効になります。

microSDカードの抜き差し

microSDカードの差し込み時にカチッとツメが掛かるのですが、時々このツメが掛からない事があります。もう一度押し込んで抜き取る時にツメが開いたままになってしまう様で、上記矢印(スロットの側面)を手の爪で軽く押すとツメが戻りました。私が購入したgator:log固有の症状かもしれませんが、少し何処かに引っ掛かっている様です。

LEDランプ

gator:logの基盤上にはST1(青)とST2(緑)のLEDがそれぞれ1つずつあります。SparkFunのガイドページでは通常、ST1はmicro:bitとシリアル通信をしている時に点滅、ST2はSDカードに記録時に点滅するとあります。ST2は少し暗く点滅するので、分かり難いかもしれません。またST1が連続で3回点滅を繰り返す状態は、SDカードのフォーマットに問題があるとの事(SparkFunフォーラム)です。

その他

少々不明な点がありますが、基本となるデータロギング機能はちゃんと利用出来そうです。後はmicro:bit側で取得した各測定データをその後のデータ利用を踏まえた形(CSV等)で整える方法や、RTCで決まった時間間隔で記録する方法を考える必要があります。またSparkFunのガイドページでは書き込み毎に15msの休止時間を推奨していますが、記録するデータ量(文字数)との兼ね合いやmicro:bitの処理能力、またシリアル通信やSDカードへの記録時間もあるのであまり高頻度には行えないと思います。それでも今回の環境データ(数字や文字)であれば、1秒に1回は十分書き込めそうですが、SDカードの容量からも判断する必要があります。

次回は全てを組み合わせて、実際にログデータを記録してみようと思います。

「micro:bit」関連記事

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

micro:bit関連記事
クリックで開きます

「micro:bit+プラレール」も始めました。

プラレール関連記事

その他

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

注記

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