WiFi MicroSD на esp-12f

forfrends
Offline
Зарегистрирован: 24.02.2015

Всем привет! недавно наткнулся на проект создания WiFi MicroSD при помощи ESP8266: https://3dtoday.ru/blogs/jeka-tm/sd-card-with-wifi-with-your-own-hands/

Собрал свою плату. Вот что у меня получилось:

 

Скачал и установил все необходимые библиотеки (ESPWebDAV и SdFat). Открыл пример из ESPWebDAV и получил массу ошибок:

In file included from C:\Users\�����\Documents\Arduino\libraries\SdFat-master\src/FatLib/FatLib.h:27:0,

                 from C:\Users\�����\Documents\Arduino\libraries\SdFat-master\src/SdFat.h:33,

                 from C:\Users\�����\Documents\Arduino\libraries\ESPWebDAV-master/ESPWebDAV.h:2,

                 from D:\TEMP\arduino_modified_sketch_639563\Printer_3D.ino:5:

C:\Users\�����\Documents\Arduino\libraries\SdFat-master\src/FatLib/ArduinoFiles.h:122:7: error: redefinition of 'class fs::File'

 class File : public FatFile, public Stream {

       ^

In file included from C:\Users\�����\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\libraries\ESP8266WiFi\src/CertStoreBearSSL.h:26:0,

                 from C:\Users\�����\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\libraries\ESP8266WiFi\src/WiFiClientSecureBearSSL.h:30,

                 from C:\Users\�����\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\libraries\ESP8266WiFi\src/WiFiClientSecure.h:41,

                 from C:\Users\�����\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\libraries\ESP8266WiFi\src/WiFiServerSecure.h:20,

                 from C:\Users\�����\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\libraries\ESP8266WiFi\src/ESP8266WiFi.h:41,

                 from D:\TEMP\arduino_modified_sketch_639563\Printer_3D.ino:4:

C:\Users\�����\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\cores\esp8266/FS.h:52:7: error: previous definition of 'class fs::File'

 class File : public Stream

       ^

In file included from C:\Users\�����\Documents\Arduino\libraries\SdFat-master\src/FatLib/FatLib.h:28:0,

                 from C:\Users\�����\Documents\Arduino\libraries\SdFat-master\src/SdFat.h:33,

                 from C:\Users\�����\Documents\Arduino\libraries\ESPWebDAV-master/ESPWebDAV.h:2,

                 from D:\TEMP\arduino_modified_sketch_639563\Printer_3D.ino:5:

C:\Users\�����\Documents\Arduino\libraries\SdFat-master\src/FatLib/FatFileSystem.h: In member function 'fs::File FatFileSystem::open(const char*, oflag_t)':

C:\Users\�����\Documents\Arduino\libraries\SdFat-master\src/FatLib/FatFileSystem.h:95:13: error: 'class fs::File' has no member named 'open'

     tmpFile.open(vwd(), path, oflag);

             ^

exit status 1
Ошибка компиляции для платы Generic ESP8266 Module.

Как можно это исправить?

b707
Offline
Зарегистрирован: 26.05.2017

библиотека SDFat конфликтует с внутренней файловой системой ЕСП

Поищите в инетах, по-моему внутреннюю FS на ЕСП можно отключить. Кстати. посмотрите в вописании к библиотеке СД - вполне возможно, там это описано

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

forfrends пишет:

Как можно это исправить?

Купить Wi-fi роутер с SD-слотом и радоваться жизни.

Izvekoff
Offline
Зарегистрирован: 02.03.2020

ЕвгенийП пишет:

forfrends пишет:

Как можно это исправить?

Купить Wi-fi роутер с SD-слотом и радоваться жизни.

разве такой потянешь финансово, разве что в кредит )))

forfrends
Offline
Зарегистрирован: 24.02.2015

Проблема решилась путем установки "правильной" версии ядра для ESP8266. Установил версию 2.4. Компиляция проходит без проблем.

Пример Simple работает отлично. А вот при попытке прошить скетч Printer_3D ESP8266 уходит в вечный ребут:

 ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x4010f000, len 1384, room 16 
tail 8
chksum 0x2d
csum 0x2d
v8b899c12
~ld

Я проверил питание. Все Ок. На всякий случай запитал от компьютерного БП (3.3 вольт) все то же самое.

Goldz
Offline
Зарегистрирован: 23.04.2011

Здравствуйте!

Это просто какое то горе. У всех работает, у меня нет.

Установлено 1.8.1 IDE и 2.4.0 плата и все равно ошибка на строке

if(!dav.init(SD_CS, SPI_FULL_SPEED, SERVER_PORT))

no matching function for call to 'ESPWebDAV::init(int, long unsigned int, int)'

Пример не трогал,как скачал,так и есть

Очень прошу поделитесь знаниями. Голова пухнет!!!!!!

b707
Offline
Зарегистрирован: 26.05.2017

код поменяли, а пример забыли - обычная история

вторым параметром метода ESPWebDAV::init() теперь передается не скрость SPI , а вся структура SPISettings()

Goldz
Offline
Зарегистрирован: 23.04.2011

И что делать? Что на что менять?

Goldz
Offline
Зарегистрирован: 23.04.2011

Может быть у Вас есть рабочий пример? Поделитесь пожалуйста!

b707
Offline
Зарегистрирован: 26.05.2017

попробуйте свою строчку переписать вот так:

if(!dav.init(SD_CS,  SPISettings(SPI_FULL_SPEED, MSBFIRST, SPI_MODE0), SERVER_PORT))

 

Goldz
Offline
Зарегистрирован: 23.04.2011

Ошибка исчезла, появилась новая

 if (!nFile.createContiguous(sd.vwd(), uri.c_str(), contBlocks * WRITE_BLOCK_CONST))

D:\arduino-1.8.1\libraries\ESPWebDAV\ESPWebDAV.cpp:408:38: error: within this context

 

b707
Offline
Зарегистрирован: 26.05.2017

Goldz пишет:

Ошибка исчезла, появилась новая

 if (!nFile.createContiguous(sd.vwd(), uri.c_str(), contBlocks * WRITE_BLOCK_CONST))

D:\arduino-1.8.1\libraries\ESPWebDAV\ESPWebDAV.cpp:408:38: error: within this context

 

это не все сообщение об ошибке. давайте полностью

Goldz
Offline
Зарегистрирован: 23.04.2011
D:\arduino-1.8.1\libraries\ESPWebDAV\ESPWebDAV.cpp: In member function 'bool ESPWebDAV::init(int, SPISettings, int)':

D:\arduino-1.8.1\libraries\ESPWebDAV\ESPWebDAV.cpp:24:44: error: no matching function for call to 'SdFat32::begin(int&, SPISettings&)'

  return sd.begin(chipSelectPin, spiSettings);

                                            ^

D:\arduino-1.8.1\libraries\ESPWebDAV\ESPWebDAV.cpp:24:44: note: candidates are:

In file included from D:\arduino-1.8.1\libraries\ESPWebDAV\ESPWebDAV.cpp:6:0:

D:\arduino-1.8.1\libraries\SdFat\src/SdFat.h:58:8: note: bool SdBase<Vol>::begin(SdCsPin_t) [with Vol = FatVolume; SdCsPin_t = unsigned char]

   bool begin(SdCsPin_t csPin = SS) {

        ^

D:\arduino-1.8.1\libraries\SdFat\src/SdFat.h:58:8: note:   candidate expects 1 argument, 2 provided

D:\arduino-1.8.1\libraries\SdFat\src/SdFat.h:73:8: note: bool SdBase<Vol>::begin(SdCsPin_t, uint32_t) [with Vol = FatVolume; SdCsPin_t = unsigned char; uint32_t = unsigned int]

   bool begin(SdCsPin_t csPin, uint32_t maxSck) {

        ^

D:\arduino-1.8.1\libraries\SdFat\src/SdFat.h:73:8: note:   no known conversion for argument 2 from 'SPISettings' to 'uint32_t {aka unsigned int}'

D:\arduino-1.8.1\libraries\SdFat\src/SdFat.h:82:8: note: bool SdBase<Vol>::begin(SdSpiConfig) [with Vol = FatVolume]

   bool begin(SdSpiConfig spiConfig) {

        ^

D:\arduino-1.8.1\libraries\SdFat\src/SdFat.h:82:8: note:   candidate expects 1 argument, 2 provided

D:\arduino-1.8.1\libraries\SdFat\src/SdFat.h:91:8: note: bool SdBase<Vol>::begin(SdioConfig) [with Vol = FatVolume]

   bool begin(SdioConfig sdioConfig) {

        ^

D:\arduino-1.8.1\libraries\SdFat\src/SdFat.h:91:8: note:   candidate expects 1 argument, 2 provided

In file included from D:\arduino-1.8.1\libraries\SdFat\src/FatLib/FatLib.h:27:0,

                 from D:\arduino-1.8.1\libraries\SdFat\src/SdFat.h:34,

                 from D:\arduino-1.8.1\libraries\ESPWebDAV\ESPWebDAV.cpp:6:

D:\arduino-1.8.1\libraries\SdFat\src/FatLib/FatVolume.h: In member function 'void ESPWebDAV::handleRequest(String)':

D:\arduino-1.8.1\libraries\SdFat\src/FatLib/FatVolume.h:336:12: error: 'FatFile* FatVolume::vwd()' is private

   FatFile* vwd() {return &m_vwd;}

            ^

D:\arduino-1.8.1\libraries\ESPWebDAV\ESPWebDAV.cpp:90:23: error: within this context

  if(tFile.open(sd.vwd(), uri.c_str(), O_READ)) {

                       ^

D:\arduino-1.8.1\libraries\ESPWebDAV\ESPWebDAV.cpp: In member function 'void ESPWebDAV::sendPropResponse(boolean, FatFile*)':

D:\arduino-1.8.1\libraries\ESPWebDAV\ESPWebDAV.cpp:278:2: error: 'dir_t' was not declared in this scope

  dir_t dir;

  ^

D:\arduino-1.8.1\libraries\ESPWebDAV\ESPWebDAV.cpp:278:8: error: expected ';' before 'dir'

  dir_t dir;

        ^

D:\arduino-1.8.1\libraries\ESPWebDAV\ESPWebDAV.cpp:279:21: error: 'dir' was not declared in this scope

  curFile->dirEntry(&dir);

                     ^

D:\arduino-1.8.1\libraries\ESPWebDAV\ESPWebDAV.cpp:283:44: error: 'FAT_HOUR' was not declared in this scope

  tmStr.tm_hour = FAT_HOUR(dir.lastWriteTime);

                                            ^

D:\arduino-1.8.1\libraries\ESPWebDAV\ESPWebDAV.cpp:284:45: error: 'FAT_MINUTE' was not declared in this scope

  tmStr.tm_min = FAT_MINUTE(dir.lastWriteTime);

                                             ^

D:\arduino-1.8.1\libraries\ESPWebDAV\ESPWebDAV.cpp:285:45: error: 'FAT_SECOND' was not declared in this scope

  tmStr.tm_sec = FAT_SECOND(dir.lastWriteTime);

                                             ^

D:\arduino-1.8.1\libraries\ESPWebDAV\ESPWebDAV.cpp:286:44: error: 'FAT_YEAR' was not declared in this scope

  tmStr.tm_year = FAT_YEAR(dir.lastWriteDate) - 1900;

                                            ^

D:\arduino-1.8.1\libraries\ESPWebDAV\ESPWebDAV.cpp:287:44: error: 'FAT_MONTH' was not declared in this scope

  tmStr.tm_mon = FAT_MONTH(dir.lastWriteDate) - 1;

                                            ^

D:\arduino-1.8.1\libraries\ESPWebDAV\ESPWebDAV.cpp:288:43: error: 'FAT_DAY' was not declared in this scope

  tmStr.tm_mday = FAT_DAY(dir.lastWriteDate);

                                           ^

In file included from D:\arduino-1.8.1\libraries\SdFat\src/FatLib/FatLib.h:27:0,

                 from D:\arduino-1.8.1\libraries\SdFat\src/SdFat.h:34,

                 from D:\arduino-1.8.1\libraries\ESPWebDAV\ESPWebDAV.cpp:6:

D:\arduino-1.8.1\libraries\SdFat\src/FatLib/FatVolume.h: In member function 'void ESPWebDAV::handlePut(ResourceType)':

D:\arduino-1.8.1\libraries\SdFat\src/FatLib/FatVolume.h:336:12: error: 'FatFile* FatVolume::vwd()' is private

   FatFile* vwd() {return &m_vwd;}

            ^

D:\arduino-1.8.1\libraries\ESPWebDAV\ESPWebDAV.cpp:408:38: error: within this context

   if (!nFile.createContiguous(sd.vwd(), uri.c_str(), contBlocks * WRITE_BLOCK_CONST))

                                      ^

exit status 1
Ошибка компиляции для платы NodeMCU 1.0 (ESP-12E Module).

 

b707
Offline
Зарегистрирован: 26.05.2017

слишком много ошибок, похоже либа SdFat.h не той версии или не от ESP

Goldz
Offline
Зарегистрирован: 23.04.2011

Может кинете мне на почту ESPWebDAV и скетч,которым Вы прошивались удачно. Буду должен.

goldz@bk.ru

Goldz
Offline
Зарегистрирован: 23.04.2011
Поставил другую библиотеку якобы специальную для ЕСП. Получил!
 
D:\arduino-1.8.1\libraries\ESPWebDAV/ESPWebDAV.h:39:43: error: 'FatFile' has not been declared
 
  void sendPropResponse(boolean recursing, FatFile *curFile);
 
                                           ^
 
D:\arduino-1.8.1\libraries\ESPWebDAV/ESPWebDAV.h:42:40: error: 'FatFile' has not been declared
 
  void handleWriteError(String message, FatFile *wFile);
 
                                        ^
 
D:\arduino-1.8.1\libraries\ESPWebDAV/ESPWebDAV.h:64:2: error: 'SdFat' does not name a type
 
  SdFat sd;
 
  ^
 
exit status 1
Ошибка компиляции для платы NodeMCU 1.0 (ESP-12E Module).
 
b707
Offline
Зарегистрирован: 26.05.2017

Goldz пишет:

Может кинете мне на почту ESPWebDAV и скетч,которым Вы прошивались удачно. Буду должен.

goldz@bk.ru

извините, я сам с ESPWebDAV никогда дела не имел. Все, что я Вам отвечаю - исключительно на основе формального синтаксиса С++

Goldz
Offline
Зарегистрирован: 23.04.2011

Разобрался!!!!!!

 Компилируется при IDE 1.8.13, платы 2.5.2, SdFat-1.1.4

tema.koroliov
Offline
Зарегистрирован: 30.10.2016

Пробую этот набор - не компилируется. Валят ошибки sdfat библиотеки. Какой скетч используете?

tema.koroliov
Offline
Зарегистрирован: 30.10.2016

forfrends пишет:

Проблема решилась путем установки "правильной" версии ядра для ESP8266. Установил версию 2.4. Компиляция проходит без проблем.

Пример Simple работает отлично. А вот при попытке прошить скетч Printer_3D ESP8266 уходит в вечный ребут:

 ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x4010f000, len 1384, room 16 
tail 8
chksum 0x2d
csum 0x2d
v8b899c12
~ld

Я проверил питание. Все Ок. На всякий случай запитал от компьютерного БП (3.3 вольт) все то же самое.

 

Та же история. Как то решили вопрос?

Goldz
Offline
Зарегистрирован: 23.04.2011

Решил попробовать.

Скачиваем https://github.com/d-a-v/ESPWebDAV версия 2.0

Необходимый пример переписываем в отдельную папку и туда же переписываем библиотеки(.cpp и .h)

В скетче строку #include <ESPWebDAV.h> меняем на #include "ESPWebDAV.h" -загружать библиотеку из папки где лежит скетч

Проверял на NODEMCU ESP8266, IDE 1.8.13, версия плат 2.7.4

Скорость записи - 20 мегабайт- 5 минут, что сопоставимо с FTP сервером

shinji2009
Offline
Зарегистрирован: 11.10.2016

привет. forfrends, решили проблему?

 

forfrends пишет:
ets Jan 8 2013,rst cause:2, boot mode:(3,6)



load 0x4010f000, len 1384, room 16 
tail 8
chksum 0x2d
csum 0x2d
v8b899c12
~ld

 

Green
Offline
Зарегистрирован: 01.10.2015

Боюсь что у него теперь есть проблемы поважнее.(((

shinji2009
Offline
Зарегистрирован: 11.10.2016

ладно, сам разобрался. при соблюдении указанных выше условий, чтобы заработало, надо заменить код с 45 по 57 строку на этот

void ICACHE_RAM_ATTR purpurpur();

void purpurpur() {
  if(!weHaveBus)
      spiBlockoutTime = millis() + SPI_BLOCKOUT_PERIOD;
}

// ------------------------
void setup() {
// ------------------------
	// ----- GPIO -------
	// Detect when other master uses SPI bus
	pinMode(CS_SENSE, INPUT);
	attachInterrupt(digitalPinToInterrupt(CS_SENSE), purpurpur, FALLING);