![見出し画像](https://assets.st-note.com/production/uploads/images/165521733/rectangle_large_type_2_bc2f0ffa0386fc8c8fab250791c3c7ce.jpeg?width=1200)
【ESP32 プログラム】SDカードに記録してみよう
いろいろなセンサデータが取れるようになると、そのデータを記録したくなります。そんな時によく使うのはSDカードです。今回はSDカードへの記録方法を紹介します。
ベースとするプログラムは前回作成した土壌湿度計のプログラムをベースにSDカードの記録プログラムを追加していきます。
結線図
図1に結線図を示します。土壌湿度センサの記事と重複しますが、今回使う土壌湿度センサは3つの端子があります。この向かって右側は電源(3.3V)と左側はGND、中央は信号(電圧)です。電源とGNDはESP32のそれぞれのポートに接続します。信号ポートは今回はGPIO12に接続することにします。
それに加えてSDカードリーダを結線します。SDカードリーダの各端子とESP32との結線は図1の右端に記載のとおりに行います。
![](https://assets.st-note.com/img/1734106728-xTDHINR72ZdJ0c6q1EOatpLU.png?width=1200)
プログラム
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();
}
購入部品
最新情報は「電子工作お買い物一覧」の記事を参照ください。
リンク切対応や代替部品の紹介もしています。