SPIFFS,, eeprom과 비슷한 Esp32 내부의 저장공간이다.
Flat한 저장 구조를 갖고있고.. 뭐 그렇다고 한다.
최근에는 SPIFFS 라이브러리 지원을 중단하고 LittleFS 라이브러리를 지원한다고 하는데
나는 그냥 SPIFFS를 썼다 ㅎ
SPIFFS 라이브러리 설치방법과 스케치 업로드 방법은 구글링하면 아주 잘 나오기 때문에
다른 분들 블로그를 참조하시면 좋을 것 같고
나는 사용한 프로젝트를 가지고 설명을 하고자 한다.
선언부와 setup, readFile이다
프로젝트를 캡쳐해오기엔 너무 사이즈가 커서 이렇게 간단하게 써놓고 설명하고자 한다!
spiffs.h를 선언해 라이브러리를 불러오고,
데이터를 읽을 위치인 locate 변수,
append, clear, read 함수를 부를 비트를 선언했다. (그냥 임의로 쓴거니까 입맛에 맞게 바꿔서 쓰시면 됨)
setup에서는 별다른 할 게 없고
readfile을 보자
나는 예제와는 다르게 path와 locate를 인자로 받아 사용했다.
spiffs.begin으로 spiffs를 시작하고
파일을 read 모드로 연다.
기본적인 fopen 시스템을 똑같이 사용한다고 보면 된다. (중간 데이터를 같은 바이트로 수정도 가능)
ESP8266 / ESP32 - SPIFFS 파일시스템 라이브러리 예제 및 사용방법 :: postpop (tistory.com)
ESP8266 / ESP32 - SPIFFS 파일시스템 라이브러리 예제 및 사용방법
SPIFFS는 SPI 연결을 이용하는 FLASH 저장 장치의 파일 시스템을 정의하고 데이터가 저장된 파일의 생성 및 수정 그리고 읽기를 하는 프로그램이다. SPIFFS는 EEPROM과 다르게 인덱스를 기준으로 저장하
postpop.tistory.com
이분 블로그를 참고하면 좋을듯!
우선 내가 사용하고자 하는 파일의 형식이
i:001, y:22, m:11 ... 이런식으로 라인마다 42바이트로 선언되어있다.
또한 SPIFFS는 fseek C 함수 처럼 동작할 수 있기 때문에
인자로 받은 locate에 42를 곱해서 라인을 변경해서 원하는 라인을 읽도록 했다.
file.seek(-42,SeekEnd)를 통해서
마지막 글자에서 42바이트만큼 앞으로 오고, i값을 찾아서 parseInt를 하면
001만 파싱이 되기 때문에 마지막 인덱스값을 추출해낸다.
if(last )~ else~ 저거는 무시해도 된다.. 이거랑 관련이 없어서
마찬가지로 y의 값까지 파싱을하고
파일을 닫는다.
가 함수의 내용인데 다른 모든 사용자들은 file.available{을 사용하시던데 그거 안써도 잘 돌아가더라..!
그다음은 Name함수와 intNum 함수인데
인자를 받은값을 키 밸류 형태로 저장하도록 선언한 함수이다.
만약 Name("i")+intNum(5)이면 i:5, 이런식으로 값이 써진다 !
다음 ClearFile은 지정한 경로에 파일을 다 지우고i:000, y:00, m:00, ~~ 초기화된 데이터를 집어넣는 함수이다.value에 위의 함수들을통해 String형태의 temp에 넣은 값들을 넣고 w모드로 열어서(기존것들은 삭제하는 파일 시스템 명령)value를 file에 print해주면 기존 데이터는 다 삭제되고라인1줄에 0만 들어가있다 !그리고 파일을 닫아준다..
마지막으로 append 함수와 loop함수이다.
loop 함수는 이해를 돕기위해(원하는데서 저렇게 사용하시면 됩니다~) 저렇게 표현했고
append함수를 보자
위의 방식과 마찬가지로 value를 선언해서 value에 원하는 데이터변수들을 넣고 a+모드로 저장한다.
a+모드는 fopen과 마찬가지로 fseek으로 라인을 지정해서 읽고 거기에 쓰고싶어도
맨 마지막에 써진다. 근데 중간 data를 동일한 byte만큼 변경하는건 해보니까 또 되더라(수정이 됐다는 말)
음.. SPIFFS는 잘 쓰면 재밌는데 은근 노가다가 있다 ..
메모장에서 켜놓고 머릿속으로 파일시스템이라고 생각하고
byte수를 세어가면서 써야하기 때문에... 잘 쓰면 신기하고 재밌긴하더라 ..!
끝~
'🎟Esp32' 카테고리의 다른 글
연구실 프로젝트 - ESP32 BLE 데이터 전송 (0) | 2022.08.16 |
---|---|
연구실 프로젝트 - Esp32 u8g2 (0) | 2022.08.05 |
연구실 프로젝트 - Esp32 BLE Server (0) | 2022.08.05 |
연구실 프로젝트 - 개요(Esp32 , BLE, SPIFFS, u8g2 ...) (0) | 2022.08.05 |