ESP32使用SPIFFS文件系统笔记
基于ESP-IDF4.1
1 #include <stdio.h>
2 #include <string.h>
3 #include <sys/unistd.h>
4 #include <sys/stat.h>
5 #include "esp_err.h"
6 #include "esp_log.h"
7 #include "esp_spiffs.h"
8
9 static const char *TAG = "example";
10
11 void app_main(void)
12 {
13 ESP_LOGI(TAG, "Initializing SPIFFS");
14
15 esp_vfs_spiffs_conf_t conf = {
16 .base_path = "/spiffs",
17 .partition_label = NULL,
18 .max_files = 5,
19 .format_if_mount_failed = true
20 };
21
22 //使用上面定义的设置来初始化和挂在spiffs文件系统
23 esp_err_t ret = esp_vfs_spiffs_register(&conf);
24
25 if (ret != ESP_OK) {
26 if (ret == ESP_FAIL) {
27 ESP_LOGE(TAG, "Failed to mount or format filesystem");
28 } else if (ret == ESP_ERR_NOT_FOUND) {
29 ESP_LOGE(TAG, "Failed to find SPIFFS partition");
30 } else {
31 ESP_LOGE(TAG, "Failed to initialize SPIFFS (%s)", esp_err_to_name(ret));
32 }
33 return;
34 }
35
36 size_t total = 0, used = 0;
37 ret = esp_spiffs_info(conf.partition_label, &total, &used);
38 if (ret != ESP_OK) {
39 ESP_LOGE(TAG, "Failed to get SPIFFS partition information (%s)", esp_err_to_name(ret));
40 } else {
41 ESP_LOGI(TAG, "Partition size: total: %d, used: %d", total, used);
42 }
43
44 //使用POSIX和C标准库函数操作文件
45 //创建一个文件
46 ESP_LOGI(TAG, "Opening file");
47 FILE* f = fopen("/spiffs/hello.txt", "w"); // 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
48 if (f == NULL) {
49 ESP_LOGE(TAG, "Failed to open file for writing");
50 return;
51 }
52 fprintf(f, "Hello World!\n");
53 fclose(f);
54 ESP_LOGI(TAG, "File written");
55
56 //重命名前检查目标文件是否存在
57 struct stat st;
58 if (stat("/spiffs/foo.txt", &st) == 0) {
59 // 如果存在则删除
60 unlink("/spiffs/foo.txt");
61 }
62
63 // 重命名原始文件
64 ESP_LOGI(TAG, "Renaming file");
65 if (rename("/spiffs/hello.txt", "/spiffs/foo.txt") != 0) {
66 ESP_LOGE(TAG, "Rename failed");
67 return;
68 }
69
70 // 打开重命名的文件
71 ESP_LOGI(TAG, "Reading file");
72 f = fopen("/spiffs/foo.txt", "r"); // 以只读方式打开文件
73 if (f == NULL) {
74 ESP_LOGE(TAG, "Failed to open file for reading");
75 return;
76 }
77 char line[64];
78 //从指定的流 f 读取一行,并把它存储在 line 所指向的字符串内
79 fgets(line, sizeof(line), f);
80 fclose(f);
81 // 查找换行符
82 char* pos = strchr(line, '\n');
83 if (pos) {
84 *pos = '\0'; //放置一个空字符串
85 }
86 ESP_LOGI(TAG, "Read from file: '%s'", line);
87
88 // 卸载分区并禁用SPIFFS
89 esp_vfs_spiffs_unregister(conf.partition_label);
90 ESP_LOGI(TAG, "SPIFFS unmounted");
91 }
原文:https://gitee.com/EspressifSystems/esp-idf
ESP32使用SPIFFS文件系统笔记的更多相关文章
- ESP8266开发之旅 网络篇⑬ SPIFFS——ESP8266 SPIFFS文件系统
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- ESP32的ULP 协处理器笔记
1.ULP 协处理器是一个功耗极低的协处理器设备,无论主 CPU 是处于正常运行模式还是 Deep-sleep 模式,ULP 协处理器都可以独立运行.超低功耗协处理器的补充使得 ESP32 能够胜任一 ...
- Linux制作根文件系统笔记
测试平台 宿主机平台:Ubuntu 12.04.4 LTS 目标机:Easy-ARM IMX283 目标机内核:Linux 2.6.35.3 交叉编译器:arm-linux-gcc 4.4.4 Bus ...
- ESP32智能配网笔记
基于ESP-IDF4.1 #include <string.h> #include <stdlib.h> #include "freertos/FreeRTOS.h& ...
- 解析-ESP01模块开发Arduino物联网wifi开关模块
本文将解析<完美图解物联网Iot实操 ESP8266>中 第五章 P177页 动手做的代码2(使用SPIFFS文件系统的代码) 首先我们先动手使用Arduino IDE编译并且上传代码,上 ...
- ESP8266开发之旅 基础篇④ ESP8266与EEPROM
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- ESP8266开发之旅 网络篇⑭ web配网
1. 前言 目前,市面上流行多种配网方式: WIFI模块的智能配网(SmartConfig以及微信AirKiss配网) SmartConfig 配网方式 请参考博主之前的博文 ESP8266开 ...
- 21.TFS文件系统搭建笔记
TFS文件系统搭建笔记 参考地址: https://github.com/alibaba/tfs/blob/master/INSTALL.md https://github.com/alibaba/t ...
- s3c6410学习笔记-烧写uboot+构建文件系统
一.进入目录 #cd u-boot-1.1.6_sndk6410 二.SD卡 make clean make distclean vim Makefile ...
随机推荐
- ES6笔记2
ES6笔记2 Promise Promise 是 ES6 引入的异步编程的新解决方案,语法上是一个构造函数 一共有3种状态,pending(进行中).fulfilled(已成功)和rejected(已 ...
- 【进阶之路】多线程条件下分段处理List集合的几种方法
这两个月来因为工作和家庭的事情,导致一直都很忙,没有多少时间去汲取养分,也就没有什么产出,最近稍微轻松了一点,后续的[进阶之路]会慢慢回到正轨. 开门见山的说,第一次接触到多线程处理同一个任务,是使用 ...
- DDD中实体与值对象是干什么的
实体值对象的含义 我们前面已经讲过领域的概念, 今天来讲讲实体, 实体是我们进行设计领域模型时的基础单元, 与之有关的是值对象, 接下来先梳理一下实体以及值对象的含义,然后讲讲他们俩的关系, 希望通过 ...
- Docker学习(1) 初识
Docker的使用场景 1 使用Docker容器开发,测试,部署服务 2 创建隔离的运行环境 3 搭建测试环境 4 构建多用户的平台及服务(PaaS)基础设施 5 提供软件即服务(SaaS)应用程序 ...
- 书列荐书 |《刻意练习》安德斯·艾利克森,罗伯特·普尔著
花了两天的时间,一气呵成的读完了这本书.凝练的精华就是:首先,世界上并没有真正的天才这一说.基因可能会起作用,但是经过后天大量的刻意练习,基因的这种作用会弱化.刻意练习需要专注.及时的反馈,并根据反馈 ...
- 基于区域的CNN(R-CNN)
基于区域的CNN(R-CNN) Region-based CNNs (R-CNNs) 基于区域的卷积神经网络或具有CNN特征的区域(R-CNN)是一种将深度模型应用于目标检测的开创性方法.在本节中,将 ...
- 内核、dns、网卡配置
升级内核(安装新版软件包) rpm -ivh kernel-3.10.0-123.1.2.el7.x86_64.rpm 二.配置永久IP地址,子网掩码,网关地址 /etc/sysconfig/ne ...
- 空指针的解决方案Optional包装类
有道云笔记地址 (建议有道云打开,markdown文档,直接拷贝过来有一些问题) 引言 在java的开发中,有一个问题始终会伴随着开发的进程.记得我第一个项目的时候,有一个同事在评论我的代码的时候说到 ...
- Qt实现基于多线程的文件传输(服务端,客户端)
1. 效果 先看看效果图 这是传输文件完成的界面 客户端 服务端 2. 知识准备 其实文件传输和聊天室十分相似,只不过一个传输的是文字,一个传输的是文件,而这方面的知识,我已经在前面的博客写过了,不了 ...
- Map类型的Json格式
示例代码: Map<String, Object> map = new HashMap<>();// boolean 类型 map.put("boolean" ...