91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ESP32驅(qū)動SPIFFS進(jìn)行文件操作

jf_88434166 ? 來源:jf_88434166 ? 作者:jf_88434166 ? 2025-08-05 18:11 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

簡介

SPIFFS(Serial Peripheral Interface Flash File System)是一種專為嵌入式系統(tǒng)設(shè)計的輕量級文件系統(tǒng),主要用于管理SPI NOR Flash存儲器(如ESP8266、ESP32微控制器上的Flash芯片)。它適用于資源有限的環(huán)境,提供基本的文件讀寫功能,適合存儲小文件(如配置文件、網(wǎng)頁資源等)。

本篇文章介紹如何在ESP32開發(fā)板上使用SPIFFS(SPI Flash File System)進(jìn)行文件操作??聪氯绾纬跏蓟疭PIFFS文件系統(tǒng)、讀取文件、列出文件、刪除文件,并查看存儲的剩余空間。

我們使用的開發(fā)環(huán)境是Arduino IDE, 這里要注意的是,Arduino IDE 2.0及以上版本不支持官方插件,所以我們本次需要ArduinoIDE軟件的版本為1.8.19。

在這里插入圖片描述

下載插件

我們可以去這個地方下載插件:https://github.com/me-no-dev/arduino-esp32fs-plugin,安裝步驟如下

在這里插入圖片描述
選擇下面的Releases
在這里插入圖片描述
點擊ESP32FS-1.1.zip下載并解壓縮在這里插入圖片描述
找到arduino首選項安裝文件夾位置,
在這里插入圖片描述
打開該位置,在該目錄下新建一個名為tools的文件夾(如果不存在)

在這里插入圖片描述
將剛剛下載的ESP32FS-1.1.zip解壓縮后的文件復(fù)制粘貼到tools目錄下
在這里插入圖片描述
重新啟動arduino ide,應(yīng)能看到SPIFFS上傳工具插件:ESP32草圖數(shù)據(jù)上傳
在這里插入圖片描述
在項目文件夾中新建一個名為data的子文件夾,并將想要上傳至SPIFFS文件系統(tǒng)的文件放在里面,可以是音頻文件、txt文本文件。這里我們先放進(jìn)去一個txt文檔進(jìn)行SPIFFS文件系統(tǒng)的讀取測試。其中用到的文件操作如下

SPIFSS讀取文件列表

SPIFFS.begin(true)

函數(shù)功能:初始化SPIFFS文件系統(tǒng)

如果初始化失敗,函數(shù)會返回false

SPIFFS.open("/")

函數(shù)功能:打開文件系統(tǒng)的根目錄 (/) 并返回一個File對象,允許對該目錄進(jìn)行文件操作

root.openNextFile()

函數(shù)功能:用于遍歷指定目錄中的下一個文件。返回的File對象代表文件,允許讀取文件信息

file.name()

函數(shù)功能:返回文件的名稱(文件路徑)

#include "SPIFFS.h"
 
void setup() 
{
  Serial.begin(115200);
  Serial.println();
  Serial.println("優(yōu)信電子");  
  Serial.println("SPIFSS讀取文件列表");
  
  if (!SPIFFS.begin(true)) { Serial.println("SPIFFS加載錯誤!");return; }

  File root = SPIFFS.open("/");
  File file = root.openNextFile();
 
  while(file)
  {
 
      Serial.print("文件: ");
      Serial.println(file.name());
      file = root.openNextFile();
  }
}
 
void loop() {
}

SPIFFS讀取文件內(nèi)容

SPIFFS.open("/test.txt")

函數(shù)功能:用于打開路徑為 /test.txt 的文件,并返回一個 File 對象。該對象允許讀取文件內(nèi)容。
如果文件不存在或打開失敗,返回的 File 對象將無效。

file.available()

*函數(shù)功能:檢查文件是否還有未讀取的數(shù)據(jù)。如果文件有剩余內(nèi)容,返回true,否則返回false。

file.read()

*函數(shù)功能:讀取文件中的下一個字節(jié),并返回該字節(jié)的值。每調(diào)用一次,就讀取文件中的一個字節(jié)。

file.close()

*函數(shù)功能:用于關(guān)閉文件,關(guān)閉文件后不能再對文件進(jìn)行任何操作。

#include "SPIFFS.h"
void setup() {
  Serial.begin(115200);
  SPIFFS.begin(true);
  Serial.println();
  Serial.println("SPIFSS讀取文件內(nèi)容");
  
  File file = SPIFFS.open("/test.txt");
  while(file.available())
  {
    Serial.write(file.read());
  }
  file.close();
}

void loop() {  
}

SPIFFS計算空間容量

SPIFFS.totalBytes()

*函數(shù)功能:返回文件系統(tǒng)總的存儲容量,以字節(jié)為單位。即SPIFFS文件系統(tǒng)的總大小。

SPIFFS.usedBytes()

*函數(shù)功能:返回當(dāng)前已使用的存儲容量,以字節(jié)為單位。即文件系統(tǒng)中存儲的文件所占用的空間。

#include "SPIFFS.h"
   
  void setup() 
  {
    
    Serial.begin(115200);
    Serial.println();
    Serial.println("計算空間容量");
    SPIFFS.begin(true);
   
    uint32_t totalBytes = SPIFFS.totalBytes();
    uint32_t usedBytes = SPIFFS.usedBytes();
    
    // 計算剩余容量
    uint32_t freeBytes = totalBytes - usedBytes;
    
    Serial.print("總空間: ");
    Serial.println(totalBytes);
    Serial.print("已使用空間: ");
    Serial.println(usedBytes);
    Serial.print("剩余空間: ");
    Serial.println(freeBytes);  
  }
   
  void loop() {
  }

SPIFFS刪除文件

SPIFFS.remove("/test.txt")

*函數(shù)功能:用于刪除指定路徑的文件。返回值為true表示刪除成功,false表示刪除失敗。

#include "SPIFFS.h"
 
void setup() 
{
  Serial.begin(115200);
  SPIFFS.begin(true);
  Serial.println();
  Serial.println("SPIFSS刪除文件列表");

  File root = SPIFFS.open("/");
  File file = root.openNextFile();
  /*先讀取文件列表*/
  while(file)
  {
 
      Serial.print("文件: ");
      Serial.println(file.name());
      file = root.openNextFile();
  }

  /*刪除文件列表*/
   if (SPIFFS.remove("/test.txt")) {
      while(1)
      {
        Serial.println("刪除成功!");
      }
    } else {
      Serial.println("刪除失敗!");
    }
   
}
 
void loop() {
}

這里刪除文件因為在上傳前要先關(guān)閉串口,如果再打開串口復(fù)位去查看就會顯示刪除失敗,所以這里加上一句刪除成功后的循環(huán)打印。

SPIFFS清空文件

如果文件系統(tǒng)有很多文件,想要全部刪除,不想要一個個刪除,就可以用格式化文件系統(tǒng)函數(shù)

SPIFFS.format()

*函數(shù)功能:用于格式化 SPIFFS 文件系統(tǒng)。格式化操作會清空文件系統(tǒng)中的所有數(shù)據(jù)

#include "FS.h"
#include "SPIFFS.h"

void setup() {
  Serial.begin(115200);
  if (!SPIFFS.begin(true)) {  
    Serial.println("SPIFFS加載錯誤!");
    return;
  }
  
  // 格式化 SPIFFS
  SPIFFS.format();  // 清空文件系統(tǒng)
  Serial.println("SPIFFS文件系統(tǒng)已格式化!");
}

void loop() {
}

SPIFFS基本測試

我們以讀取txt文本為例,按照上面方法在工程文件夾下面,新建一個data文件夾并放入我們的測試txt文件,里面內(nèi)容是hello,world!
在這里插入圖片描述
在這里插入圖片描述
為了方便測試我們可以將以上代碼整合:

#include "SPIFFS.h"
   
  void setup() 
  {
    
    Serial.begin(115200);
    Serial.println();
    Serial.println("優(yōu)信電子");
    Serial.println("SPIFSS讀取文件列表");
    
    if (!SPIFFS.begin(true)) { Serial.println("SPIFFS加載錯誤!");return; }
  
    File root = SPIFFS.open("/");
    File file = root.openNextFile();
  
    File txt = SPIFFS.open("/test.txt");
    while(txt.available())
    {
      Serial.write(txt.read());
    }
    Serial.println();
    txt.close();
    while(file)
    {
   
        Serial.print("文件: ");
        Serial.println(file.name());
        file = root.openNextFile();
    }
    uint32_t totalBytes = SPIFFS.totalBytes();
    uint32_t usedBytes = SPIFFS.usedBytes();
    
    // 計算剩余容量
    uint32_t freeBytes = totalBytes - usedBytes;
    
    Serial.print("總空間: ");
    Serial.println(totalBytes);
    Serial.print("已使用空間: ");
    Serial.println(usedBytes);
    Serial.print("剩余空間: ");
    Serial.println(freeBytes);
  
    if (SPIFFS.remove("/f.txt")) {
      Serial.println("刪除成功!");
    } else {
      Serial.println("刪除失敗!");
    }
  }
   
  void loop() {
  }

串口信息

這里我們打開串口看到我們上傳的SPIFFS文件:test.txt, 里面的內(nèi)容是hello,world! 并且顯示了SPIFFS相關(guān)的容量信息。

這里顯示“刪除失敗”,是因為我們在代碼里整合了之前文件操作的代碼,還包括了刪除SPIFFS文件,這里我只是在代碼里隨便刪除一個不存在于SPIFFS的文件f.txt, 所以會顯示“刪除失敗”,這里可以忽略這個信息,并不是代碼有問題。
在這里插入圖片描述

總結(jié)

本篇文章只是簡單介紹了什么是SPIFSS文件系統(tǒng),并對文件進(jìn)行了相關(guān)操作,后面我們會驅(qū)動SPIFFS進(jìn)行一個應(yīng)用,感興趣的可以先關(guān)注收藏一下。在這之前我們需要安裝插件,并對SPIFFS文件系統(tǒng)的相關(guān)操作有一些了解。如果由于網(wǎng)絡(luò)原因插件下載不了,可以評論區(qū)留言哦!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5198

    文章

    20442

    瀏覽量

    333976
  • FlaSh
    +關(guān)注

    關(guān)注

    10

    文章

    1748

    瀏覽量

    155508
  • 存儲器
    +關(guān)注

    關(guān)注

    39

    文章

    7738

    瀏覽量

    171650
  • ESP32
    +關(guān)注

    關(guān)注

    26

    文章

    1194

    瀏覽量

    21669
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    esp32s3 spiffs讀取文件錯誤的原因?

    我的應(yīng)用想通過uart將bin文件傳到spiffs進(jìn)行保存(因為進(jìn)行遠(yuǎn)程升級時,esp32s3沒辦法直接連外網(wǎng)。連外網(wǎng)的是另一個模塊),但b
    發(fā)表于 06-14 06:34

    ESP32C3 SPIFFS始終mount失敗的原因?

    使用的是arduinoesp32 2.0.3 sdk 用的是esp32SPIFFS -> SPIFFS_Test例程 使用的是合宙的e
    發(fā)表于 06-17 07:07

    ESP32-WROVER-B spiffs初始化失敗,報錯ESP_ERR_INVALID_ARG怎么解決?

    芯片:ESP32-WROVER-B IDF版本:release/v4.3 開發(fā)環(huán)境:Windows10 各位好,我遇到spiffs初始化失敗的問題,但我感覺我給的config應(yīng)該沒啥
    發(fā)表于 06-21 10:35

    SPIFFS是什么?有何作用

    文章目錄關(guān)于SPIFF的使用——esp32學(xué)習(xí)筆記零、簡述一、SPIFFS函數(shù)二、文件關(guān)于SPIFF的使用——esp32學(xué)習(xí)筆記零、簡述SPIFFS
    發(fā)表于 01-11 06:18

    esp32s3 spiffs讀取文件錯誤的原因?

    我的應(yīng)用想通過uart將bin文件傳到spiffs進(jìn)行保存(因為進(jìn)行遠(yuǎn)程升級時,esp32s3沒辦法直接連外網(wǎng)。連外網(wǎng)的是另一個模塊),但b
    發(fā)表于 02-13 06:47

    ESP32C3 SPIFFS始終mount失敗的原因?

    使用的是arduinoesp32 2.0.3 sdk用的是esp32SPIFFS -> SPIFFS_Test例程使用的是合宙的esp32
    發(fā)表于 02-14 08:15

    如何通過esp_http_client從ESP32 SPIFFS上傳文件到URL?

    我在 C 中使用 ESP32S3 和 ESP-IDF。我需要使用 HTTP post 請求將存儲在 SPIFFS 中的文件上傳到 URL。我發(fā)現(xiàn)我必須為此使用
    發(fā)表于 03-02 08:15

    esp32s3 spiffs讀取文件錯誤的原因?

    我的應(yīng)用想通過uart將bin文件傳到spiffs進(jìn)行保存(因為進(jìn)行遠(yuǎn)程升級時,esp32s3沒辦法直接連外網(wǎng)。連外網(wǎng)的是另一個模塊),但b
    發(fā)表于 03-06 06:09

    【FireBeetle 2 ESP32-S3開發(fā)板體驗】在Arduino中充分利用FireBeetle 2 ESP32-S3的16MB Flash做SPIFFS

    | 米羅科技文創(chuàng)學(xué)院 (mirotek.com.tw) ESP32 文件系統(tǒng)(LittleFS/FatFS/SPIFFS)對文件的讀取寫入列表刪除
    發(fā)表于 08-02 09:55

    淺談Zephyr ESP32 wifi如何使用

    和ethernt L2對接,因此在zephyr下只要通過簡單的配置就可以在應(yīng)用層使用socket通過wifi進(jìn)行網(wǎng)絡(luò)通信,而不需要去關(guān)心esp32 wifi驅(qū)動的細(xì)節(jié)。 配置方法 進(jìn)行
    的頭像 發(fā)表于 06-01 10:17 ?8635次閱讀

    簡析esp32的wifi驅(qū)動如何被集成進(jìn)Zephyr的驅(qū)動

    分析Zephyr ESP32 WIFI驅(qū)動的實現(xiàn)可以更為清晰的掌握esp32 wifi在zephyr上的使用,本文主要分析esp32的wifi驅(qū)動
    的頭像 發(fā)表于 06-01 10:41 ?5692次閱讀
    簡析<b class='flag-5'>esp32</b>的wifi<b class='flag-5'>驅(qū)動</b>如何被集成進(jìn)Zephyr的<b class='flag-5'>驅(qū)動</b>

    如果在Zephyr內(nèi)如何使用ESP32藍(lán)牙

    在Zephyr ESP32 藍(lán)牙驅(qū)動簡析一文中簡要分析了esp32 藍(lán)牙如何集成進(jìn)Zephyr,本文接著說明如果在Zephyr內(nèi)使用ESP32藍(lán)牙。 在Zepher中使用
    的頭像 發(fā)表于 06-07 16:42 ?5112次閱讀

    ESP32驅(qū)動0.96寸彩屏

    繼上次的ESP32在4寸彩屏的應(yīng)用外,還有哪些規(guī)格的彩屏同樣可以被ESP32驅(qū)動呢?沒錯,0.96寸的彩屏同樣可以!
    發(fā)表于 06-07 17:14 ?2987次閱讀

    ESP32 PWM驅(qū)動電機

    ESP32 尋跡模塊測試 尋跡模塊測試 所選設(shè)備 ESP32使用PWM 示例代碼 尋跡模塊測試 所選設(shè)備 ’ ESP32 引腳 說明 16 需要先拉低在拉高,才能驅(qū)動電機 13 PWM
    發(fā)表于 03-20 11:37 ?4次下載
    <b class='flag-5'>ESP32</b> PWM<b class='flag-5'>驅(qū)動</b>電機

    ESP32ESP32通過Internet進(jìn)行通信

    電子發(fā)燒友網(wǎng)站提供《ESP32ESP32通過Internet進(jìn)行通信.zip》資料免費下載
    發(fā)表于 06-15 09:58 ?5次下載
    <b class='flag-5'>ESP32</b>到<b class='flag-5'>ESP32</b>通過Internet<b class='flag-5'>進(jìn)行</b>通信