Esp8266的Flash读写操作以及Flash上传文件

1、Flash的读写操作
Esp8266的Flash为4M,其中1M用于存储程序,其他的空间有一部分用于系统,3M中剩下的大部分空间可以用来存放文件。

#include <FS.h>
String file_name = "/Fle/note.txt"; //被读取的文件位置和名称,放在/Fle文件夹下

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_write(file_name, "1111");
  file_read(file_name);
  file_add(file_name, "2222");
  file_read(file_name);
}
void loop() {
    
    
}

//写操作
void file_write(String file_name, String content)
{
    
    
  /*****************************************写入闪存文件内容*************************************************/
  File dataFile = SPIFFS.open(file_name, "w");// 建立File对象用于向SPIFFS中的file对象(即/notes.txt)写入信息
  dataFile.println(content);       // 向dataFile写入字符串信息
  dataFile.close();                           // 完成文件写入后关闭文件
  Serial.print("已写入闪存文件内容:");
  Serial.println(content);
}
//读操作
void file_read(String file_name)
{
    
    
  //确认闪存中是否有file_name文件
  File dataFile;
  if (SPIFFS.exists(file_name))
  {
    
    
    //建立File对象用于从SPIFFS中读取文件
    dataFile = SPIFFS.open(file_name, "r");
    //读取文件内容并且通过串口监视器输出文件信息
    Serial.println("读取的文件内容:");
    for (int i = 0; i < dataFile.size(); i++)
    {
    
    
      Serial.print((char)dataFile.read());
    }
  }
  else
  {
    
    
    Serial.print(file_name);
    Serial.print(" NOT FOUND.");
  }
  //完成文件读取后关闭文件
  dataFile.close();
}
//追加操作
void file_add(String file_name, String content)
{
    
    
  if (SPIFFS.exists(file_name))
  {
    
    
    File dataFile = SPIFFS.open(file_name, "a");// 建立File对象用于向SPIFFS中的file对象(即/notes.txt)写入信息
    dataFile.println(content); // 向dataFile添加字符串信息
    dataFile.close();                           // 完成文件操作后关闭文件
    Serial.println("已经增添内容:");
    Serial.println(content);
  }
  else 
  {
    
    
    Serial.print(file_name);
    Serial.print(" NOT FOUND.");
  }
}

在这里插入图片描述
2、Flash上传文件并读取显示,以此来验证是否真的上传了
这里为了完成上传到Flash的任务,需要下载一个基于esp8266和Arduino的Flash文件上传插件
下面是安装Flash文件上传插件的具体步骤:
请添加图片描述
tools文件夹是要自己新建的,放在tools文件夹下的ESP8266FS文件夹是解压后的文件夹。记得设置完后要重启Arduino IDE软件才能生效。
下面采用这个插件进行Flash文件上传并验证:
首先在工程文件夹下新建一个data文件夹,把要上传的文件放在data文件夹下。打开Arduino IDE后点击工具-----ESP8266 Sketch Data Upload,点击之后会看到Esp8266的蓝灯在闪烁。烧录完成之后文件就已经保存在Esp8266的Flash里了。
请添加图片描述

现在利用以下程序来验证:

#include <FS.h>
String file_name = "/note.txt"; //被读取的文件位置和名称,放在根目录

void setup() {
    
    
  Serial.begin(9600);
  Serial.println("");

  if (SPIFFS.begin()) {
    
     // 启动SPIFFS
    Serial.println("SPIFFS Started.");
  } else {
    
    
    Serial.println("SPIFFS Failed to Start.");
  }
  file_read(file_name);
  file_add(file_name, "\n2222");
  file_read(file_name);
}
void loop() {
    
    
}


void file_write(String file_name, String content)
{
    
    
  /*****************************************写入闪存文件内容*************************************************/
  File dataFile = SPIFFS.open(file_name, "w");// 建立File对象用于向SPIFFS中的file对象(即/notes.txt)写入信息
  dataFile.println(content);       // 向dataFile写入字符串信息
  dataFile.close();                           // 完成文件写入后关闭文件
  Serial.print("已写入闪存文件内容:");
  Serial.println(content);
}
void file_read(String file_name)
{
    
    
  //确认闪存中是否有file_name文件
  File dataFile;
  if (SPIFFS.exists(file_name))
  {
    
    
    //建立File对象用于从SPIFFS中读取文件
    dataFile = SPIFFS.open(file_name, "r");
    //读取文件内容并且通过串口监视器输出文件信息
    Serial.println("读取的文件内容:");
    for (int i = 0; i < dataFile.size(); i++)
    {
    
    
      Serial.print((char)dataFile.read());
    }
  }
  else
  {
    
    
    Serial.print(file_name);
    Serial.print(" NOT FOUND.");
  }
  //完成文件读取后关闭文件
  dataFile.close();
}
void file_add(String file_name, String content)
{
    
    
  if (SPIFFS.exists(file_name))
  {
    
    
    File dataFile = SPIFFS.open(file_name, "a");// 建立File对象用于向SPIFFS中的file对象(即/notes.txt)写入信息
    dataFile.println(content); // 向dataFile添加字符串信息
    dataFile.close();                           // 完成文件操作后关闭文件
    Serial.println("已经增添内容:");
    Serial.println(content);
  }
  else 
  {
    
    
    Serial.print(file_name);
    Serial.print(" NOT FOUND.");
  }
}

上面程序中不能再进行SPIFFS.format()格式化操作了,否则会把刚保存进去的文件清除掉,并且注意到放在data文件夹下的文件均是放在esp8266的Flash的根目录下的,所以程序中的文件目录也应该用/note.txt。同时也要注意不能在程序中再对/note.txt文件进行写操作,否则也会覆盖掉123456789这个信息。
运行结果:
在这里插入图片描述
从上面可以看出,除了123456789,后面还有两个2222,这是因为在下载完成后会运行一遍程序,为了让串口显示数据我按了一次复位键,所以程序运行了两遍,追加了两次2222。

猜你喜欢

转载自blog.csdn.net/qq_46146657/article/details/121308894