SDカードへのデータ書き込み(Arduino詳解)

Arduino詳解その28です。前回の記事はこちらです。

hirocom777.hatenadiary.org

ファイルを作って書き込む

 前回はSDカードそのものについてご紹介しました。特徴や弱点なんかもわかってきました。

f:id:HiroCom777:20210125230800j:plain
今回は、いよいよArduinoUNOとSDカードシールドを使ってSDカードにアクセスしようと思います。まずはファイルを作って書き込んでみましょう。今回は以下のスケッチを用意しました。

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

File myFile;
const int chipSelect = 4;

void setup() {
  Serial.begin(9600);
  SD.begin(chipSelect);
  myFile = SD.open("test.txt", FILE_WRITE);
  Serial.println("open test.txt");
}

void loop() {
  if (Serial.available()) {
    String data = Serial.readString();
    if (data != "end") {
      myFile.println(data);
      Serial.println("write data:" + data);
    } else {
      myFile.close();
      Serial.println("close test.txt");
      while (1);
    }
  }
}

動かす前の準備

 このスケッチは、ArduinoUNOに(SDカードシールド経由で)取り付けられているSDカードにファイルを作成してデータを書き込みます。最初に使用する前にSDカードが初期化(フォーマット)されている必要があります。基本的に購入した状態で初期化されているので、この作業は不要です。他で使いまわしたりして、中身が壊れているSDカードなどは初期化が必要になります。初期化はPCなどを使用して実行するのですが、あまり頻繁に実施するとSDカード自体の寿命を縮めますので注意してください。

動かしてみる

 それでは動かしてみましょう。SDカードをSDカードシールドに実装した状態で上記のスケッチを書き込んでください。書き込みが終わったら、シリアルモニターを開きましょう。シリアルモニターには、

open test.txt

と、表示されました。これで、text.txtファイルがSDカードに作成されました。次に、シリアルモニターの送信欄に何か文字を入力して送信してみてください。すると・・・

write data: + 入力文字

と、出たと思います。入力した文字をファイルに書き込んでいます。これを数回繰り返した後に、送信欄に"end"と入力して送信してください。今度は・・・

close test.txt

と、なりました。これでSDカード内のtext.txtファイル内に入力された内容が保存されました。PCに取り付けて内容を確認してみるとtext.txtファイルが確認できると思います。

スケッチの解説

 それではスケッチの解説です。今回も使用するライブラリは、最初に紹介したスケッチと一緒です。今回はファイルを操作しますので、以下が新しくでてきましたね

・File
 Fileは操作するファイルオブジェクトを作成します。今回のスケッチではmyFileをファイルオブジェクトとして設定しています。

 お次はsetupです。

・SD.begin()
 SDカードを初期化します。かっこの中はSDカードを選択するために使用するArduinoUNOの信号ピンです。使用するシールドによって異なることが有るので注意してください。また、初期化に成功するとtrue、失敗するとfalseを返します。

・SD.open()
 SDカード上のファイルを開きます。指定して名前のファイルが無い場合には、作成します。以下の様に記述します。
  SD.open(ファイル名, モード)
 ファイル名は8.3形式(ファイル名8文字以下、拡張子3文字)です。モードは、FILE_READ(読込モード、ファイルの先頭から処理する)、FILE_WRITE(読込、書込モード、ファイルの最後から処理する)の二つです。省略するとFILE_READとなります。
 処理に成功するとファイルオブジェクトを返します。失敗した場合はfalseを返します。

 loopでは、以下が新しく出てきましたね

FileObject.println()
 カッコの中のデータを最後に改行コードを付けて書き込みます。ファイルオブジェクト.printl()とすると、改行コードなしで書き込みます。また、数値は文字データに変換されて書き込みます。

FileObject.close()
 書き込んだ内容をSDカードに保存してファイルを閉じます。print(),println()で書き込んでもclose()を実施しないと保存されません。

お次は読み出し

 いかがでしたでしょうか?ファイルの書込みの基本は分かっていただけたと思います。次回は読み出しについて説明します。お楽しみに!!
hirocom777.hatenadiary.org


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