SD Card Module JP

아두위키 : Arduwiki


概要

Arduino SDカードモジュールは、Arduinoボードと互換性のあるSDカードインターフェースモジュールです。ArduinoボードでSDカードを読み書きできるようにし、さまざまなプロジェクトでデータ保存、ロギング、ファイル管理などに使用できます。

仕様

項目 内容
対応カード Micro SDカード、Micro SDHCカード(高速カード対応)
電源レベル変換 5Vおよび3.3Vシステムインターフェース対応
電源供給範囲 4.5V - 5.5V、3.3Vレギュレータ回路内蔵
通信インターフェース 標準SPIインターフェース
ピン構成 GND、VCC、MISO、MOSI、SCK、CS
位置決めホール M2スクリュー位置決めホール4つ(直径2.2mm)

活用例

回路構成

Arduinoピン番号 SDカードモジュール
4 CS
11 MOSI
12 MISO
13 SCK
GND GND
5Vまたは3.3V VCC

SDカードのフォーマット

この例では、SDカードをクリーンな状態で開始するため、SDカードをフォーマットします。

SDカードリーダーを使用してPCに接続し、フォルダを右クリックしてフォーマットしてください。

(※ 必須ではありません!SDカードに重要なデータがある場合は、必ずバックアップを取ってください。)

1. SDカードに書き込み

SDカードに「GONGZIPSA」という文字列を記録する例です。内部にテキストファイルが作成されます。

#include <SD.h>

File myFile;

void setup() {
  Serial.begin(9600);
  
  // SDカード初期化
  if (!SD.begin(4)) {
    Serial.println("SDカード初期化失敗");
    return;
  }
  
  // ファイル書き込み
  myFile = SD.open("test.txt", FILE_WRITE);
  
  if (myFile) {
    Serial.println("test.txtファイル書き込み開始");
    myFile.println("GONGZIPSA");
    myFile.close();
    Serial.println("ファイル書き込み完了");
  } else {
    Serial.println("ファイル書き込み失敗");
  }
}

void loop() {
  // 何も処理しない
}

15行目では、FILE_WRITEのほかにREADモードもあります:

モード 説明
FILE_READ ファイルを読み取り専用で開きます。ファイルに書き込むことはできません。ファイルが存在しない場合は開けません。
FILE_WRITE ファイルをライティングモードで開きます。ファイルが存在しない場合、新規作成されます。既存のファイルがある場合、そのファイルの末尾にデータを追加します。既存の内容は上書きされません。

実行結果

2. SDカードからファイルを読み取る

SDカード内のファイルを読み取ってシリアルモニタに出力する例です。

#include <SD.h>

File myFile;

void setup() {
  Serial.begin(9600);
  
  // SDカード初期化
  if (!SD.begin(4)) {
    Serial.println("SDカード初期化失敗");
    return;
  }
  
  // ファイル読み取り
  myFile = SD.open("test.txt");
  
  if (myFile) {
    Serial.println("test.txtファイル読み取り開始");
    while (myFile.available()) {
      Serial.write(myFile.read());
    }
    myFile.close();
    Serial.println("ファイル読み取り完了");
  } else {
    Serial.println("ファイル読み取り失敗");
  }
}

void loop() {
  // 何も処理しない
}

実行結果

3. SDカード内のファイルリストの確認

SDカード内のファイルリストをシリアルモニタに出力する例です。

#include <SD.h>

void setup() {
  Serial.begin(9600);
  
  if (!SD.begin(4)) {
    Serial.println("SDカード初期化失敗");
    return;
  }
  
  Serial.println("ファイルリスト:");
  listFiles(SD.open("/"));
}

void loop() {
  // 何も処理しない
}

void listFiles(File dir) {
  while (true) {
    File entry = dir.openNextFile();
    if (!entry) {
      break; // もうファイルはない
    }
    Serial.print(entry.name());
    if (entry.isDirectory()) {
      Serial.println(" [ディレクトリ]");
      listFiles(entry); // 再帰的にディレクトリ内のファイルを表示
    } else {
      Serial.print(" [ファイルサイズ: ");
      Serial.print(entry.size());
      Serial.println(" バイト]");
    }
    entry.close();
  }
}

実行結果

4. センサーデータのログ記録

土壌湿度センサー(YL-69) センサーのデータを3秒ごとに記録し、SDカードに保存する例です。

#include <SPI.h>
#include <SD.h>

void setup() {
  Serial.begin(9600);

  // SDカード初期化
  if (!SD.begin(4)) {
    Serial.println("SDカード初期化失敗");
    return;
  }

  // YL-69センサー初期化(アナログピン設定)
  pinMode(A0, INPUT);
}

void loop() {
  // YL-69センサーデータの読み取り
  int moistureLevel = analogRead(A0);

  // moisture.txtファイルをFILE_WRITEモードで開く
  File myFile = SD.open("moisture.txt", FILE_WRITE);
  
  if (myFile) {
    // センサーデータをファイルに記録
    myFile.print("Moisture Level: ");
    myFile.println(moistureLevel); // ファイルにデータ追加
    myFile.close(); // ファイルを閉じる
    Serial.println("データ記録完了");
  } else {
    Serial.println("ファイル書き込み失敗");
  }

  delay(3000); // 3秒ごとにデータ記録
}

実行結果

シリアルモニタには「データ記録完了」と表示され、SDカードをPCに接続すると、以前作成したTEXT.txtファイルと現在記録したMOISTURE.txtファイルが存在します。MOISTURE.txtには土壌湿度センサー(YL-69)のデータが記録されているのが確認できます。

購入リンク

公集サモール