09.Wio TerminalのSDを読み書き
09.Wio TerminalのSDを読み書き
Wio TerminalにあるmicroSDの読み書きをします。
スケッチは、
Seeed Wiki > Platform > Wio Terminal > File System > Read and Write の
https://wiki.seeedstudio.com/Wio-Terminal-FS-ReadWrite/
に出ているReading/Writing from the SD CardのComplete Codeを少し変更しました。
変更点
・シリアルモニタ表示を変更し、日本語の画面表示にしました。
・デモスケッチの後に、PCで作成したファイルを読込みます。
ここの場所のごみ収集は曜日ごとに収集品が決まっています。5wayボタンを押込むごとに月曜日からスタートし、各曜日の収集品を表示します。
月曜日→火→水→木→金→土→日→月→・・・
これには、SDのGomiホルダの中に、"GomiMon.txt","GomiTue.txt"・・・のファイルを入れておきます。
・読込むファイルを切替える時に、ボタンクリック音を付けました。
Seeed_Arduino_FSをインストール
SDカードの基本機能と、SPI通信で読書きを可能にするライブラリです。https://github.com/Seeed-Studio/Seeed_Arduino_FS/tree/master
を開き、
コード > ZIPをダウンロード > "Seeed_Arduino_FS-master.zip"をディスクトップにコピー
Arduino-IDE > スケッチ > ライブラリをインクルード > .ZIP形式のライブラリをインストール... > 先程のzipファイルを指定 > 開く
Seeed_Arduino_SFUDのインストール
フラッシュデバイスの読み書きを可能にするライブラリです。このスケッチでは使用しません。https://github.com/Seeed-Studio/Seeed_Arduino_SFUD
も上と同様にインストールします。
使用できるmicroSD
Wio Terminalで使用できるサイズとフォーマット形式です。・最大16GB
フォーマット
・FAT12 (FAT)
最大ファイル 32MB
フロッピーディスクに使用
・FAT16
最大ファイル 2GB
MS-DOS~WindowXP時代
2GBまでのSD
・FAT32
最大ファイルサイズ4GB
汎用的 互換性がいい
4-32GBのSDHC
・exFAT
最大ファイルサイズ約100万TB
32GB-2TBのSDXC,2-128TBのSDUC
ここでは手持ちにあった2GBを使用しました。ファイルシステムはFATでしたので、
・ファイルシステム = FAT32
・アロケーションユニットサイズ(保存場所の最小単位) = 4kB
にしてフォーマットしました。Wio Terminalには、microSDの裏面を上にして挿入します。
openファイル関数
open("ファイル名",モード)モードは、
・書込む FILE_WRITE
・読込む FILE_READ
・追加 FILE_APPEND
スケッチ
・スケッチ内でのフォルダの区切りは円記号の"\"ではなく、除算の"/"です。・SD.beginでは、通信の初期化をしますがファイルは消えません。
・このスケッチの他にSDのGomiホルダの中に、GomiMon.txt, GomiTue.txt, GomiWed.txt, GomiThu.txt, GomiSat.txt の画面表示用のtxtファイルが必要です。
// SDの初期設定・書き込み・読み込み SD.ino
// 表示ファイルの準備必要
#include <SPI.h> // SDのためにSPI通信を使用
#include <Seeed_FS.h> // SDを使用
#include <SD/Seeed_SD.h> // SD追加分
#define LGFX_AUTODETECT // LovyanGFX対応機種を自動認識
#include <LovyanGFX.hpp> // LovyanGFXを使用
static LGFX lcd; // LGFXのインスタンスを作成
File myFile; // ファイルクラスを初期化し、myFileという名前を付ける
int i = 0; // 表示画面番号(0-6)
String fname[] = {"Mon", "Tue", "Wed", "Thu", "Mon", "Sat", "Wed"};//ファイル名一部
void setGamen() { // 画面初期設定関数
lcd.init(); // LCD初期化
lcd.setBrightness(64); // バックライト輝度(暗0-255明)
lcd.setRotation(1); // LCD表示向き
lcd.setFont(&lgfxJapanGothic_20); // ゴシック固定長 縦ドット(16,20,24,28,32)
//lcd.setTextScroll(true); // 画面下端に到達後スクロール
//lcd.setScrollRect(0, 0, lcd.width(), lcd.height()); //スクロール範囲(X,Y,W,H)
lcd.setTextSize(1.0); // 文字サイズ(幅倍数)
lcd.setTextColor(TFT_GREEN, TFT_BLACK); // (文字色,背景色)
lcd.setCursor(0, 0); // 画面左上から開始
}
void setButton() { // ボタン設定関数
pinMode(WIO_KEY_A, INPUT_PULLUP); // 内側ボタンをPull up Digital入力に
pinMode(WIO_KEY_B, INPUT_PULLUP); // 中間ボタンをPull up Digital入力に
pinMode(WIO_KEY_C, INPUT_PULLUP); // 外側ボタンをPull up Digital入力に
pinMode(WIO_5S_UP, INPUT_PULLUP); // 5wey上ボタンをPull up Digital入力に
pinMode(WIO_5S_DOWN, INPUT_PULLUP); // 5wey下ボタンをPull up Digital入力に
pinMode(WIO_5S_LEFT, INPUT_PULLUP); // 5wey左ボタンをPull up Digital入力に
pinMode(WIO_5S_RIGHT, INPUT_PULLUP); // 5wey右ボタンをPull up Digital入力に
pinMode(WIO_5S_PRESS, INPUT_PULLUP); // 5wey押ボタンをPull up Digital入力に
}
void setBuzzer() { // ブザー設定関数
pinMode(WIO_BUZZER, OUTPUT); // ブザーpinを出力に
}
void click1() { // クリック音関数
analogWrite(WIO_BUZZER, 200); // 矩形波出力(pin番号,DT(0-255))
delay(100); // 0.1秒待つ
analogWrite(WIO_BUZZER, 0); // 出力0V
}
void setup() {
setGamen(); // 表示画面の初期設定関数へ
setButton(); // ボタン設定関数へ
setBuzzer(); // ブサ―設定関数へ
lcd.print("SD通信初期化"); // 表示 ファイルは消えない
if (!SD.begin(SDCARD_SS_PIN, SDCARD_SPI)) { // 通信初期化できなかったら
lcd.println(" 失敗"); // 表示
while (1); // 永久ループ
}
lcd.println(" 終了"); // 表示
lcd.print("test.txtへ書込み"); // 表示
myFile = SD.open("test.txt", FILE_WRITE); // SDのファイルを開く("ファイル名",書込み)
if (myFile) { // ファイルが開けたら
myFile.println("テストテストtest〇▲▼ 1, 2, 3."); // SDに書込む(半角カナもOK)
myFile.close(); // ファイルを閉じる。
lcd.println(" 終了"); // 表示
} else { // ファイルが開けなかったら
lcd.println(" エラー open時"); // 表示
} // 一度に開くことができるファイルは1つまで
lcd.print("test.txt読取り:"); // 表示
myFile = SD.open("test.txt", FILE_READ); // SDのファイルを開く("ファイル名",読込み)
if (myFile) { // ファイルが開けたら
while (myFile.available()) { // ファイルから読取り可能なバイト数
lcd.write(myFile.read()); // ファイルから1バイト読取り、シリアルポートに1バイト出力
}
myFile.close(); // ファイルを閉じる
lcd.println("\n5wayボタンを押してください"); // 表示
} else { // ファイルが開けなかったら
lcd.println(" エラー open時"); // 表示
}
}
void loop() {
if (digitalRead(WIO_5S_PRESS) == LOW) { // 5weyボタンを押し込むと
click1(); // クリック音関数へ
lcd.fillScreen(TFT_BLACK); // 画面クリア
lcd.setCursor(0, 0); // 画面左上から開始
myFile = SD.open("Gomi/Gomi" + fname[i] + ".txt", FILE_READ); // SDのファイルを開く("ファイル名",読込み)
while (myFile.available()) { // ファイルから読取り可能なバイト数
lcd.write(myFile.read()); // ファイルから1バイト読取り、シリアルポートに1バイト出力
}
myFile.close(); // ファイルを閉じる
i++; if (i > 6) i = 0; // iに1追加し、i=0-6にする
}
delay(500); // 0.5秒待つ
}
* フラッシュメモリの57%を使用。