M5StackでSDカードにデータを保存したい【超初心者がIoT開発に挑んでみる#11】

IoT

はじめに

 前回はセンサーで取得した温度湿度をM5Stackを経由して遠隔で見てみました。

 今回は、前回の内容に直接は関係ないですが、M5StackでSDカードにデータを保存する方法を学んでみたいと思います。

microSDカードの挿入

 M5StackにはmicroSDカードを挿入することができ、センサーで取得したデータを保存することができます。挿入する箇所はM5Stackの側面にあります。microSDの向きを間違えないように注意して挿入してみてください。

今回使用するmicroSDカードですが、以下のことに注意してもらえればと思います。
・最初は安価なものを選ぶ
好みの問題ではありますが、大したことをやるわけでもないのでそれほど高価なものは必要ないかなと思います。1,000円程度のものでもまずは事足りるかと思います。
・16GB以下のものを選ぶ
M5Stack Basic v2.6では16GBより大きいmicroSDは正常に動作しない場合があるという話を聞いたことがあります。そのため、16GB以下のものをお勧めします。
・SDカード↔︎microSDカード変換アダプタが付いているものを選ぶ
今後、microSDカードを他の用途に流用しやすいように変換アダプタが付いているものがいいです。大抵の場合は付いているかとは思います。

スケッチと動作確認

 それでは具体的な内容に踏み込んでいきます。まずはスケッチです。 
今回はセンサーで取得した温度湿度のデータを保存できるようなスケッチにしました。保存形式はCSVファイルです。

”温度湿度のデータ?なんの話?”という方は以下の記事をご参照ください。

スケッチは下のようなものになります。

#include <M5Stack.h>
#include <Wire.h>
#include <M5UnitENV.h>
#include "SHT3X.h"

SHT3X sht30;
File csvFile;

float tmp = 0.0;  //温度を格納する変数
float hum = 0.0;  //湿度を格納する変数
int n = 0;  //測定回数を格納する変数

void setup() {
  M5.begin();
  Wire.begin();
  M5.Power.begin();
  sht30.begin();

  M5.Lcd.setTextColor(GREEN);
  M5.Lcd.setTextSize(4);
  M5.Lcd.setCursor(10, 10);
  //一応、M5Stackの画面にそれっぽい文章を表示
  M5.Lcd.println("Saving data to SD card...");

  //SDカードにDataファイルがなければ作成する
  if (!SD.exists("/Data")) {
    SD.mkdir("/Data");
  }
}

void loop() {

  char fileName[99];  //csvファイル名を格納する変数
  snprintf(fileName, 99, "/Data/testFile.csv");  //DataフォルダにtestFile.csvを作成

  if (SD.exists(fileName) == false) {
    csvFile = SD.open(fileName, FILE_APPEND);  //ファイルを開く
    csvFile.print("Data,Temperature,Humidity\n");  //データは","で区切る
    csvFile.close();  //基本的にファイルは開いたら閉じる
    delay(1000);
  }

  if (sht30.update()) {
    tmp = sht30.cTemp;
    hum = sht30.humidity;
  }
  
  //データを書き込む
  //データは","で区切る
  csvFile = SD.open(fileName, FILE_APPEND);
  csvFile.print(n);
  csvFile.print(",");
  csvFile.print(tmp);
  csvFile.print(",");
  csvFile.print(hum);
  csvFile.print("\n");
  csvFile.close();
  n++;  //測定回数をカウント
  delay(2000);
}

 上記スケッチを温度湿度センサーを接続した&microSDカードを挿入したM5StackにUploadしてみましょう。今回は2秒毎にデータを取得するスケッチにしました。

上のスケッチ内でも書いている通り、ファイルは”開けたら閉じる”が基本らしいです。今回のような単純なプログラムではさほど問題になりませんが、
・他のプログラムが同じファイルにアクセスできなくなる
・意図しない書き込みが起こる
・メモリを圧迫する
などの問題が起こる可能性があるようです。

 数十秒ほどしたら、M5Stackの電源を切って(PCとの接続を切った状態でM5Stack本体電源ボタンを2度押し)microSDカードを取り出します。私はせっかちなので、10秒ちょっとしたら測定をやめました。

次にPCにmicroSDカードを接続してデータを取り出してみましょう。最近のPCだと直接microSDカードを挿せないものも多いので、カードリーダーなど適宜準備してください。

下の画像のようにmicroSDカード内にDataフォルダが作成されています。

Dataフォルダが作成されていることが確認できたら、Dataフォルダの中にあるtestFile.csvを開いてみてください。下の画像のようにデータが保存されていると思います。

ちゃんと保存されていますね。2秒ごとにデータが書き込まれるので、16秒間だけ測定をしたということになります。

最後に

いかがでしたでしょうか。今回はM5StackでmicroSDにデータを保存してみました。いつも通り簡単な内容だったかと思います。これを使えば、ある程度の期間のデータを蓄積することができます。IoT開発のツールがまた一つ増えました。

(欲を言えば、microSDではなくてクラウドに保存できるようにしたい。が、果たしてできるのか…ひとまずそれはまた今度ですね。)

それでは今回はこのへんで終わりにしましょう。ではでは。

おすすめの書籍

 もっと詳しくM5Stackについて知りたい!という方はこちらの書籍がおすすめです。とても詳しく載っていてわかりやすいです。

とりあえず何か作ってみたい!という方にはこちらの書籍がおすすめです。書いてある通りにやるだけでお手軽にIoTデバイスを作ることができます。

※Amazonのアソシエイトとして、当メディア(Nラボ備忘録)は適格販売により収入を得ています。

他記事のご紹介

当ブログではさまざまな記事を投稿しています。特に資格取得に関する記事はとても人気です。
一読の価値はあると思いますので、ぜひご覧ください!

本ページはプロモーションが含まれています。

スポンサーリンク
IoT
T-Kをフォローする
タイトルとURLをコピーしました