02使用sd card儲存監測資料
TRANSCRIPT
電子工程系應 用 電 子 組電 腦 遊 戲 設 計 組
使用SD Card記錄監測資料 吳錫修
July 20, 2015
shap
e th
e fu
ture
電子工程系應 用 電 子 組電 腦 遊 戲 設 計 組
microSD是⼀種極細⼩的快閃記憶體卡
Arduino Yún之microSD插槽位於背面板
microSD
2
shap
e th
e fu
ture
電子工程系應 用 電 子 組電 腦 遊 戲 設 計 組
範例:File/Examples/Bridge/Datalogger
Datalogger範例展示將Arduino Yún類比輸入接腳(A0,A1,A2)監測之數據儲存到SD記憶卡
每15秒記錄⼀筆資料
資料格式:mm/dd/yy-hh:mm:ss = data1,data2,data3
Log檔名稱:arduino\datalog.txt
參考資料http://www.arduino.cc/en/Tutorial/YunDatalogger
Datalogger範例
3
shap
e th
e fu
ture
電子工程系應 用 電 子 組電 腦 遊 戲 設 計 組
在SD記憶卡建立⼀個arduino目錄
Arduino Yún與電腦連接到相同WiFi
確認已連接Arduino Yún
測試Datalogger範例 1/3
4
shap
e th
e fu
ture
電子工程系應 用 電 子 組電 腦 遊 戲 設 計 組
開啟Arduino Yún Console視窗Tools/Serial Monitor
測試Datalogger範例 2/3
5
shap
e th
e fu
ture
電子工程系應 用 電 子 組電 腦 遊 戲 設 計 組
檢查SD記憶卡datalog.txt內容
測試Datalogger範例 3/3
6
shap
e th
e fu
ture
電子工程系應 用 電 子 組電 腦 遊 戲 設 計 組
#include <FileIO.h>
void setup() {
Bridge.begin(); //起始Bridge
Console.begin(); //啟動Console
FileSystem.begin(); //起始FileSystem
while (!Console); //等待Console連線
Console.println("Filesystem datalogger\n");
}
解析Datalogger範例程式碼 1/4
7
shap
e th
e fu
ture
電子工程系應 用 電 子 組電 腦 遊 戲 設 計 組
void loop () {
String dataString; //log字串變數
dataString += getTimeStamp(); //加上時間戳章
dataString += " = ";
//讀取類比輸入A0,A1,A2值,並附加到log字串之後
for (int analogPin = 0; analogPin < 3; analogPin++) {
int sensor = analogRead(analogPin);
dataString += String(sensor); //串接類比輸入讀值
if (analogPin < 2) {
dataString += “,”; //資料間以逗號分隔
}
}
解析Datalogger範例程式碼 2/4
8
shap
e th
e fu
ture
電子工程系應 用 電 子 組電 腦 遊 戲 設 計 組
//開啟SD card資料記錄檔
File dataFile = FileSystem.open(“/mnt/sd/arduino/datalog.txt”, FILE_APPEND);
if (dataFile) { //檢查是否正常開啟資料記錄檔
dataFile.println(dataString);
dataFile.close(); //闗閉檔案
Console.println(dataString); //將log訊息同步輸出到Console
}
else { //顯示檔案開啟作業異常訊息
Console.println("error opening datalog.txt");
}
delay(15000); //間隔15秒再重複作業
}
解析Datalogger範例程式碼 3/4
9
shap
e th
e fu
ture
電子工程系應 用 電 子 組電 腦 遊 戲 設 計 組
String getTimeStamp() { //時間戳章字串函式
String result;
Process time; //建立Linux processes
time.begin(“date”); //指定所要執行的作業命令
time.addParameter(“+%D-%T”); //戳章格式mm/dd/yy-hh:mm:ss
time.run(); //執行date命令列作業
while (time.available() > 0) { //檢查執行結果
char c = time.read(); //讀取時間戳章
if (c != '\n')
result += c;
}
return result;
}
解析Datalogger範例程式碼 4/4
10