ソースに絡まるエスカルゴ

貧弱プログラマの外部記憶装置です。

【Raspberry Pi Pico】Raspberry Pi PicoでMicro SDカードの読み書きを行う

 以前の記事でESP32でMicro SDカードを扱う記事を書きました。

 Raspberry Pi PicoでもMicro SDカードの読み書きができることがわかったので、今回はその備忘録となります。
 詳しく参考資料に挙げているページ様を参照してください。


 では、始めます。


1:準備するもの
 今回準備したものは以下の通りです。Micro SDカードについてはデータが破損する可能性があるので、壊れてもよいようなものを使う方が安心です。


2:回路図
 以下のように回路を作ります。


3:サンプルスケッチの実行
 回路とライブラリの準備ができたら、以下のサンプルスケッチを作成します。RP2040のボードがインストールされていれば、サンプルスケッチで使うライブラリも入っているはずです。

・pico_sd_test.ino

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

const int _MISO = 4;
const int _MOSI = 7;
const int _CS = 5;
const int _SCK = 6;
const String TARGET_PATH = "example.txt";

File target_file;

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

  // 一応waitを入れる
  delay(3000);

  Serial.println("Initializing SD card...");

  // SPIのピン設定
  SPI.setRX(_MISO);
  SPI.setTX(_MOSI);
  SPI.setSCK(_SCK);

  // SDカードの接続判定
  if (!SD.begin(_CS)) {
    // 接続できなかったら終了
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");

  if (SD.exists(TARGET_PATH)) {
    // SDカードにすでにファイルがある場合はprintのみ
    Serial.println(TARGET_PATH + " exists.");
  } else {
    // ファイルがない場合は新規作成
    Serial.println("Creating " + TARGET_PATH + "...");
    target_file = SD.open(TARGET_PATH, FILE_WRITE);
    target_file.close();
  }

  // ファイルを書き込みモードでopen(openは1つのファイルしかできないため、この前には必ずcloseしておくこと)
  target_file = SD.open(TARGET_PATH, FILE_WRITE);
  Serial.println("Writing: testing 1, 2, 3.");
  // ファイル書き込みしてclose
  target_file.println("testing 1, 2, 3.");
  target_file.close();

  // ファイルを読み込みモードでopen
  target_file = SD.open(TARGET_PATH, FILE_READ);

  if (target_file) {
    Serial.println(TARGET_PATH + ":");
    // ファイルが存在していた場合は中身を表示
    while (target_file.available()) {
      Serial.write(target_file.read());
    }
    target_file.close();
    // ファイル削除
    SD.remove(TARGET_PATH);
  } else {
    Serial.println(TARGET_PATH + " is not exists!!");
  }

  Serial.println("end!!");
}

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

 スケッチの内容を見ればわかるかとは思いますが「Micro SDカードにアクセスしてファイルがなければ新規作成をして書き込み、そのファイルを読み込んで中身を表示した後にファイル自体を削除」という動きをしています。

 上記のスケッチをRaspberry Pi Picoに書き込み実行すると、シリアルモニタには以下のように表示されます。

15:40:18.060 -> Initializing SD card...
15:40:18.608 -> initialization done.
15:40:18.608 -> Creating example.txt...
15:40:18.608 -> Writing: testing 1, 2, 3.
15:40:18.686 -> example.txt:
15:40:18.686 -> testing 1, 2, 3.
15:40:18.732 -> end!!


 以上がRaspberry Pi PicoでMicro SDカードの読み書きを行う方法になります。

 SDカードへのアクセスが必要になってくる時もあるので、知っておいて損はないかと思います。


・参考資料