ESP8266 使用 SPIFFS 进行文件的上传与保存

Posted lonelychampion

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ESP8266 使用 SPIFFS 进行文件的上传与保存相关的知识,希望对你有一定的参考价值。

首先需要下载包。网址https://github.com/esp8266/arduino-esp8266fs-plugin/releases  我下载的是最新的包。

下载下来之后是个jar包,需要放到arduino根目录的tools文件夹中。

技术图片

 

 

不要放错位置。放错位置的话,你的arduino IDE是无法在工具栏看到技术图片这个的,切记。我一开始就是放错了位置,结果找不到

然后呢,你需要在项目里创建一个data文件夹。然后将需要上传到falsh中的文件放到这个目录中。然后点击上面Data Upload就可以把这些文件上传到falsh中了

注意:上传项目编译文件是编译文件,上传data目录文件是目录文件。两码事,千万不要混为一谈

 

附代码

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <FS.h>
ESP8266WebServer server(80);
void setup() {
  Serial.begin(115200);
  // put your setup code here, to run once:
  WiFi.begin("kangtine","87602261");
  SPIFFS.begin();//这个地方要开启
  while(WiFi.status()!=WL_CONNECTED){
      delay(500);
      Serial.println(".");
    }
          Serial.print("dns 配置中");
    if(WiFi.status() == WL_CONNECTED) //If WiFi connected to hot spot then start mDNS
  {
    if (MDNS.begin("lsq")) {  //Start mDNS with name esp8266
      Serial.println("MDNS started");
    }
  }
    Serial.print("Wi-Fi connected,IP:");
    Serial.println(WiFi.localIP());
    server.on("/",[](){
        server.send(200,"text/html","hello from <b>ESP8266</b>.");
      });
   server.on("/index.htm",rootRouter);
     server.onNotFound([](){
        server.send(404,"text/plain","File Not found!");
      });
    server.begin();

    MDNS.addService("http","tcp",80);
    Serial.println("HTTP server started.");

    int n = MDNS.queryService("http","tcp");
    if(n>0){
        for(int i=0;i<n;i++){
            Serial.print(i+1);
            Serial.print(MDNS.hostname(i));
            Serial.print(MDNS.IP(i));
            Serial.print(MDNS.port(i));
          }
      }else{
          Serial.print("no service found");
        }
}

void loop() {
  // put your main code here, to run repeatedly:
    MDNS.update();
  server.handleClient();
}

void rootRouter(){
    File file=SPIFFS.open("/index.htm","r");//以只读模式打开index.htm,流模式为text/html。然后关闭该文件
    server.streamFile(file,"text/html");
    file.close();
  }

 

至此就可以了。记得把index.htm放到data文件夹中,然后点击Data Upload上传

注意,如果你的index.htm里边引用了别的文件或者图片。那必须在server.on()中设置

例如,如果你的index.htm中引用了某个图片。

server.on("/img/aaa.png",imgRouter);

void imgRouter(){

  

 File file=SPIFFS.open("/img/aaa.png","r");//以只读模式打开index.htm,流模式为text/html。然后关闭该文件
    server.streamFile(file,"image/png");
    file.close();

}

这样来操作才可以。相当的麻烦好像。。。不过貌似有好的办法。。。

 

接下来让我们认识SPIFFS文件系统

技术图片

 

 技术图片

 

技术图片

 

技术图片

 

 

 Dir  目录对象

用法

next 下一个文件   fileName 读取文件名  openFile 打开文件

Dir dir=SPIFFS.openDir("/data");

while(dir.next)){

  Serial.print(dir.fileName());

  File f = dir.openFile("r");

  Serial.println(f.size());

}

 

 

File (文件)对象

 SPIFFS.open 和 dir.openFile 都会返回File对象,他支持stream的所有函数。你可以使用readBytes findUntil   parseInt  println及其他所有stream方法

技术图片

 

 

技术图片  返回目前文件的位置,单位是byte

 

技术图片

以上是关于ESP8266 使用 SPIFFS 进行文件的上传与保存的主要内容,如果未能解决你的问题,请参考以下文章

Arduino ESP8266利用SPIFFS上传文件和查看文件

SPIFFS Upload Failed Error Code -10010 将文件上传到 ESP8266 时

ESP8266利用SPIFFS闪存文件系统上传查看下载文件

Arduino ESP8266利用SPIFFS制作一个酷炫的网页界面

解析-ESP01模块开发Arduino物联网wifi开关模块

ESP8266开发之旅 网络篇? SPIFFS——ESP8266 SPIFFS文件系统