代码编织梦想

flash存储简答介绍

参考:https://www.elecfans.com/consume/572040.html
flash存储器又称闪存(快闪存储器),就其本质而言,flash存储器属于EEPROM(电擦除可编程只读存储器)类型。是一种长寿命的非易失性(在断电情况下仍能保持所存储的数据信息)的存储器。

SPIFFS(Serial Peripheral Interface Flash File System)

这个函数模块在旧的版本中使用,新版本使用了Little_FS代替该库,接口都一样。
但是这个模块在vs code 的platformIO中编写时显示被丢弃不再进行更改。
对flash对象的操作方式就和文件的读写方式很类似,可参考:https://blog.csdn.net/weixin_43794311/article/details/104224924
https://blog.csdn.net/weixin_43794311/article/details/128322954
常用:w:写入会把旧的数据清空;r:从开始只读;a:在文件末尾添加
功能:对flash内存的写入。

想要开启使用SPIFFS需要准备

1,MCU的完好性,且有FLASH空间
2,在Arduino的IDE中,分配有flash空间(如下图所示)

下图中的FS大小就是分配的flash空间,OTA(on-the-air technologe)指的是用于固件升级分配的空间
可参考:https://blog.csdn.net/bulebin/article/details/108428643
在这里插入图片描述

在这里插入图片描述

对文件的读写

简单的写w入实例,但w方式写入会将文件中的内容清空再重新写入

主要起作用的几句程序

 SPIFFS.format(); //格式化flash也是很有用的
File dataFile = SPIFFS.open(file_name, "w");// 先清空文件中旧数据,再写入,如果是
  //File dataFile = SPIFFS.open(file_name, "a");  //这种方式就不会清楚旧数据,而是在文件最后添加内容
  dataFile.println("Hello IOT World.");       // 向dataFile写入字符串信息
  dataFile.close();                           // 完成文件写入后关闭文件
#include <FS.h>  
 
String file_name = "/MAR/notes.txt"; //被读取的文件位置和名称
 
void setup() {

  Serial.begin(9600);
  Serial.println("");
  Serial.println("SPIFFS format start");
  SPIFFS.format();    // 格式化SPIFFS。先清空了flash,
  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 dataFile = SPIFFS.open(file_name, "a");  //这种方式就不会清楚旧数据,而是在文件最后添加内容
  dataFile.println("Hello IOT World.");       // 向dataFile写入字符串信息
  dataFile.close();                           // 完成文件写入后关闭文件
  Serial.println("Finished Writing data to SPIFFS");
}
 
void loop() {
}

读取(r)写入的内容

由于flash是断电后也不会丢失数据的存储,所以在上面程序写入内容后。即使断电后,再插上下载下面的读取程序,数据也会被读取出来。
主要起作用的程序

  //建立File对象用于从SPIFFS中读取文件
  File dataFile = SPIFFS.open(file_name, "r");   //这是r模式,表示只读

  //读取文件内容并且通过串口监视器输出文件信息
  for(int i=0; i<dataFile.size(); i++){
    Serial.print((char)dataFile.read());       
  }
#include <FS.h>

String file_name = "/MAR/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");   //这是r模式,表示只读

  //读取文件内容并且通过串口监视器输出文件信息
  for(int i=0; i<dataFile.size(); i++){
    Serial.print((char)dataFile.read());       
  }
  //完成文件读取后关闭文件
  dataFile.close();                           
}

void loop() {
}

对目录下文件的显示

主要起作用的一段

  File dataFile = SPIFFS.open(file_name, "w");// 建立File对象用于向SPIFFS中的file对象(即myFile.txt)写入信息
  dataFile.println("Hello MAR.");    // 向dataFile写入字符串信息
  dataFile.close();                           // 完成文件写入后关闭文件
  Serial.println(F("Finished Writing data to SPIFFS"));
 
  // 显示目录中文件内容以及文件大小
  Dir dir = SPIFFS.openDir(folder_name);  // 建立“目录”对象
  
  while (dir.next()) {  // dir.next()用于检查目录中是否还有“下一个文件”
    Serial.println(dir.fileName()); // 输出文件名
  }
}
#include <FS.h>
 
String file_name = "/MAR/myFile.txt"; //被读取的文件位置和名称
String folder_name = "/MAR";         //被读取的文件夹
 
void setup() {
  Serial.begin(9600);
  Serial.println("");
  
  if(SPIFFS.begin()){ // 启动闪存文件系统
    Serial.println("SPIFFS Started.");
  } else {
    Serial.println("SPIFFS Failed to Start.");
  }
 
  File dataFile = SPIFFS.open(file_name, "w");// 建立File对象用于向SPIFFS中的file对象(即myFile.txt)写入信息
  dataFile.println("Hello MAR.");    // 向dataFile写入字符串信息
  dataFile.close();                           // 完成文件写入后关闭文件
  Serial.println(F("Finished Writing data to SPIFFS"));
 
  // 显示目录中文件内容以及文件大小
  Dir dir = SPIFFS.openDir(folder_name);  // 建立“目录”对象
  
  while (dir.next()) {  // dir.next()用于检查目录中是否还有“下一个文件”
    Serial.println(dir.fileName()); // 输出文件名
  }
}
 
void loop() {
}

串口结果显示及分析,上面程序只是建立了一个/MAR/myFile.txt文件,但会出现两个,是因为flash的保持功能,就像U盘复制文件后还能在不同设备上查看。程序的下载不会处理flash部分的内存文件
在这里插入图片描述

移除文件操作

主要作用的代码

SPIFFS.remove(file_name)
#include <FS.h>

String file_name = "/MAR/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.remove(file_name)){
    Serial.print(file_name);
    Serial.println(" remove sucess");
  } 
  else {
    Serial.print(file_name);
    Serial.println(" remove fail");
  }                       
}

void loop() {
}

显示flash的系统信息

#include <FS.h>

FSInfo fs_info;

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

  SPIFFS.begin();       //启动SPIFFS
  Serial.println("");
  Serial.println("SPIFFS Started.");

  // 闪存文件系统信息
  SPIFFS.info(fs_info);

  // 可用空间总和(单位:字节)
  Serial.print("totalBytes: ");     
  Serial.print(fs_info.totalBytes); 
  Serial.println(" Bytes"); 

  // 已用空间(单位:字节)
  Serial.print("usedBytes: "); 
  Serial.print(fs_info.usedBytes);
  Serial.println(" Bytes"); 

  // 最大文件名字符限制(含路径和'\0')
  Serial.print("maxPathLength: "); 
  Serial.println(fs_info.maxPathLength);

  // 最多允许打开文件数量
  Serial.print("maxOpenFiles: "); 
  Serial.println(fs_info.maxOpenFiles);

  // 存储块大小
  Serial.print("blockSize: "); 
  Serial.println(fs_info.blockSize);

  // 存储页大小
  Serial.print("pageSize: ");
  Serial.println(fs_info.pageSize);
}

void loop() {
}

直接向开发板的flash传入文件(2.0.3版本测试不行)

1,Arduino的1.x版本的可以尝试使用下面方式

旧版本的ide可以参考这个
http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/iot-c/spiffs/upload-files/
在这里插入图片描述

2,Arduino2.x版本暂时没发现什么好的方法

3,esp8266芯片官方给的一个下载工具

对应esp8266芯片的官方给了一个下载文件flash_download_tool,:官网地址:https://www.espressif.com.cn/zh-hans/support/download/other-tools
下载到flash的操作可参考:

4,可以使用vs code和插件platformIO完成

参考:https://blog.csdn.net/weixin_43794311/article/details/128736410

一个小网址的传入,和访问

参考:https://blog.csdn.net/weixin_43794311/article/details/128736410
需要使用其中修改的程序,但图片网页资源需要参考http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/iot-c/spiffs/spiffs-web-server/load-imagecsss-javascript/

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43794311/article/details/128689769

esp8266开发之旅 基础篇③ esp8266与arduino的开发说明_单片机菜鸟哥的博客-爱代码爱编程_esp8266编程实例100篇

授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力。希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石。。。 共同学习成长QQ群 622368884,不喜勿加,里

NODEMCU学习笔记-02 esp8266 WIFI杀手 固件烧录版-爱代码爱编程

NODEMCU学习笔记-02 esp8266WIFI杀手 一些问题的答案动手前的准备让我们开始吧连接开发板并安装驱动打开Nodemcu固件烧录器NodeMCU-PyFlasher换个操作:我们用ESP8266Flasher试试重启开发板,开始运行原理和教程DEAUTH模式BEACON结语 一些问题的答案 Q 什么是开发板的flash? A F

ESP8266-NodeMCU-爱代码爱编程

ESP8266-NodeMCU ESP8266-NodeMCU引脚功能1.1 可用引脚1.2 电压电流限制1.3 特殊引脚情况说明1.4 上拉电阻/下拉电阻1.5 模拟输入1.6 串行端口1.7 I²C1.8 SPI1.9 ESP8266引脚功能一览 ESP8266-NodeMCU引脚功能 1.1 可用引脚   ESP8266芯片有17

【ESP8266个人学习笔记】三、了解ESP8266和NodeMCU-爱代码爱编程

随着无线通讯的需要开口越来越大,目前市面上早早地出现了wifi、Bluetooth、4G、5G等技术。要达到万物互联,要么将现有的技术推广运用,要么就开发更普适的新技术;目前来说第一种的推广还有待提高:智能家居、大数据的提出又将这个无线通讯的需求扩大。而ESP8266正式来填补这个缺口的新型开发板,它将连入WiFi的硬件成本成功达到了十元以内,从此你可以将

ESP8266 NodeMCU 使用 OLED 显示屏显示 IP 地址-爱代码爱编程

文章目录 前言所用器件型号开发环境搭建安装 ESP8266-NodeMCU开发板驱动安装 Arduino ESP8266包安装 Arduino U8g2 库U8g2 库介绍安装 U8g2连线NodeMCU引脚说明接线测试类声明例程显示 IP 地址 前言 在使用 NodeMCU 时需要直观显示 NodeMCU 连入网络后分配的 IP 地址,所以

ESP8266 NodeMCU内置的闪存文件系统-爱代码爱编程

 闪存        Serial Peripheral Interface Flash File System(SPIFFS)   一、ESP8266闪存文件系统基本操作  后面的1~4分别为写入,读取,添加和文件夹,且是顺序的连续步骤;  1. 通过程序向闪存文件系统写入信息  在notes.txt中写入字符串"Hello

ESP8266-NodeMCU物联网开发之Arduino环境搭建-爱代码爱编程

Arduino教程传送门🧭🏔🌋🛤🏞🏜 ESP8266-NodeMCU物联网开发之Arduino环境搭建 1. ESP8266-NodeMCU1.1 主要技术参数1.2 NodeMCU引脚功能1.3 特殊引脚情况说明1.4 串行端口2. arduino开发环境3. 配置测试3.1 移植代码3.2 编译上传3.3 验证效果4. 小结 1. ESP82

Esp8266的Flash读写操作以及Flash上传文件-爱代码爱编程

1、Flash的读写操作 Esp8266的Flash为4M,其中1M用于存储程序,其他的空间有一部分用于系统,3M中剩下的大部分空间可以用来存放文件。 #include <FS.h> String file_name = "/Fle/note.txt"; //被读取的文件位置和名称,放在/Fle文件夹下 void setup() { S

ESP8266学习笔记3-闪存文件系统-爱代码爱编程

3.3.1 闪存文件SPIFFS基本操作 程序来源:太极创客http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/iot-c/spiffs/spiffs-operation/ 物联网教程 / 第3章-用C/C++开发物联网 Arduino开发环境: 工具-开发板-NodeMCU 1.0(ESP-

太极创客ESP8266 - NodeMCU、MQTT教程(基于Arduino)-爱代码爱编程

太极创客ESP8266视频教程:https://www.bilibili.com/video/BV1L7411c7jw?from=search&seid=4858784806004995732&spm_id_from=333.337.0.0 官网资料:http://www.taichi-maker.com/homepage/esp82

ESP8266WiFi-begin调用储存在ESP8266的闪存系统中的WiFi设置-爱代码爱编程

ESP8266WiFi 有开发经验的同学,一定了解esp8266的WiFi的连接。 一般情况下,我们通过ESP8266WiFi库-begin()函数,配置wifi名称和wifi密码例如下程序片段 #include <ESP8266WiFi.h> // 使用ESP8266WiFi库 const char* ssid

arduino框架下esp32/8266使用progmem功能将数据存储到flash中的使用规范_perseverance52的博客-爱代码爱编程

Arduino框架下ESP32/8266使用PROGMEM功能将数据存储到flash中的使用规范 📌参考文档:https://arduino-esp8266.readthedocs.io/en/lates

esp8266 学习 五 闪存文件系统上传文件与读出输出_*星里的博客-爱代码爱编程

通过Arduino IDE向闪存文件系统上传文件 通过本节课的学习我们可以通过arduino IDE向nodeMCU上传文件了 在此我们需要对arduino进行配置如下 第一种方法是通过点击此链接进入 Arduino-ESP8266官方GitHub页面下载。详情请见以下截图: 在首选项里找到 并记住 通过资

esp8266-nodemcu物联网原理介绍以及说明(新手入门)_闰土小蒋的博客-爱代码爱编程

做一期安信可的ESP8266-NodeMCU物联网模块的介绍,详解该模块的电路和原理以及引脚的使用说明,后面会逐步上案例的。如有问题,请联系,及时更正。 ESP8266-NodeMCU 开发板 物联网模块,有ESP826

nodemcu arduino esp8266闪存文件系统基本操作(读写删除,目录)_闰土小蒋的博客-爱代码爱编程

/********************************************************************** 函数说明: SPIFFS.open(file_name, “w”); 以上函数

esp8266 arduinoide 闪存文件操作系统-爱代码爱编程

一、闪存文件系统基本操作 esp8266 的采用 SPIFFS 嵌入式文件系统,在内部 Flash 为 4M,其中 1M 用于存储程序,其他的空间有一部分用于系统,3M 中剩下的大部分空间可以用来存放文件。 其中这个空间大小是可以自定义的,在 arduinoIDE中可以修改。 1.1 初始化文件 #include <FS.h&

arduino之esp8266编程学习总结体会_8266编程软件-爱代码爱编程

前言         由于课程设计,在最近学习了Arduino,以ESP8266开发板进行为核心学习。Arduino编程相比stm32,由于Arduino是一个开源的平台,有许许多多很完善的第三方库。对于大对数的传感器,只需要使用对应的第三方库就能很简单的使用传感器,语法很简单很容易。而且其编程语法为C++,对于编程开发人员来说是十分友好。总而言之,对于

esp8266 nodemcu 闪存文件系统(spiffs)_esp8266 spiffs-爱代码爱编程

ESP8266 NodeMCU 闪存文件系统(SPIFFS) ESP8266闪存文件系统基本操作 不知道您有没有想过,当我们上传程序给ESP8266时,我们的程序具体存放在什么地方呢? 每一个ESP8266都配有

esp8266-爱代码爱编程

目录 1 设置闪存文件系统 2 通过代码使用闪存文件系统 2 .1 向闪存文件系统写入信息 2.2 读取闪存文件系统 3 通过ArduinoIDE插件使用闪存文件系统 3.1 下载Arduino-ESP8266闪存文件插件程序 3.2 插件使用 3.2.1 向闪存文件系统存入网页信息 3.2.2 通过PWM控制LED灯亮度 4 通过网页