WiFi MicroSD на esp-12f
- Войдите на сайт для отправки комментариев
Пт, 04/09/2020 - 19:15
Всем привет! недавно наткнулся на проект создания 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.
Как можно это исправить?


библиотека SDFat конфликтует с внутренней файловой системой ЕСП
Поищите в инетах, по-моему внутреннюю FS на ЕСП можно отключить. Кстати. посмотрите в вописании к библиотеке СД - вполне возможно, там это описано
Как можно это исправить?
Купить Wi-fi роутер с SD-слотом и радоваться жизни.
Как можно это исправить?
Купить Wi-fi роутер с SD-слотом и радоваться жизни.
разве такой потянешь финансово, разве что в кредит )))
Проблема решилась путем установки "правильной" версии ядра для ESP8266. Установил версию 2.4. Компиляция проходит без проблем.
Пример Simple работает отлично. А вот при попытке прошить скетч Printer_3D ESP8266 уходит в вечный ребут:
Я проверил питание. Все Ок. На всякий случай запитал от компьютерного БП (3.3 вольт) все то же самое.
Здравствуйте!
Это просто какое то горе. У всех работает, у меня нет.
Установлено 1.8.1 IDE и 2.4.0 плата и все равно ошибка на строке
no matching function for call to 'ESPWebDAV::init(int, long unsigned int, int)'
Пример не трогал,как скачал,так и есть
Очень прошу поделитесь знаниями. Голова пухнет!!!!!!
код поменяли, а пример забыли - обычная история
вторым параметром метода ESPWebDAV::init() теперь передается не скрость SPI , а вся структура SPISettings()
И что делать? Что на что менять?
Может быть у Вас есть рабочий пример? Поделитесь пожалуйста!
попробуйте свою строчку переписать вот так:
Ошибка исчезла, появилась новая
D:\arduino-1.8.1\libraries\ESPWebDAV\ESPWebDAV.cpp:408:38: error: within this context
Ошибка исчезла, появилась новая
D:\arduino-1.8.1\libraries\ESPWebDAV\ESPWebDAV.cpp:408:38: error: within this context
это не все сообщение об ошибке. давайте полностью
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).слишком много ошибок, похоже либа SdFat.h не той версии или не от ESP
Может кинете мне на почту ESPWebDAV и скетч,которым Вы прошивались удачно. Буду должен.
goldz@bk.ru
Может кинете мне на почту ESPWebDAV и скетч,которым Вы прошивались удачно. Буду должен.
goldz@bk.ru
извините, я сам с ESPWebDAV никогда дела не имел. Все, что я Вам отвечаю - исключительно на основе формального синтаксиса С++
Разобрался!!!!!!
Компилируется при IDE 1.8.13, платы 2.5.2, SdFat-1.1.4
Пробую этот набор - не компилируется. Валят ошибки sdfat библиотеки. Какой скетч используете?
Проблема решилась путем установки "правильной" версии ядра для ESP8266. Установил версию 2.4. Компиляция проходит без проблем.
Пример Simple работает отлично. А вот при попытке прошить скетч Printer_3D ESP8266 уходит в вечный ребут:
Я проверил питание. Все Ок. На всякий случай запитал от компьютерного БП (3.3 вольт) все то же самое.
Та же история. Как то решили вопрос?
Решил попробовать.
Скачиваем 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 сервером
привет. forfrends, решили проблему?
Боюсь что у него теперь есть проблемы поважнее.(((
ладно, сам разобрался. при соблюдении указанных выше условий, чтобы заработало, надо заменить код с 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);