SD library (sd카드 사용)
아두이노 이더넷 쉴드나 adafruit vs1053 mp3 decoder처럼 sd 카드를 사용하는 경우 아두이노에서 sd라이브러리로 파일을 읽거나 쓰도록 한다. 하드웨어에 따라 다르지만 spi로 통신하는 대부분의 쉴드나 브레이크아웃 보드들은 다 쓸 수 있다. 아두이노에 기본 포함된 라이브러리이다. 참고: https://www.arduino.cc/en/Reference/SD
- SPI방식 통신. (주의점! 기본적으로 CS(ChipSelect)핀으로 아두이노에 할당된 핀은 10번(우노)이다. 다른 핀을 사용해도 되지만 이 경우에도 10번 핀은 output모드로 설정해두어야 라이브러리가 작동한다.)
- FAT16, FAT32 로 포맷된 sd카드 사용 가능.
- 8자+3자(확장자) 파일명 사용가능.
- 한글 안됨.
- 디렉토리 구분자로'/' 사용. (유닉스방식)
- working directory는 언제나 root (/)
하드웨어 연결
기본적인 SPI연결방식을 따르면 됨. 아두이노 우노(나노 포함)에서, 디폴트로 디지털 11, 12, 13 그리고 10을 사용함. 아두이노 spi 연결 참고: https://www.arduino.cc/en/Reference/SPI
제공되는 함수들
bool SD.begin()
: SD 카드 사용을 시작함.bool SD.exists(filename)
: sd카드에 해당 파일이나 디렉토리가 있는지 확인bool SD.mkdir(directory)
: 디렉토리 새로 만듬bool SD.rmdir(didrectory)
: 디렉토리 삭제 (빈 디렉토리이어야 함 )File SD.open(directory, mode)
: 파일 열기 . (FILE_READ와 FILE_WRITE 모드 있음.)-
bool SD.remove(filename)
: 파일 삭제 -
char* File.name()
: 파일 오브젝트의 sd카드에서의 파일명 int File.available()
: 파일의 끝까지 몇 바이트 남았는지 (Stream.available()참고)void File.close()
: 파일 사용을 마치고 파일 닫기char File.peek()
: 파일 스트림은 진행하지 않은 채 다음번 1바이트만 미리보기u_long File.position()
: 파일스트림의 현재 위치int print(), int println()
: 파일에 데이터 쓰기int write()
: 파일에 데이터 쓰기bool File.seek(unsigned long)
: 파일 스트림을 지정된 위치로 이동u_long File.size()
: 파일사이즈(byte)char File.read()
: 다음 1byte, 혹은 지정된바이트만큼 읽기File File.openNextFile()
: 다음 파일 오브젝트를 리턴bool File.isDirectory()
: 디렉토리인지 확인void File.rewindDirectory()
: openNextFile등을 사용시 가장 첫번째 파일로 되돌아가기
SDFat 라이브러리
sd library가 파일명을 8자까지만 지원. + 한글이 안되는듯. 그래서 보다 발전된 sdfat 라이브러리로 교체. 사용방법은 유사하다고함. 라이브러리 폴더안에 documentation이 아주 잘 되어있으므로 참고.
SD 라이브러리를 사용해 기존에 만들어진 소스 코드 SDFat 으로 교체하기
sd > sdfat으로 교체하기 참고: http://forum.arduino.cc/index.php?topic=287298.0
기본제공되는 sdfat 라이브러리를 수정하는것은 꺼려지는일이므로 아두이노의 편집창에 sdfat.h와 sdfat.cpp등 라이브러리 파일을 불러와 수정해 프로젝트와 함께 저장하고, include문에서 '<>' 대신에 ""를 사용해 부르면 안심.#include"SdFat.h"
이렇게..
참고: https://github.com/greiman/SdFat
-
include
를 다른 include문 보다 앞으로 보내기 SdFat sd
object 추가SD
->sd
로 모두 바꾸기File
->SdFile
로 모두 바꾸기openNextFile()
->openNext()
로 바꾸기- directory = sd.open("/") 를 sd.chdir("/")로 바꾸기