🗂️

SDカードの読み書き方法 (便利モジュール編)

2023/05/17に公開

前回の失敗を振り返る

https://zenn.dev/megeton/articles/e6a8ab7abf90d0

前回は何もかもが不安定だった。まず SD.begin() が通るかどうかが運まかせで、それが通ったとしても書き込むとファイルシステムがぶっこわれるというめちゃくちゃな状況だった。

その原因はSDカードを単純なソケットを仲介してArduinoに直接接続する形になっていたためと思われる。ここで慣れた人なら何かを何かするのだろうが素人にはお手上げなのだった。

そこで今回はSDカードとArduinoの間でいろいろやってくれる便利モジュールを使ってみることにした。

部品

配線

モジュール側 Arduino 側 GPIO
CS SS 10
SCK SCK 13
MOSI MOSI 11
MISO MISO 12
VCC 5V
GND GND

使用するピンの場所は決まっている。

動作確認

#include <DebugLog.h>
#include <SD.h>

void setup() {
  Serial.begin(9600);
  boolean value = SD.begin();
  ASSERT(value);

  // 書き込み
  if (true) {
    SD.remove("tmpfile1.txt"); // FILE_WRITE が「追記」のため削除しておく
    File file1 = SD.open("tmpfile1.txt", FILE_WRITE);
    ASSERT(file1);
    file1.println("123");
    file1.println("456");
    file1.close();
  }

  // 読み込み
  if (true) {
    File file1 = SD.open("tmpfile1.txt");
    ASSERT(file1);
    while (file1.available()) {
      String line = file1.readStringUntil('\n');
      PRINTLN(line.length());
      PRINTLN(line);
    }
    file1.close();
  }
}

void loop() {
}

を実行したところ問題なく動作した。

まとめ

Discussion