: ble_hid_device_demo 프로젝트는 기본적으로 파티션관련 "Single facttory app, no OTA" 로
설정이 되어 있는데 커스텀 파티션 테이블을 사용하게 변경해 보겠습니다.
▶ Visual Studio Code를이용해 프로젝트 열기
==> 생략
▶ ESP-IDF SDK Configuration Editor (menuconfig) 선택
: Partition Table 항목 찾기 및 custom partition 사용하게 변경하기
→ 변경전 Partition Table 내용
→ Partion Table 항목을 "Custom partition table CSV" 로 변경후
Custom partition CSV fie 항목에 "partition_hid.csv" 추가하기 < 파일이름은 적합한 이름으로 넣어주세요.
▶ spiffs 프로젝트안의 partitions_example.csv 파일을 복사해
프로젝트 루트에 partition_hid.csv 로 변경 저장하기
→ partitions_example.csv 내용은 다음과 같습니다. (일부 수정했습니다.)
▶ Project 빌드하기
* Executing task: ninja
[1/4] cd /home/xxx/Project/esp32/uc500_remo...ect/esp32/uc500_remote/build/uc500_remote.bin
uc500_remote.bin binary size 0xebd80 bytes.
Smallest app partition is 0x100000 bytes. 0x14280 bytes (8%) free.
[2/4] Performing build step for 'bootloader'
[1/1] cd /home/xxx/Project/esp32/uc500_remote/build/bootloader/esp-idf/esptool_py
&& /home/xxx/.espressif/python_env/idf5.1_py3.10_env/bin/python
/home/xxx/esp/esp-idf/components/partition_table/check_sizes.py
--offset 0x8000 bootloader 0x0
/home/xxx/Project/esp32/uc500_remote/build/bootloader/bootloader.bin
Bootloader binary size 0x5340 bytes. 0x2cc0 bytes (35%) free.
▶ idf.py partition-table 을 이용해 변경 상태 확인하기
: 마지막 storage 항목이 추가가 되어 있으면 정상입니다.
$ idf.py partition-table
Executing action: partition-table
Running ninja in directory /home/xxx/Project/esp32/uc500_remote/build
Executing "ninja partition-table"...
[1/1] cd /home/xxx/Project/esp32/uc500_remote/build/esp-idf/partition_table && /us...ho
"*******************************************************************************
"Partition table binary generated. Contents:
*******************************************************************************
# ESP-IDF Partition Table
# Name, Type, SubType, Offset, Size, Flags
nvs,data,nvs,0x9000,24K,
phy_init,data,phy,0xf000,4K,
factory,app,factory,0x10000,1536K,
storage,data,spiffs,0x190000,448K,
*******************************************************************************
Partition Table build complete. To flash, run this command:
/home/xxx/.espressif/python_env/idf5.1_py3.10_env/bin/python
../../../esp/esp-idf/components/esptool_py/esptool/esptool.py
-p /dev/ttyACM0
-b 460800
--before default_reset
--after hard_reset
--chip esp32c6
write_flash 0x8000 build/partition_table/partition-table.bin
or run 'idf.py -p /dev/ttyACM0 partition-table-flash'
▶ spiffs 파티션에 데이타 쓰기
→ Init SPIFFS
: esp_vfs_spiffs_register() 함수 사용하기
esp_vfs_spiffs_conf_t conf = {
.base_path = "/spiffs",
.partition_label = NULL,
.max_files = 9,
.format_if_mount_failed = true
};
ret = esp_vfs_spiffs_register(&conf);
→Check SPIFFS
: esp_spiffs_check() 함수 사용
→Open file
: fopen() 함수 사용하기
FILE* f = fopen("/spiffs/name.dat", "r"); // read
if (f == NULL) {
ESP_LOGW(HID_DEMO_TAG, "Failed to load name.dat.");
f = fopen("/spiffs/name.dat", "w"); // write
if (f == NULL) {
ESP_LOGE(HID_DEMO_TAG, "Failed to create 'name.dat' for writing.");
return ;
}else{
fclose(f);
}
}else{
fclose(f);
}
→Write file
: fopen()에서 오픈한 파일에 데이타 저장하기
f = fopen("/spiffs/name.dat", "w"); // write
fprintf(f, "Hello World!\n");
fclose(f);
ESP_LOGI(TAG, "File written");
→ Read file
: fgets() 사용하기
f = fopen("/spiffs/name.dat", "r"); // for reading
if (f == NULL) {
ESP_LOGE(TAG, "Failed to open file for reading");
return;
}
char line[64];
fgets(line, sizeof(line), f); <----
fclose(f);
→Close file
: fclose() 함수 사용하기
→ unmount 파티션
: spiffs 파티션을 미사용시 언마운트 해 줍니다.
esp_vfs_spiffs_unregister(conf.partition_label);
'ESP32' 카테고리의 다른 글
[VSCode][ESP-IDF] menuconfig 에러 (python path 설정) (0) | 2023.12.27 |
---|---|
[ESP-IDF][VSCode][1] esp_timer 프로젝트 분석 (0) | 2023.12.14 |
[esp-idf] idf.py 사용법 (build,flash,monitor,create-project,....., ) (0) | 2023.11.30 |
[ESP-IDF] [1] 프로그래밍 유의사항 esp_ble_get_bond_device_list() (0) | 2023.11.20 |
[VSCode][Ubuntu][ESP32] ERR : ibusb_open() failed with LIBUSB_ERROR_ACCESS (0) | 2023.11.14 |