マイクロSDシールド(Arduino)買って見ました!

〔マイコンのトップに戻る〕


ArduinoIDE(0022)にSDライブラリが付いているでは有りませんか!!
これはぁ、SDの読み書きをやって見なくてはぁ、ってんでぇ、部品を色々熟慮したのですがぁ、
SDソケットのみでは電圧レベル変換をしないといけないしぃ、変換用ICが小さくてたぶん半だ付け
無理っぽいしぃ、でぇ、めんどいのでマイクロSDシールドを買ってしまいました。
スイッチサイエンスのこちらの 「マイクロSDシールド」 とこちらの 「ピンソケット」 です。

2017/01/10現在、上記の「マイクロSDシールド」は販売終了となっています、
  代替えの「microSD Shield」を使いましょう。 *1)

以下に使用感を記載しときます。

SD1
 SDシールドにピンソケットを半だ付けして、
 Arduino Duemilanove 328に乗せて見ました。

 マイクロSDの向こうに有るのが、
 電圧変換(3.3<->5V)ICです、SDは3.3V動作で
 arduinoピンは5V出力なので変換必要です。
 なので、このSDはこのまますぐ使用できます。
 SDの動作電源はarduinoの3.3V電源を使用。


尚、PIC16F1938を使ってMicroSDにアクセス(読み書き)する記事はこちらを参照下さい。

では、さっそくファイル内容を読み込んでみます。

PCで作成したテキストファイルを読み込んで、シリアル通信でCOM画面出力を行いました。

な、なんだぁぁ、こりゃぁ、
スケッチをコンパイルしたらプログラムサイズが11kバイト、SDライブラリでかすぎです。
こりゃぁたまげた!、もっとぉコンパクトにならないのかな?。

が、簡単に動作しましたね、う〜ん、買ってよかった。

使ってみて、気が付いたポイントを少々

・このシールドはピン番号8、10、11,12、13を使用するので他には使用できない。
・ファイル作成した場合はファイル名は大文字に変換されている。
 (ファイルのオープン時は小文字でも大文字でも可能です)
・ファイル名は8文字+拡張子3文字(xxxxxxxx.xxx)です。
・ファイル作成時の日付は 2000/01/01 1:00:00 がスタートで属性は何も無しとなっています。
 (arduinoのプログラムが実行されていれば日付は進んでいきます)
 (また、古いパソコンなら日付の出力が異なるかも?)
・書き込みは、ファイルの最後にデータが追加されます、
 上書き書き込みしたい場合は、seek()関数で戻せば上書き書き込みされます。
・available()関数でリファレンスでは、戻り値が"読み取り可能なバイト数 (int)"となっているが
 ちょっとぉ、ウソです、読み取り可能なバイト数が無いなら0と判断してそれ以外はデータ有りと判断します。
 読み取り可能なバイト数を得たいなら、
 unsigned long dt = SD.size()-SD.position() ;とします。
 available()関数の戻り値がintとなっているので、intをこえたらたぶんマイナス値が返ると思います。

《スケッチのサンプル集》

ファイルにアクセスするには、
ファイルを開いて(オープン)から読書きを行った後、ファイルを閉じ(クローズ)ます。

テキストデータをファイルに書込むサンプルです。

このスケッチをコンパイル&アップーロードすると、スケッチが自動実行され、
COMシリアル通信画面を開いた時にRESETがかかり再度実行されるので、
おそらく"1234567890","abcdefg"はファイルに2回書き込まれます。
---------------------------------------------------------------------
#include <SD.h>

void setup() 
{
     File fds  ;

     // シリアル通信の初期化
     Serial.begin(9600) ;
     // SDカードの初期化処理(フォーマットではないよ)
     pinMode(10, OUTPUT) ;                // この行がないとライブラリが動作しないらしい
     if (!SD.begin(8)) {
         // カードの初期化に失敗したか、またはSDが入っていない
         Serial.println("Card failed, or not present") ;
         return ;
     }
     Serial.println("card initialized.") ;// 初期化完了

     // ファイルの書込みオープン
     // test.txtファイルが無い場合は作成されます、あればファイルの最後に追加されます。
     fds = SD.open("test.txt",FILE_WRITE) ;
     if (fds) {
          // 文字列を書込む\r\nは改行コード文字
          fds.write("1234567890\r\n") ;
          Serial.write("1234567890\r\n") ;
          fds.write("abcdefg\r\n") ;
          Serial.write("abcdefg\r\n") ;
          // ファイルのクローズ
          fds.close() ;
     } else {
          // ファイルのオープンエラー
          Serial.println("error opening") ;
     }

}
void loop() {
}
---------------------------------------------------------------------
テキストデータをファイルから読込むサンプルです。

このスケッチをコンパイル&アップーロードしたらCOMシリアル通信画面を開きましょう。
読み込んだデータが表示されると思います。
上の書込みスケッチが書き込まれていると、アップーロード時にRESETがかかるのでもう一度実行されるので、読み出した時にデータは3回分読み込むと思います。
---------------------------------------------------------------------
#include <SD.h>

void setup() 
{
     File fds  ;

     // シリアル通信の初期化
     Serial.begin(9600) ;
     // SDカードの初期化処理(フォーマットではないよ)
     pinMode(10, OUTPUT) ;                // この行がないとライブラリが動作しないらしい
     if (!SD.begin(8)) {
         // カードの初期化に失敗したか、またはSDが入っていない
         Serial.println("Card failed, or not present") ;
         return ;
     }
     Serial.println("card initialized.") ;// 初期化完了

     // ファイルの読込みオープン
     fds = SD.open("test.txt",FILE_READ) ;
     if (fds) {
          // ファイルの内容を全て読み出しCOM画面に表示する
          while (fds.available()) {
               // 1文字ずつ読み出しています
    	          Serial.write(fds.read());
          }
          // ファイルのクローズ
          fds.close() ;
     } else {
          // ファイルのオープンエラー
          // ファイルが存在しない場合もエラーです。
          Serial.println("error opening") ;
     }

}
void loop() {
}
---------------------------------------------------------------------
※ここのSDシールドを使いGPSのデータロガーを行う記事はこちらを参考にして下さい。



見直し(*1) 2017/01/10


【きむ茶工房ガレージハウス】
Copyright (C) 2006-2017 Shigehiro Kimura All Rights Reserved.