본문 바로가기
아두이노/아두이노 IDE

11. 아두이노 IDE SD카드제어 [베이직 트레이닝 보드]

by 땜블리 2023. 3. 9.
728x90
반응형
SMALL

안녕하세요 땜블리 입니다.

아두이노와 베이직 트레이닝 보드를 이용한 SD카드 제어 실습을 진행 하겠습니다.

베이직 트레이닝 보드는 아래에서 확인이 가능합니다.

https://ttcw.tistory.com/4

 

라즈베리파이 피코 베이직 트레이닝보드 구성

라즈베리파이 피코 보드의 펌웨어실습을 위한 베이직 트레이닝보드를 소개 합니다. 현재 네이버 스마트스토어에서 판매가 진행되고 있습니다. 라즈베리파이 피코 베이직 트레이닝 보드 라즈베

ttcw.tistory.com

1) SD카드 제어 구동 원리

(1) 동작설명

 

Arduino에서 SD-Card와 데이터를 주고받는 방식은 SPI를 사용하고, SD-Card 파일 시스템을 사용하기 위해 SD 라이브러리를 사용합니다.  

 

SD.h 라이브러리는 FAT16, FAT32 파일 시스템을 지원합니다.

 

파일 명명 규칙

파일 이름은 8.3 Format(Short Filename or SFN) 규칙을 준수해야 합니다. 8.3 Format은 오래된 윈도우 및 DOS 버전에서 사용하는 파일 이름 규칙으로, 파일명과 확장자의 길이가 각각 최대 8자 3자로 제한됩니다.

파일명 사용 예시

사용 가능 : HELLO.TXT

사용 불가 : HELLOWORLD.TXT

 

(2) 연결방법

 

연결표

 

사용 라이브러리

(3) 코드작성

#include<SPI.h>
#include<SD.h>
#define SS 4
#define FILENAME F("hello.txt")
#define STATEMENT F("File Write Test")
void setup() {
  Serial.begin(115200);
  
  Serial.print("Initializing SD card...");
  if (!SD.begin(SS)) {
    Serial.println(F("Card Initializing failed, or not present"));
    while (1);
  }
  Serial.println(F("Card initializing complete."));
  File dataFile = SD.open(FILENAME, FILE_WRITE);
  if (dataFile) {
    dataFile.println(STATEMENT);
    dataFile.close();
    Serial.println(F("File Writing is complete.."));
  }
  else {
    Serial.print(F("error opening"));
        Serial.println(FILENAME);
  }
  
}
void loop() {
}
반응형

(4) 동작결과

HELLO 파일이 생성되고 그파일 안에 텍스트 데이터가 저장되어있습니다.

 

 

 

2) 현재 온도/습도를 SD카드에 저장 제어

(1) 동작설명

DHT11센서에서 온도 습도 데이터를 취득한 뒤 SD카드에 쓰기를 합니다.

 

(2) 연결방법

연결표

 

(3) 코드작성

 

#include<SPI.h>        
#include<SD.h>         
#include<DHT.h>        
#define SS 7
File dataFile;
#define DHTPIN 4            
#define DHTTYPE DHT11       
DHT dht(DHTPIN, DHTTYPE);   
void setup() {
  Serial.begin(115200);
  while (!Serial);
  Serial.print("Initializing SD card...");
  if (!SD.begin(SS))
  {
    Serial.println("initialization failed!");
    while (1);
  }
  Serial.println("initialization done.");
  delay(2000);
  dht.begin();
}
uint16_t line =1;
void loop() {
  delay(1000);
  
  byte RH = dht.readHumidity();
  byte Temp = dht.readTemperature();
  dataFile = SD.open("DHT11Log.txt", FILE_WRITE);
  if (dataFile)
  {
    Serial.print(line);
    Serial.print(":    Temperature = ");
    Serial.print(Temp);
    Serial.print("°C,    Humidity = ");
    Serial.print(RH);
    Serial.println("%");
    dataFile.print(line++);
    dataFile.print(":    Temperature = ");
    dataFile.print(Temp);
    dataFile.print("°C,    Humidity = ");
    dataFile.print(RH);
    dataFile.println("%");
    dataFile.close();
  }
  else
    Serial.println("error opening DHT11Log.txt");
}

(4) 동작결과

 

728x90
반응형
LIST

댓글