我尝试在ESP8266 ESP-01的SPIFFS上做一些基本的读/写文件。写入文件后,如果我尝试读取它,它将始终返回0个读取字节。相同的代码在NodeMCU 10(ESP12E模块)上运行良好。
有趣的是,我可以将文件上传到ESP8266-01 SPIFFS(我在Visual Studio中使用vMicro进行开发,并使用“发布服务器数据文件(spiff)”),然后用我的代码阅读它们。仅当我编写文件时,读取操作不适用于该文件。我为ESP-01“通用ESP8266模块”尝试了不同的组合(闪存大小为1M,512K,SPIFFS大小为32K,64K,128K),结果相同。
草图代码在此处(包括许多调试语句):
#include <FS.h>
const char* fileName = "/abc.txt";
void setup() {
Serial.begin(115200);
delay(5000);
Serial.println("\n\nStarting...");
if (SPIFFS.begin()) {
Serial.println("begin OK");
if (SPIFFS.format()) {
Serial.println("format OK");
auto fW = SPIFFS.open(fileName, "w");
if (fW) {
Serial.println("Open W OK");
auto nWritten = fW.write((byte*)"aaaAAA", 6);
Serial.printf("Written: %d\n", nWritten);
fW.close();
Serial.println("Closed W OK");
}
else {
Serial.println("Failed opening W");
}
delay(5000);
Serial.println("");
auto fR = SPIFFS.open(fileName, "r");
if (fR) {
Serial.println("Open R OK");
auto fSize = fR.size();
Serial.printf("Size: %d\n", fSize);
Serial.printf("Position: %d\n", fR.position());
if (!fR.seek(0)) {
Serial.println("****Seek failed!");
}
Serial.printf("Position: %d\n", fR.position());
Serial.printf("Available: %d\n", fR.available());
char buffer[20] = { 0 };
auto nRead = fR.readBytes(buffer, fSize);
Serial.printf("nRead: %d\n", nRead);
Serial.printf("Data: [%s]\n", buffer);
fR.close();
Serial.println("Closed R OK");
}
else {
Serial.println("Failed opening R");
}
}
}
}
void loop() {
}
输出在这里。请注意,大小为6(正确),但nRead为0,[]之间的数据为空。
Starting...
begin OK
format OK
Open W OK
Written: 6
Closed W OK
Open R OK
Size: 6
Position: 0
Position: 0
Available: 6
nRead: 0
Data: []
Closed R OK
如果我注释掉SPIFFS.format()语句(由于第二次加载草图,则SPIFFS已被格式化并且文件已经存在),我什至无法打开文件进行写入。
那么,ESP-01上的SPIFFS是否存在写入问题,我该怎么做才能成功在其中写入文件?