SDカードのファイルの操作(Arduino詳解)

Arduino詳解その31です。前回の記事はこちらです。 hirocom777.hatenadiary.org

ファイルを操作する

 前回はSDカード内のファイルやフォルダーの状態を把握しました。今回は、これらファイルやフォルダーを操作してみようと思います。

f:id:HiroCom777:20210220191125j:plain

ファイルを作成する方法は前々回にご紹介しましたが、削除するにはどうしたらいいのでしょうか。また、ファルダーを作ったり、削除したりする方法も説明します。

ファイルの削除

 まずはファイルの削除からです。以下のスケッチをご紹介します。

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

void setup() {
  Serial.begin(9600);
  SD.begin(4);
  if (SD.remove("OLD_00.txt")) {
    Serial.println("OLD_00.txt削除しました");
  }
  if (SD.remove("FOLDER/OLD_01.txt")) {
    Serial.println("FOLDER/OLD_01.txt削除しました");
  }
  if (SD.remove("FOLDER/OLD_02.txt")) {
    Serial.println("FOLDER/OLD_02.txt削除しました");
  }
}

void loop() {
}

このスケッチは、SDカード内にある'OLD'で始まる名前の3つのファイルを削除します。削除に成功した場合には、シリアルモニターにメッセージを送ります。SDカード内はあらかじめPCで以下の様にファイルとフォルダーを作成しました。

D:.
│  NEW_00.txt
│  OLD_00.txt
│
└─FOLDER
        NEW_01.txt
        OLD_01.txt
        OLD_02.txt

 上のスケッチを書き込んでから、SDカードをセットしてシリアルモニターを開いてみると以下の様に表示しました。

OLD_00.txt削除しました
FOLDER/OLD_01.txt削除しました
FOLDER/OLD_02.txt削除しました

 SDカードの中をPCで再確認してみると以下の様になっています。

D:.
│  NEW_00.txt
│
└─FOLDER
        NEW_01.txt

 指定されたファイルが削除されています。  今回新しく出てきたものはこちらです。

* SD.remove()

 ファイルを削除します。カッコ内に削除するファイル名を指定します。ファイルを指定する場合、フォルダーを含んで指定することもできます。この場合フォルダー名とファイル名を'/'で区切ります。削除に成功した場合はtrue、失敗した場合はfalseを返します。

フォルダーを作成/削除する

 続いて、フォルダーの作成/削除方法を見てみましょう。以下のスケッチをご紹介します。

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

void setup() {
  Serial.begin(9600);
  SD.begin(4);
  //ファルダ―削除
  if (SD.rmdir("OLD_1")) {
    Serial.println("OLD_1を削除しました");
  }
  if (SD.rmdir("OLD_2/OLD_3")) {
    Serial.println("OLD_2/OLD_3を削除しました");
  }
  if (SD.rmdir("OLD_2")) {
    Serial.println("OLD_2を削除しました");
  }
  //ファルダ―作成
  if (SD.mkdir("NEW_1")) {
    Serial.println("NEW_1を作成しました");
  }  
  if (SD.mkdir("NEW_2/NEW_3")) {
    Serial.println("NEW_2とNEW_2/NEW_3を作成しました");
  }
  if (SD.mkdir("NEW_2/NEW_4")) {
    Serial.println("NEW_2/NEW_4を作成しました");
  }
}

void loop() {
}

 こののスケッチは、SDカードの中にある3つのフォルダーを削除して新しいフォルダーを作成します。削除、作成に成功した場合には、シリアルモニターにメッセージを表示します。SDカードの中は、以下の様に設定しました。

D:.
├─OLD_1
└─OLD_2
    └─OLD_3

 上のスケッチを書き込んでから、SDカードをセットしてシリアルモニターを開いてみると以下の様に表示しました。

OLD_1を削除しました
OLD_2/OLD_3を削除しました
OLD_2を削除しました
NEW_1を作成しました
NEW_2とNEW_2/NEW_3を作成しました
NEW_2/NEW_4を作成しました

 SDカードの中をPCで再確認してみると以下の様になっています。

D:.
├─NEW_1
└─NEW_2
    ├─NEW_3
    └─NEW_4

 PCで作成されたファルダーは削除されて、新しいフォルダーができています。

* SD.mkdir()

 フォルダーを作成します。'/'で区切ることで、フォルダー下のフォルダーも作成できます。上のスケッチでは'NEW_2'とその下にある'NEW_2'を同時に作成しています。すでにあるフォルダーの下にフォルダーを作成する場合も指定方法は同じです。作成に成功した場合はtrue、失敗した場合はfalseを返します。

* SD.rmdir()

 フォルダーを削除します。'/'で区切ることで、フォルダー下のフォルダーも削除できます。削除するファルダーは空である必要があります。上の例では'OLD_2'は空ではないので、その下の'OLD_3'を削除した後に削除しています。削除に成功した場合はtrue、失敗した場合はfalseを返します。

SPI通信

 いかがでしょうか。これでSDカードの操作についてはひととおりご紹介しました。これで、データや設定を記録、読み出しする機能をガシェットに搭載できますね。ところで今回使用したSDカード用ライブラリなのですが、SPI通信を使用していると冒頭でご紹介しました。次回はSPI通信についてご説明したいと思います。お楽しみに!!

hirocom777.hatenadiary.org

Arduino UNO入門の連載記事はコチラからどうぞ!!