fieldArduinoなどArduinoでmicroSDカードを使うArduinoをデータロガーとして使う為にマイクロSD(TF)カードモジュールを入手しました。Hardware)で$0.41、送料無料でしたのでつい買ってしまいました。‘20.4/7に注文、4/10に発送され4/27に到着しました。購入したのはSDカードスロットと電圧をArduinoの5VからSDカードの3.3Vに変換してくれる(はずの)回路が搭載されているモジュールです。作りはお値段相当ということで、基板の側面から繊維が飛び出しています。他のショップにも売っていて、シルクが少し違うけど乗っているチップは同じに見える。UNOとの接続は以下のようになります。GNDCS(チップセレクト)CSはArduinoのリファレンスではピン10と記載されていましたが、その通り接続しても動きませんでした。”又は”SD.begin(4)”とあったのでピン4につなぐと正常に動きました。動作せず、ピン2~10で正常に動作しました。ピン0,1はシリアル通信で使われているので、シリアルモニタを使っていると使えません。SDカードはFAT16かFAT32でフォーマットされている必要があります。SDXCは使えないとのことです。カードをFAT32でそれぞれPCでフォーマットしました。持っていなかったので試していません。『CardInfo』を開きます。ケーブルで接続して、シリアルモニタを立ち上げておきます。スケッチを書きこみ正常にSDカードを読み込めると、カードの情報がシリアルモニタに表示されます。カード、どちらとも正常に認識されました。フォーマットしてみるとエラーとなりました。データの書き込み及び読み出しデータの書き込みと読み出し方法はサンプルスケッチの”ReadWrite”を参考にします。『ReadWrite』にあります。myFile;まず、SIP通信を行う<SPI.h>とSDカードの読み書きを行う<SD.h>の二つのライブラリを読み込みます。続いて”File”クラスのインスタンスを”myFile”という名前で宣言します。書き込みに関するコードのみ抜き出しました。理解しやすいように必要な部分のみ抜き出しましたが、エラートラップ等がないので、このまま使うと不具合が生じたときに原因究明が困難になります。実際にはサンプルスケッチを参考にエラートラップを入れるべきです。2行目の”SD.begin(4)”でライブラリを初期化します。カッコ内の数値がCS(チップセレクト)のピン番号になります。3行目では、正常に初期化できなかったらArduinoの電源が切れるかリセットされるまで無限ループし、先のコードを実行しません。ピンとモジュールとの接続に問題がある場合に初期化失敗します。6行目で”test.txt”というファイルを書き込み読み出しモードで開きます(二つ目のパラメーターで”FILE_WRITE”を記述すると書き込み読み出しモードになる)。ファイルが無ければ新しく作られます。開いた状態で”myFile”オブジェクトに格納します。ファイルを開くのに失敗すると”myFile”には”false”が格納されます。ファイル名半角8文字、拡張子半角3文字の8.3形式のファイル名で、アルファベットは大文字になります。3.”というテキストを書き込み改行します。ファイル内に既に書き込まれていた内容があった場合、最後に追加して書き込まれます。10行目でファイルを閉じます。{}このコードでは書き込みは1回のみなので”loop”関数には何も書きません。読み出しに関するコードのみ抜き出しました。読み込んだファイルの内容をシリアルモニタに表示したいので、2~4行目でシリアル通信の準備をします。6行目の”SD.begin(4)”でライブラリを初期化します。カッコ内の数値がCS(チップセレクト)のピン番号になります。7行目は、正常に初期化できなかったらArduinoの電源が切れるかリセットされるまで無限ループし、先のコードを実行しません9行目で”test.txt”というファイルを書き込みモードで開きます(二つ目のパラメーターを省略するとデフォルトで読み出しモードで開く。明示的に”FILE_READ”と記述しても良い。開いた状態で”myFile”オブジェクトに格納します。ファイルが存在しなければ開けません。ファイルを開くのに失敗すると”myFile”には”false”が格納されます。10行目で”myFile”が”false”でないか(ファイルがちゃんと開けたか)確認します。ファイルが開けていたら11行目フィアルに内容があるか確認し、内容があれば12行目でファイルの内容を1バイト読み出し、シリアルモニタに表示します。ファイルの内容の読み出しは、ファイルの最初から1バイトずつ読み出し、ファイルの最後になると”myFile.available()”が”false”を返してループを抜け、14行目でファイルを閉じて終了します。”loop”関数には何も書きません。カードをスロットに刺して、書き込みを実行しました。確認すると新しいファイルができており正常に書き込めたことが確認できました。読み出しを実行しました。シリアルモニタにファイルの内容が表示され、正常に読み出せたことが確認できました。読み出しは、1バイトずつ行われます。2バイト文字(全角文字)はどうなの見てみました。全角文字が入ったテキストファイルを作成し、読みだしたところシリアルモニタでは正常に表示されました。次に1バイト読み込む毎に改行を入れるようにスケッチを書き替えると、2バイト文字は正常には読み込めませんでした。シリアルモニタ側でつないで全角文字に変換しているようです。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。