見出し画像

【ESP32 プログラム】SDカードに記録してみよう


いろいろなセンサデータが取れるようになると、そのデータを記録したくなります。そんな時によく使うのはSDカードです。今回はSDカードへの記録方法を紹介します。
ベースとするプログラムは前回作成した土壌湿度計のプログラムをベースにSDカードの記録プログラムを追加していきます。

結線図

図1に結線図を示します。土壌湿度センサの記事と重複しますが、今回使う土壌湿度センサは3つの端子があります。この向かって右側は電源(3.3V)と左側はGND、中央は信号(電圧)です。電源とGNDはESP32のそれぞれのポートに接続します。信号ポートは今回はGPIO12に接続することにします。
それに加えてSDカードリーダを結線します。SDカードリーダの各端子とESP32との結線は図1の右端に記載のとおりに行います。

図1 結線図

プログラム

ESP32のプログラムを以下に示します。
SDカードに記録するのに"FS.h" と "SD.h" をインクルードします。
そして、SDカードの初期化処理をします。今回はGPIO5をCS端子に接続しているので、「SD.begin(5)」としています。それがうまくいかなかった場合の処理と合わせて、if(!SD.begin(5)){ Serial.println("Card Mount Failed"); return; }としています。
あとは記録したいデータをString型にしてdataStringに入れて自作関数のappendFile(SD, "/datalog_0.txt", dataString);で書き込むだけです。今回は1つのデータだけなので、dataString変数の最後に改行"\n"だけ加えていますが、複数データがある場合には、カンマ","で区切ってあげれば、CSVデータとして保存されます。今回は1つのデータということでファイル名も"/datalog_0.txt"としていますが、拡張子はcsvとしてもよいでしょう。
自作関数のappendFileは何も気にせずにそのまま使ってもらえればよいですが、中身を細かく知りたい方は1つ1つ処理を追いかけてみてください。

#include "FS.h"
#include "SD.h"

// SD
String dataString = "";

// 土壌湿度センサの接続ピン
#define SOIL_SENSOR 12

void setup() {
  // シリアルモニタを初期化:デバッグ用に使用
  Serial.begin(115200);

  // SD カード初期化
  Serial.println("Initializing SD card...");
  if(!SD.begin(5)){
      Serial.println("Card Mount Failed");
      return;
  }

}

void loop() {
  // アナログ値を取得
  int sensorValue = analogRead(SOIL_SENSOR);

  // 土壌湿度センサの値をリアルモニタに表示
  Serial.print("Soil Moisture Level: ");
  Serial.println(sensorValue);

  // SD記録
  dataString = String(sensorValue) + "\n";
    appendFile(SD, "/datalog_0.txt", dataString);

  // 計測間隔 10分(600秒:600000ミリ秒)
  delay(600000);
}

// SDカードに追記
void appendFile(fs::FS &fs, const char * path, String message){
    Serial.printf("Appending to file: %s\n", path);

    File file = fs.open(path, FILE_APPEND);
    if(!file){
        Serial.println("Failed to open file for appending");
        return;
    }
    if(file.print(message)){
        Serial.println("Message appended");
    } else {
        Serial.println("Append failed");
    }
    file.close();
}

購入部品

最新情報「電子工作お買い物一覧」の記事を参照ください。
リンク切対応や代替部品の紹介もしています。


いいなと思ったら応援しよう!