ESP32WROOM32 DEVKIT_C 物联网学习笔记(3)闪存文件系统基本操作

系列文章目录

ESP32WROOM32 DEVKIT_C 物联网学习笔记(1)开发板简介及开发环境-CSDN博客

ESP32WROOM32 DEVKIT_C 物联网学习笔记(2)网络服务器-CSDN博客


目录

系列文章目录

前言

一、参考资料 

二、ESP32WROOM32闪存文件系统基本操作

1.通过程序向闪存文件系统写入信息 

2.通过程序从闪存文件系统读取信息

3.通过程序向闪存文件系统文件添加信息 

 4.从闪存文件系统中删除文件

总结



前言

上篇文章中,我们学习了如何搭建一个简单的网络服务器,可以在网页中控制开发板上的LED灯、以及显示开发板的引脚状态信息,初窥物联网。接下来我们学习文件系统。

Q:为什么要用Flash储存文件?

A:开发板在掉电后会损失数据,如果想保存一些数据使其不会随着掉电丢失,可将这些数据储存于Flash中,只需在掉电前将文件写入Flash,上电后读取文件即可。

Q:SPIFFS是什么?

A:Serial Peripheral Interface Flash File System,可称为闪存文件系统。

以下是一些数据(数组,字符串)的读写示例,实际上还可以用于存储网页数据,并在连接至esp32发出的网络服务器时访问这些网页,等等。

更详细的内容参见官方文档:(虽然是Esp8266的,但是Esp32也可参考)

Filesystem — ESP8266 Arduino Core documentation (arduino-esp8266.readthedocs.io)

注意:

1. 依据官方文档:

SPIFFS 目前已弃用,可能会在核心的未来版本中被删除。请考虑将代码移动到 LittleFS。上游开发人员不再积极支持SPIFFS,而LittleFS正在积极开发中,支持真实目录,并且对于大多数操作来说速度快很多倍。

但对于小型系统来说,SPIFFS依旧是够用的(至少对我来说)。

2. SPIFFS有这些缺点

(1)文件系统是平面的,例如这样的文件名:"/data/wifi.txt",wifi.txt这一文件并不是真正的存在于data这一目录下,我们可以简单视作:我们所指的这个文件,名称就是"/data/wifi.txt"这一字符串。

(2)文件名总共限制为32个字符。一个字符是为C字符串终止保留的,因此我们留下了31个可用字符。

3. 可以利用插件快速的在Arduino IDE中向闪存上传文件,插件可以在github很容易找到。以下内容只是利用代码进行数据的读写。


一、参考资料 

本文主要参考自太极创客网站 

3-3-1 ESP8266闪存文件系统基本操作 – 太极创客


二、ESP32WROOM32闪存文件系统基本操作

1.通过程序向闪存文件系统写入信息 

修改后的代码如下 :

/**********************************************************************
项目名称/Project           : 零基础入门学用物联网
程序名称/Program name      : esp32-flash-write
团队/Team                 : 太极创客团队 / Taichi-Maker (www.taichi-maker.com)
作者/Author               : CYNO 朔 
日期/Date(YYYYMMDD)      : 20191109
程序目的/Purpose           : 此程序用于演示如何向NodeMCU的SPIFFS中建立名为
                            notes.txt的文件,程序还将向该文件写入信息。
-----------------------------------------------------------------------


修订历史/Revision History  
日期/Date    作者/Author      参考号/Ref    修订说明/Revision Description
2024/7/16    王煜明                      

函数说明:
SPIFFS.open(file_name, "w"); 
以上函数有两个参数:
第一个参数是被操作的文件名称,本示例中该文件为/notes.txt
第二个参数"w" 代表写入文件信息。(如需了解如何读取信息,请参阅示例程序esp8266-flash-read)
***********************************************************************/
 
 
#include <FS.h>  
#include <SPIFFS.h>
 
String file_name = "/demo/notes.txt"; //被读取的文件位置和名称
 
void setup() {
  Serial.begin(9600);
  Serial.println("");
  
  Serial.println("SPIFFS format start");
  SPIFFS.format();    // 格式化SPIFFS
  Serial.println("SPIFFS format finish");
  
  if(SPIFFS.begin()){ // 启动SPIFFS
    Serial.println("SPIFFS Started.");
  } else {
    Serial.println("SPIFFS Failed to Start.");
  }
  
  File dataFile = SPIFFS.open(file_name, "w");// 建立File对象用于向SPIFFS中的file对象(即/notes.txt)写入信息
  dataFile.println("Hello IOT World.");       // 向dataFile写入字符串信息
  dataFile.close();                           // 完成文件写入后关闭文件
  Serial.println("Finished Writing data to SPIFFS");
}
 
void loop() {
}

 烧写代码后,串口输出信息如下:

成功写入文件

 

2.通过程序从闪存文件系统读取信息

 修改后的代码如下:

/**********************************************************************
项目名称/Project           : 零基础入门学用物联网
程序名称/Program name      : esp32-flash-read
团队/Team                 : 太极创客团队 / Taichi-Maker (www.taichi-maker.com)
作者/Author               : CYNO 朔
日期/Date(YYYYMMDD)      : 20191109
程序目的/Purpose           : 此程序用于演示如何从NodeMCU的内置SPIFFS中存储的文件notes.txt读取数据。
                           notes.txt 文件内容将会通过串口监视器显示出来供用户确认。
                           注意在使用本程序以前需要先将notes.txt 文件上传到NodeMCU开发板的SPIFFS中
-----------------------------------------------------------------------
修订历史/Revision History
日期/Date    作者/Author      参考号/Ref    修订说明/Revision Description
2024/7/16    王煜明                         
-----------------------------------------------------------------------
函数说明:
SPIFFS.open(file_name, "r"); 
以上SPIFFS函数有两个参数:
第一个参数是被操作的文件名称,本示例中该文件为/notes.txt
第二个参数"r" 代表读取文件信息。(如需了解如何写入信息,请参阅示例程序esp8266-flash-write)
***********************************************************************/
 
#include <FS.h>
#include <SPIFFS.h>
 
String file_name = "/demo/notes.txt";              //被读取的文件位置和名称
 
void setup() {
  Serial.begin(9600);
  Serial.println("");
  
  if(SPIFFS.begin()){ // 启动闪存文件系统
    Serial.println("SPIFFS Started.");
  } else {
    Serial.println("SPIFFS Failed to Start.");
  }
 
  //确认闪存中是否有file_name文件
  if (SPIFFS.exists(file_name)){
    Serial.print(file_name);
    Serial.println(" FOUND.");
  } else {
    Serial.print(file_name);
    Serial.print(" NOT FOUND.");
  }
 
  //建立File对象用于从SPIFFS中读取文件
  File dataFile = SPIFFS.open(file_name, "r"); 
 
  //读取文件内容并且通过串口监视器输出文件信息
  for(int i=0; i<dataFile.size(); i++){
    Serial.print((char)dataFile.read());       
  }
 
  //完成文件读取后关闭文件
  dataFile.close();                           
}
 
void loop() {
}

烧写代码后,串口输出的信息如下: 

读取出了之前写入的文件

 

3.通过程序向闪存文件系统文件添加信息 

修改后的代码如下: 

/**********************************************************************
项目名称/Project           : 零基础入门学用物联网
程序名称/Program name      : esp32-flash-append
团队/Team                 : 太极创客团队 / Taichi-Maker (www.taichi-maker.com)
作者/Author               : CYNO 朔 
日期/Date(YYYYMMDD)      : 20191109
程序目的/Purpose           : 此程序用于演示如何向NodeMCU的内置SPIFFS中存储的文件
                            notes.txt添加数据。                      
-----------------------------------------------------------------------  

修订历史/Revision History  
日期/Date    作者/Author      参考号/Ref    修订说明/Revision Description
2024/7/16    王煜明                        

函数说明:
SPIFFS.open(file_name, "a"); 
以上SPIFFS函数有两个参数:
第一个参数是被操作的文件名称,本示例中该文件为/notes.txt
第二个参数"a" 代表添加文件信息。(如需了解如何读取信息,请参阅示例程序esp8266-flash-read)
此示例程序所演示的是向SPIFFS中的文件里添加信息。这一操作写入信息有所区别。
添加信息是不会删除文件内原有信息,而是在原有信息后面添加新的信息。
但写入操作(示例 esp8266-flash-write.ino)是将文件内容完全清除,重新写入新信息。    
***********************************************************************/
 
#include <FS.h>
#include <SPIFFS.h>
 
String file_name = "/demo/notes.txt";              //被读取的文件位置和名称
 
void setup() {
  Serial.begin(9600);
  Serial.println("");
  
  if(SPIFFS.begin()){ // 启动闪存文件系统
    Serial.println("SPIFFS Started.");
  } else {
    Serial.println("SPIFFS Failed to Start.");
  }
 
  //确认闪存中是否有file_name文件
  if (SPIFFS.exists(file_name)){
    
    Serial.print(file_name);
    Serial.println(" FOUND.");
 
    File dataFile = SPIFFS.open(file_name, "a");// 建立File对象用于向SPIFFS中的file对象(即/notes.txt)写入信息
    dataFile.println("This is Appended Info."); // 向dataFile添加字符串信息
    dataFile.close();                           // 完成文件操作后关闭文件   
    Serial.println("Finished Appending data to SPIFFS");
    
  } else {
    Serial.print(file_name);
    Serial.print(" NOT FOUND.");
  }
                        
}
 
void loop() {
}

烧写代码后,串口输出的信息如下: 

写入成功

 4.从闪存文件系统中删除文件

修改后的代码如下: 

 

/**********************************************************************
项目名称/Project           : 零基础入门学用物联网
程序名称/Program name      : esp32-flash-remove
团队/Team                 : 太极创客团队 / Taichi-Maker (www.taichi-maker.com)
作者/Author               : CYNO 朔 
日期/Date(YYYYMMDD)      : 20191109
程序目的/Purpose           : 此程序用于演示如何删除SPIFFS中存储的文件          

-----------------------------------------------------------------------
修订历史/Revision History  
日期/Date    作者/Author      参考号/Ref    修订说明/Revision Description
2024/7/15    王煜明                         
            
***********************************************************************/
 
#include <FS.h>
#include <SPIFFS.h>
 
String file_name = "/demo/notes.txt";              //被读取的文件位置和名称
 
void setup() {
  Serial.begin(9600);
  Serial.println("");
  
//-------------------------------写入文件-----------------------------//
  Serial.println("SPIFFS format start");
  SPIFFS.format();    // 格式化SPIFFS
  Serial.println("SPIFFS format finish");
  
  if(SPIFFS.begin()){ // 启动SPIFFS
    Serial.println("SPIFFS Started.");
  } else {
    Serial.println("SPIFFS Failed to Start.");
  }
  
  File dataFile = SPIFFS.open(file_name, "w");// 建立File对象用于向SPIFFS中的file对象(即/notes.txt)写入信息
  dataFile.println("Hello IOT World.");       // 向dataFile写入字符串信息
  dataFile.close();                           // 完成文件写入后关闭文件
  Serial.println("Finished Writing data to SPIFFS");

  //---------------------------删除文件----------------------------//
  
  if(SPIFFS.begin()){ // 启动闪存文件系统
    Serial.println("SPIFFS Started.");
  } else {
    Serial.println("SPIFFS Failed to Start.");
  }
  
  //从闪存中删除file_name文件
  if (SPIFFS.remove(file_name)){
    
    Serial.print(file_name);
    Serial.println(" remove sucess");
    
  } else {
    Serial.print(file_name);
    Serial.println(" remove fail");
  }                       
}
 
void loop() {
}

烧写代码后,串口输出的信息如下: 

文件删除成功


总结

以上介绍了ESP32WROOM32闪存文件系统以及写入、读取、添加、删除几种基本操作。

  • 9
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: esp32-wroom-32e_devkitc 是一款基于 ESP32-WROOM-32E 模组的开发板,它采用了开放源代码的 ESP-IDF 开发框架,支持 Wi-Fi 和蓝牙通信。中文参考手册为开发者提供了详细的技术规格和使用指南。 这份参考手册首先介绍了 ESP32-WROOM-32E 模组的硬件组成和技术规格。模组具有双核 Tensilica LX6 处理器,主频高达 240MHz,支持多种外设接口,如 GPIO、UART、SPI、I2C 等,使其具备了丰富的扩展性。此外,模组还具备 Wi-Fi 802.11 b/g/n/e/i 和蓝牙 4.2 支持。 接着,参考手册详细介绍了如何搭建开发环境和配置开发板。它详细阐述了如何下载和安装 ESP-IDF 开发框架,以及如何配置开发环境和编译项目。开发者可以按照参考手册提供的步骤来快速搭建开发环境。 在使用手册的后续部分,详细描述了开发板的各个方面。它包括如何使用 Wi-Fi 进行连接和通信,如何使用蓝牙进行数据传输,以及如何通过 GPIO 与外部设备进行交互等。此外,手册还提供了丰富的示例代码和代码解释,帮助开发者更好地理解和应用相关功能。 最后,手册还介绍了开发板的固件更新方法,以及一些建议和常见问题解答。开发者可以根据手册中提供的信息和指南来解决常见问题,也可以参考手册获取开发者社区的相关资源和支持。 综上所述,esp32-wroom-32e_devkitc 中文参考手册是一份非常详细和全面的开发指南,可以帮助开发者快速上手和开发基于 ESP32-WROOM-32E 的应用程序。 ### 回答2: esp32-wroom-32e_devkitc 中文参考手册是一个详细介绍 ESP32-WROOM-32E 开发板的使用手册。手册从硬件介绍、软件开发环境搭建、编程语言和连接方式等多个方面对开发板进行了全面讲解。 首先,手册介绍了 ESP32-WROOM-32E 开发板的硬件配置,包括板载的芯片、外设、接口等。通过详细的硬件介绍,开发者可以了解到开发板的基本构造和硬件特性,为后续的软件开发提供基础。 接着,手册详细介绍了软件开发环境的搭建过程。它包括了开发环境的安装方法、编译调试工具的配置以及对应的驱动程序等。开发者可以按照手册中的指引,快速搭建开发环境,并开始进行软件开发。 在编程方面,手册提供了多种编程语言的使用说明,包括 C 语言和 MicroPython。每种语言都有详细的语法介绍和示例代码,方便开发者快速上手。此外,手册还介绍了如何使用各种库函数和API接口,以及涉及到的常用开发工具和调试方法。 最后,手册还展示了一些常见的连接方式和示例应用,例如如何与传感器、无线通信模块和云平台进行连接,并进行数据传输和控制。这些示例可以帮助开发者理解和应用 ESP32-WROOM-32E 开发板在实际项目中的应用场景。 总之,esp32-wroom-32e_devkitc 中文参考手册对 ESP32-WROOM-32E 开发板进行了全面而详尽的介绍,包括硬件和软件开发环境,编程语言和连接方式等。对于使用这款开发板的开发者来说,手册是一份非常宝贵的参考资料,可以帮助他们快速入门和顺利开展项目开发。 ### 回答3: ESP32-WROOM-32E DevKitC是一种基于ESP32-WROOM-32E模组的开发板,它集成了丰富的功能和接口,方便开发者进行硬件和软件开发。 这份中文参考手册为使用者提供了关于开发板硬件和软件方面的详细信息和指导。首先,手册介绍了开发板的硬件组成,包括主控芯片、存储器、引脚布局等。通过详细的图表和说明,使用者可以清楚了解各个组件的功能和连接方式。 接下来,手册介绍了开发板的软件开发环境搭建,包括开发工具的安装、驱动程序的配置等。使用者可以按照手册提供的步骤,轻松地搭建好开发环境,为后续的软件开发做好准备。 手册还提供了关于开发板的软件开发方法和示例代码。使用者可以了解如何使用ESP-IDF开发框架进行开发,并按照示例代码进行实验和测试。手册中还提供了丰富的代码注释和详细的参数说明,帮助使用者理解代码逻辑和功能实现。 此外,手册还包含了开发板的测试和调试方法,以及对常见问题的解答。这些信息可以帮助使用者在开发过程中遇到问题时迅速定位和解决,提高开发效率。 总而言之,ESP32-WROOM-32E DevKitC中文参考手册为使用者提供了全面的开发指南,包含了硬件和软件方面的详细信息和指导。使用者可以通过这份手册,快速上手开发,实现自己的创意和想法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值