Невозможно прочитать содержимое файла после записи на ESP8266 ESP-01 - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь сделать какой-нибудь базовый файл чтения / записи на SPIFFS на ESP8266 ESP-01. После записи файла, если я пытаюсь его прочитать, он всегда возвращает 0 прочитанных байтов. Тот же код хорошо работает на NodeMCU 10 (модуль ESP12E).

Интересно, что я могу загружать файлы в ESP8266-01 SPIFFS (я использую vMicro в Visual Studio для разработки и «Публикация файлов данных сервера (spiffs)») и читать их в порядке с моим кодом. Это только если я пишу файл, чтение не работает для этого файла. Я пробовал разные комбинации для 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 уже отформатирован, а файл уже там), я даже не могу открыть файл для записи.

Итак, есть ли у SPIFFS на ESP-01 проблемы с записью, и что я могу сделать, чтобы иметь возможность успешно записывать туда файлы?

...