|

【Wio Terminal】透過microSD卡或PuTTy 儲存感測器數值

   

作者:CAVEDU 教育團隊

前言

Wio Terminal 開發板支援自家的 Grove 接頭感測器,要讀取各種數值是很方便的,還能把結果直接呈現在本體上的彩色 LCD 小螢幕上,但別忘了 Wio 還有一個 SD 卡插槽,方便您定期寫入資料後進行後續應用 (data logger)。本文章將會介紹兩種方法供讀者選擇。

撰寫/攝影 邱柏憲
時間  30分鐘 材料表

 

難度  1(滿分5)

本文

本文將分別介紹如何使用 micro SD 記憶卡來儲存資料,以及透過 pyTTY 小軟體直接把資料丟回電腦,請根據您的需求來選擇喜歡的做法喔!如果您才剛取得 Wio Terminal 的話,請參考相關文章以及阿吉老師錄製的 tinyML 小教室喔!

方法一:利用microSD儲存數值

Wio Terminal 的 micro SD 卡插槽位於側面 (開關下方)。安裝microSD卡時須注意方向,切記不可硬塞否則可能造成損壞。Seeed 原廠提供了 microSD卡的函式庫,更多資訊請點我

Wio Terminal 發展板

本程式的流程為按下按鈕A (Wio Terminal 上緣的中間按鈕)後,便會讀取光感測器的數值並寫入 SD 卡中的 .csv 檔。.csv是相當常見的結構化資料儲存方式,後續用 python pandas 函式庫來處理非常方便。

請將以下程式碼透過 Arduino IDE 燒錄到Wio Terminal。註解為程式碼的簡單介紹。注意:此程式需要於Wio Terminal側邊安裝SD卡 (當然啦!) 才可正常執行


#include
#include
#include "SD/Seeed_SD.h"

File myFile;
char str[4];

//設定檔案名稱
const char* data_file = "test.csv";

void setup() {
  pinMode(WIO_KEY_A, INPUT_PULLUP);
  pinMode(WIO_LIGHT, INPUT);
  Serial.begin(9600);
  Serial.print("Initializing SD card...");

  //設定SD卡的連接設定
  if (!SD.begin(SDCARD_SS_PIN, SDCARD_SPI)) {
    Serial.println("initialization failed!");
  }
}

void loop() {
  int light = analogRead(WIO_LIGHT);
  //按下按鈕A後才會儲存
  if (digitalRead(WIO_KEY_A) == LOW) save_data_to_SD_Card(String(light));
}

void save_data_to_SD_Card(String light) {
  //開啟SD卡中的test.csv,如未有此檔案則會新增,如有則會由資料末端接續
  myFile = SD.open(data_file, FILE_APPEND);
  if (myFile)
  {
    //將紀錄規格設計成.csv的格式,前面的light為光感應器的數值,後面的1是為了示範格式,兩個數值間則用逗號隔開。這邊須注意輸入的類別需要為String(字串)
    String data_record = light + "," + "1";
    myFile.println(data_record);
   //關閉檔案
   myFile.close();
    Serial.println(data_record);
    Serial.println("Data saved successfully!\n");
  }
  delay(1000);
}

執行時,可在 Serial mointor 看到相關訊息:

接著將 SD 卡退出並用電腦讀取。此時會發現 SD 卡找到一個 

test.csv

 檔,使用 Excel 或合適的文字編輯器開啟後就會看到剛剛所紀錄的資料了!

方法二:藉由PuTTY與Arduino IDE將資料直接儲存於電腦中

Wio Terminal 可藉由PuTTY 與電腦進行溝通,我們便可利用此功能將資料儲存於電腦中。請由本連結來下載對應版本的PuTTY

請將以下程式碼透過 Arduino IDE 燒錄到Wio Terminal。註解為程式碼的簡單介紹:


#include

void setup() {
  pinMode(WIO_KEY_A, INPUT_PULLUP);
  pinMode(WIO_LIGHT, INPUT);
  Serial.begin(9600);

}


void loop() {
  //讀取光感應器的數值
  int light = analogRead(WIO_LIGHT);
  //按下按鈕A執行
  if (digitalRead(WIO_KEY_A) == LOW) putty_read(String(light));
}

   
void putty_read(String light)
{
  //前面的light為光感應器的數值,後面的1是為了示範格式,兩個數值間則用逗號隔開。這邊  
  須注意輸入的類別需要為String(字串)
  String data_record = light + "," + "1";
  Serial.println(data_record);
  delay(1000);
}

PuTTY 軟體端也要進行一些設定。開啟PuTTY後於左側點擊 Session->Logging (下圖紅框),將Session logging 模式選為 Printable output,之後點擊Browse選擇存檔的位置與檔案名稱,並將副檔名設定為.csv (下圖藍框)。完成後回到Session頁面。(此步驟需注意,操作時需關閉Arduino IDE中的Serial Monitor視窗頁面,否則 com port 會被佔住而無法操作)

如下圖,將連線方式改為 Serial (下圖紅框),接著輸入Wio Terminal的COM Port 與鮑率9600 (下圖藍框)。設定完成後按下最下方的 Save 按鈕儲存,之後再次開啟便可以不用再次設定。確認前面步驟已完成後,按下底下的Open按鈕,即可開始蒐集資料。

按下 Wio Terminal 的按鈕A後,就會把讀取的光感測器數值顯示於PuTTY中,如下圖:

也可以在您所指定的路徑找到 .csv檔,當然一樣開起來看看囉!

本文介紹了兩種資料儲存方式,請根據您的實際情境選一種吧。取得資料後要進行分析處理就容易許多了。希望這次的分享對大家在做作品時有所幫助,如果有其他的資料儲存方式也歡迎分享!

(本文為vMaker【CAVEDU講堂】文章原文連結

CAVEDU 教育團隊
CAVEDU 教育團隊

Author: CAVEDU 教育團隊

CAVEDU 教育團隊是由一群對教育充滿熱情的大孩子所組成的機器人科學教育團隊。致力推動國內機器人教育。

Share This Post On

Submit a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *