esp8266 的采用 SPIFFS 嵌入式文件系統(tǒng),在內(nèi)部 Flash 為 4M,其中 1M 用于存儲程序,其他的空間有一部分用于系統(tǒng),3M 中剩下的大部分空間可以用來存放文件。
為昭通等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及昭通網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站建設(shè)、網(wǎng)站制作、昭通網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!其中這個空間大小是可以自定義的,在 arduinoIDE中可以修改。
1.1 初始化文件#include
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.");
}
void loop() {
}
SPIFFS.format(); 函數(shù)將格式化全部用戶讀寫區(qū)。
SPIFFS.begin() 將開啟文件操作,在進行任何操作之前都需要調(diào)用?SPIFFS.begin() 開啟文件系統(tǒng)。
1.2?通過程序向閃存文件系統(tǒng)寫入信息File dataFile = SPIFFS.open(file_name, "w");// 建立File對象用于向SPIFFS中的file對象(即/notes.txt)寫入信息
dataFile.println("Hello IOT World."); // 向dataFile寫入字符串信息
dataFile.close(); // 完成文件寫入后關(guān)閉文件
Serial.println("Finished Writing data to SPIFFS");
1.3?通過程序從閃存文件系統(tǒng)讀取信息File dataFile = SPIFFS.open(file_name, "r"); //建立File對象用于從SPIFFS中讀取文件
//讀取文件內(nèi)容并且通過串口監(jiān)視器輸出文件信息
for(int i=0; i
1.4?通過程序向閃存文件系統(tǒng)文件添加信息//確認(rèn)閃存中是否有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(); // 完成文件操作后關(guān)閉文件
Serial.println("Finished Appending data to SPIFFS");
} else {
Serial.print(file_name);
Serial.print(" NOT FOUND.");
}
1.5 通過程序讀取目錄內(nèi)容String folder_name = "/taichi-maker"; //被讀取的文件夾
// 顯示目錄中文件內(nèi)容以及文件大小
Dir dir = SPIFFS.openDir(folder_name); // 建立“目錄”對象
while (dir.next()) { // dir.next()用于檢查目錄中是否還有“下一個文件”
Serial.println(dir.fileName()); // 輸出文件名
}
?1.6?從閃存文件系統(tǒng)中刪除文件//從閃存中刪除file_name文件
if (SPIFFS.remove(file_name)){
Serial.print(file_name);
Serial.println(" remove sucess");
} else {
Serial.print(file_name);
Serial.println(" remove fail");
}
1.7?從閃存文件系統(tǒng)中刪除文件// 閃存文件系統(tǒng)信息
SPIFFS.info(fs_info);
// 可用空間總和(單位:字節(jié))
Serial.print("totalBytes: ");
Serial.print(fs_info.totalBytes);
Serial.println(" Bytes");
// 已用空間(單位:字節(jié))
Serial.print("usedBytes: ");
Serial.print(fs_info.usedBytes);
Serial.println(" Bytes");
// 大文件名字符限制(含路徑和'\0')
Serial.print("maxPathLength: ");
Serial.println(fs_info.maxPathLength);
// 最多允許打開文件數(shù)量
Serial.print("maxOpenFiles: ");
Serial.println(fs_info.maxOpenFiles);
// 存儲塊大小
Serial.print("blockSize: ");
Serial.println(fs_info.blockSize);
// 存儲頁大小
Serial.print("pageSize: ");
Serial.println(fs_info.pageSize);
1.7 小案例#include
String file_name = "/taichi-maker/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(); // 完成文件寫入后關(guān)閉文件
Serial.println("Finished Writing data to SPIFFS");
//-------------- 讀取部分---------------------------------
dataFile = SPIFFS.open(file_name,"r"); //建立File對象用于從SPIFFS中讀取文件
for(int i = 0;i
這里展示一個簡單的讀寫案例。
可見值被成功讀入
二、通過Arduino IDE向閃存文件系統(tǒng)上傳文件需要安裝一個 arduino IDE 插件實現(xiàn)無需代碼直接向閃存中寫入文件。這個插件只支持?arduino IDE 1.x 版本,2.x是不能安裝的。我在本機中為了使用這個插件安裝了兩個版本的 arduino IDE。
具體安裝方式參考:3-3-2 通過Arduino IDE向閃存文件系統(tǒng)上傳文件 – 太極創(chuàng)客
三、作為文件 web 服務(wù)器#include#include#include#includeESP8266WiFiMulti wifiMulti; // 建立ESP8266WiFiMulti對象
ESP8266WebServer esp8266_server(80); // 建立網(wǎng)絡(luò)服務(wù)器對象,該對象用于響應(yīng)HTTP請求。監(jiān)聽端口(80)
void setup() {
Serial.begin(9600); // 啟動串口通訊
Serial.println("");
wifiMulti.addAP("ssid_from_AP_1", "your_password_for_AP_1"); // 將需要連接的一系列WiFi ID和密碼輸入這里
wifiMulti.addAP("ssid_from_AP_2", "your_password_for_AP_2"); // ESP8266-NodeMCU再啟動后會掃描當(dāng)前網(wǎng)絡(luò)
wifiMulti.addAP("ssid_from_AP_3", "your_password_for_AP_3"); // 環(huán)境查找是否有這里列出的WiFi ID。如果有
Serial.println("Connecting ..."); // 則嘗試使用此處存儲的密碼進行連接。
int i = 0;
while (wifiMulti.run() != WL_CONNECTED) { // 嘗試進行wifi連接。
delay(1000);
Serial.print(i++); Serial.print(' ');
}
// WiFi連接成功后將通過串口監(jiān)視器輸出連接成功信息
Serial.println('\n');
Serial.print("Connected to ");
Serial.println(WiFi.SSID()); // 通過串口監(jiān)視器輸出連接的WiFi名稱
Serial.print("IP address:\t");
Serial.println(WiFi.localIP()); // 通過串口監(jiān)視器輸出ESP8266-NodeMCU的IP
if(SPIFFS.begin()){ // 啟動閃存文件系統(tǒng)
Serial.println("SPIFFS Started.");
} else {
Serial.println("SPIFFS Failed to Start.");
}
esp8266_server.onNotFound(handleUserRequet); // 告知系統(tǒng)如何處理用戶請求
esp8266_server.begin(); // 啟動網(wǎng)站服務(wù)
Serial.println("HTTP server started");
}
void loop(void) {
esp8266_server.handleClient(); // 處理用戶請求
}
// 處理用戶瀏覽器的HTTP訪問
void handleUserRequet() {
// 獲取用戶請求網(wǎng)址信息
String webAddress = esp8266_server.uri();
// 通過handleFileRead函數(shù)處處理用戶訪問
bool fileReadOK = handleFileRead(webAddress);
// 如果在SPIFFS無法找到用戶訪問的資源,則回復(fù)404 (Not Found)
if (!fileReadOK){
esp8266_server.send(404, "text/plain", "404 Not Found");
}
}
bool handleFileRead(String path) { //處理瀏覽器HTTP訪問
if (path.endsWith("/")) { // 如果訪問地址以"/"為結(jié)尾
path = "/index.html"; // 則將訪問地址修改為/index.html便于SPIFFS訪問
}
String contentType = getContentType(path); // 獲取文件類型
if (SPIFFS.exists(path)) { // 如果訪問的文件可以在SPIFFS中找到
File file = SPIFFS.open(path, "r"); // 則嘗試打開該文件
esp8266_server.streamFile(file, contentType);// 并且將該文件返回給瀏覽器
file.close(); // 并且關(guān)閉文件
return true; // 返回true
}
return false; // 如果文件未找到,則返回false
}
// 獲取文件類型
String getContentType(String filename){
if(filename.endsWith(".htm")) return "text/html";
else if(filename.endsWith(".html")) return "text/html";
else if(filename.endsWith(".css")) return "text/css";
else if(filename.endsWith(".js")) return "application/javascript";
else if(filename.endsWith(".png")) return "image/png";
else if(filename.endsWith(".gif")) return "image/gif";
else if(filename.endsWith(".jpg")) return "image/jpeg";
else if(filename.endsWith(".ico")) return "image/x-icon";
else if(filename.endsWith(".xml")) return "text/xml";
else if(filename.endsWith(".pdf")) return "application/x-pdf";
else if(filename.endsWith(".zip")) return "application/x-zip";
else if(filename.endsWith(".gz")) return "application/x-gzip";
return "text/plain";
}
當(dāng)訪問 esp8266 ip的時候,即被重定向到 /index.html 打開網(wǎng)頁。?
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧