ESP32 + SD card

Работа ESP32 с SD флеш-картами

Контроллеры на основе ESP32
Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

ESP32 + SD card

#41

Сообщение rw6cm » 25.12.2020{, 07:59}

yuriich писал(а):
25.12.2020{, 05:34}
в гугле все используют именно D5
В esp32 три spi. Два прописаны, и к ним по умолчанию идет sc (для VSPI - d5, для HSPI - d15)
Но их при необходимости можно менять на другие.
Почему у вас не работает не понятно. Сейчас проверил в версии 7.2.2 все работает.
Библиотеки встроенные в комплекте флпрог, между 6.3.1 и 7.2.2 разницы для есп32 нет.
Попробуйте флешки другой фирмы.
starmos писал(а):
25.12.2020{, 07:22}
ЧТО втыкать в разъем флешки и ЧЕМ переключать линии (реле я думал, но не хочу).
я бы для начала сделал на реле (это самый простой вариант), если что то получалось, тогда искал бы альтернативу.
думаю есть для переключения шины spi какие то "мультики" . надо просто поискать.

Отправлено спустя 11 минут 48 секунд:
К стати можно посмотреть на чем сделаны свитчеры (для клавы мыши моников)
которые переключают(на ходу) один комплект на разные компы.
Win10-64, FLProg (portable)

yuriich
Рядовой
Сообщения: 6
Зарегистрирован: 24.12.2020{, 11:34}
Репутация: 0
Имя: yurii

ESP32 + SD card

#42

Сообщение yuriich » 25.12.2020{, 19:09}

кррттибиидарчьрлмомпрдьлиьмб
Вложения
2020-12-25_223935.png
Последний раз редактировалось yuriich 25.12.2020{, 22:30}, всего редактировалось 1 раз.

Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

ESP32 + SD card

#43

Сообщение rw6cm » 25.12.2020{, 22:01}

yuriich писал(а):
25.12.2020{, 19:44}
Можно вопрос! Стандартный блок SD для есп32 у вас работает?
Не работает, и не работал на есп32.
yuriich писал(а):
25.12.2020{, 19:44}
Придется на nodemcu возвращаться
Если Вы подключили именно так
rw6cm писал(а):
20.02.2020{, 13:38}
Ввиду того что на модуле СД свой стабилизатор на 3,3в,
питание на VCC подавал с (Vin) esp32, (на котором 5в при питании от USB)
То возможно есть модули чем то отличающиеся.
hrach тоже с такой проблемой столкнулся
Win10-64, FLProg (portable)

yuriich
Рядовой
Сообщения: 6
Зарегистрирован: 24.12.2020{, 11:34}
Репутация: 0
Имя: yurii

ESP32 + SD card

#44

Сообщение yuriich » 25.12.2020{, 22:22}

написано)

Отправлено спустя 3 минуты 14 секунд:
.

Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

ESP32 + SD card

#45

Сообщение rw6cm » 27.12.2020{, 08:42}

yuriich,
Можно фото модулей есп и сд.
Что бы знать с какими что не так.
Win10-64, FLProg (portable)

yuriich
Рядовой
Сообщения: 6
Зарегистрирован: 24.12.2020{, 11:34}
Репутация: 0
Имя: yurii

ESP32 + SD card

#46

Сообщение yuriich » 28.12.2020{, 17:42}

rw6cm писал(а):
27.12.2020{, 08:42}
yuriich,
Можно фото модулей есп и сд.
Что бы знать с какими что не так.
OK! Как будет возможность скину!

shura2
Рядовой
Сообщения: 45
Зарегистрирован: 10.01.2020{, 00:26}
Репутация: 1
Имя: Александр

ESP32 + SD card

#47

Сообщение shura2 » 01.01.2021{, 03:19}

мне надо читать файлы из определенной директории в переменную. на базе примера https://github.com/espressif/arduino-es ... D_Test.ino
написал свою:
СпойлерПоказать
const char directoryToCut[] ="/ToCut";
const char* fileListToCut[20];


void listToCutDir(fs::FS &fs, const char * dirname, uint8_t levels){
Serial.printf("Listing directory: %s\n", dirname);

File root = fs.open(dirname);
int i=0;
File file = root.openNextFile();
while(file){
if(file.isDirectory()){
Serial.print(" DIR : ");
Serial.println(file.name());


} else {
fileListToCut=file.name();
Serial.print(" FILE: ");
Serial.print(file.name());
Serial.print(" SIZE: ");
Serial.println(file.size());

Serial.print(" I: ");
Serial.print(i);
Serial.print(" FILELIST: ");
Serial.println(fileListToCut);
i++;

}
file = root.openNextFile();
}
Serial.println(fileListToCut[0]);
Serial.println(fileListToCut[1]);
Serial.println(fileListToCut[2]);
}


Почему то переменная в цикле нормально принимает значения, а потом показывает какую-то хрень:
СпойлерПоказать
Listing directory: /ToCut
FILE: /ToCut/Cut1.txt SIZE: 72
I: 0 FILELIST: /ToCut/Cut1.txt
FILE: /ToCut/Cut2.txt SIZE: 72
I: 1 FILELIST: /ToCut/Cut2.txt
FILE: /ToCut/Cut3.txt SIZE: 72
I: 2 FILELIST: /ToCut/Cut3.txt
DIR : /ToCut/New folder
DIR : /ToCut/New folder (2)
��?���?ut1.txt

/ToCut/Cut3.txt


что я неправильно делаю?

Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

ESP32 + SD card

#48

Сообщение rw6cm » 01.01.2021{, 14:22}

shura2,
СпойлерПоказать

Код: Выделить всё

#include "FS.h"
#include "SD.h"
#include "SPI.h"
String directoryToCut ={"/ToCut"};
String fileListToCut={""};

void listToCutDir(fs::FS &fs, const String& dirname){
Serial.printf("Listing directory: %s\n", dirname);
int i=0;
File root = fs.open(dirname);
File file = root.openNextFile();
while(file){
if(file.isDirectory()){
Serial.print(" DIR : ");
Serial.println(file.name());
} else {
fileListToCut = file.name();
Serial.print(" I: ");
Serial.print(i);
Serial.print(" FILE: ");
Serial.print(file.name());
Serial.print(" SIZE: ");
Serial.println(file.size());
i++;

}
file = root.openNextFile();
}
file.close();
}

void setup(){
    Serial.begin(115200);
    SD.begin();
listToCutDir(SD, directoryToCut);
}

void loop(){

}
2021_01_01_14_18_50_COM6.png
Win10-64, FLProg (portable)

shura2
Рядовой
Сообщения: 45
Зарегистрирован: 10.01.2020{, 00:26}
Репутация: 1
Имя: Александр

ESP32 + SD card

#49

Сообщение shura2 » 01.01.2021{, 21:35}

rw6cm, я наверное не так выразился, мне надо прочитать список файлов из определенной директории в массив типа const char* fileListToCut[20];

fileListToCut[ i ] =file.name();
Serial.print(" FILE: ");
Serial.print(file.name());
Serial.print(" SIZE: ");
Serial.println(file.size());

Serial.print(" I: ");
Serial.print(i);
Serial.print(" FILELIST: ");
Serial.println(fileListToCut[ i ] );
i++;
в цикле запись в массив и последующая проверка работает нормально. Но как только выхожу из цикла и проверяю содержимое:
Serial.println(fileListToCut[0]);
Serial.println(fileListToCut[1]);
Serial.println(fileListToCut[2]);

Там оказывается какой то бред

п.с. при копировании на форум, почему в переменных пропадает знак [ ]

Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

ESP32 + SD card

#50

Сообщение rw6cm » 02.01.2021{, 08:18}

shura2 писал(а):
01.01.2021{, 21:35}
Там оказывается какой то бред
СпойлерПоказать
Там это и есть :D
Передача в терминал (UART) идет последовательно по одному символу.
Терминал запоминает и отображает каждый принятый символ.
По этому в конце передачи мы видим общую картину из этих символов.
Здесь главное понять, при этом виде передачи реально существует только один символ, остальное
это история, организованная программой (терминал) на компьютере.
Теперь что Вы делаете:
"От фонаря" объявляете массив из 20 символов (char -ов)
fileListToCut[20];
Перебирая в цикле, эти 20 символов переписываете (энное количество раз) символами из имен файлов
fileListToCut[ i ] =file.name();
При этом в терминале последовательно(на тот момент), отображаете каждый передаваемый символ идущий в массив
Serial.println(fileListToCut[ i ] );
После всего этого хотите в массиве месиве из 20-ти символов посмотреть 1-й, 2, и 3 символ.
Serial.println(fileListToCut[0]);
Serial.println(fileListToCut[1]);
Serial.println(fileListToCut[2]);
:)
shura2 писал(а):
01.01.2021{, 21:35}
п.с. при копировании на форум, почему в переменных пропадает знак [ ]
Для этого в редакторе есть опция - вставить в виде кода ( в верхнем ряду 5-я позиция)
Win10-64, FLProg (portable)

shura2
Рядовой
Сообщения: 45
Зарегистрирован: 10.01.2020{, 00:26}
Репутация: 1
Имя: Александр

ESP32 + SD card

#51

Сообщение shura2 » 02.01.2021{, 14:54}

rw6cm писал(а):
02.01.2021{, 08:18}
После всего этого хотите в массиве месиве из 20-ти символов посмотреть 1-й, 2, и 3 символ.
не сходится. во первых в цикле while у меня i больше 3 не показывало, но при этом Serial.println(fileListToCut[ i ] ) и Serial.println(file.name() ) в этом же цикле совпадали. И потом, после выхода из цикла
Serial.println(fileListToCut[0]);
Serial.println(fileListToCut[1]);
Serial.println(fileListToCut[2]);
показывали не по одному символу, а частично правильные строки.
Я почему определил переменную, потому что в одном примере для работы с библиотекой LVGL была переменная

Код: Выделить всё

const char * dummy_file_list[] = { "Contract 12.pdf", "Scanned_05_21.pdf", "Photo_132210.jpg", "Photo_232141.jpg",
                 "Photo_091640.jpg", "Photo_124019.jpg", "Photo_232032.jpg", "Photo_232033.jpg", "Photo_232034.jpg",
                 "Monday schedule.pdf", "Email from John.txt", "New file.txt", "Untitled.txt", "Untitled (1).txt", "Gallery_40.jpg",
                 "Gallery_41.jpg", "Gallery_42.jpg", "Gallery_43.jpg", "Gallery_44.jpg" };
по этому образцу пытался делать, т.е. объявить не массив символов, а массив строк

Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

ESP32 + SD card

#52

Сообщение rw6cm » 02.01.2021{, 20:23}

shura2 писал(а):
01.01.2021{, 21:35}
надо прочитать список файлов из определенной директории
Каталог SDcard ESP32.flp
(134.16 КБ) 89 скачиваний
Win10-64, FLProg (portable)

Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

ESP32 + SD card

#53

Сообщение rw6cm » 03.01.2021{, 12:30}

добавил в блок нумерацию каталога, удобней парсить строку.
В примере парсинг строки каталога файлов в директории, с раскладом в массив.
Каталог SDcard+массив ESP32.flp
(307.87 КБ) 102 скачивания
Win10-64, FLProg (portable)

shura2
Рядовой
Сообщения: 45
Зарегистрирован: 10.01.2020{, 00:26}
Репутация: 1
Имя: Александр

ESP32 + SD card

#54

Сообщение shura2 » 06.01.2021{, 01:46}

c массивом символов так и не разобрался. сделал массив строки.

Код: Выделить всё

void dir_Listing(fs::FS &fs, const char * dirname, uint8_t levels){
    Serial.printf("Listing directory: %s\n", dirname);

    int i =0;

    File root = fs.open(dirname); 
    File file = root.openNextFile();
    String tmpFileList; 
    
    while(file){
        if(file.isDirectory()){
            Serial.print("  DIR : ");
            Serial.println(file.name());
            
            
        } else {
             

             if (strstr(file.name(), ".nc") != NULL  || strstr(file.name(), ".gc") != NULL || strstr(file.name(), ".gcode") != NULL  ){ 

                tmpFileList = file.name();
                fileListToCut[i]=file.name();     // присваиваем массиву имя файла из выбранной папки
                i++;
                filesInDir = i;

                if (i > fileSelectLimit) break;

            }

        }

        file = root.openNextFile();

    }
    file.close();
    
}

потом правда обратно преобразовывать приходится, на да ладно

Код: Выделить всё

lv_obj_t * fileList_btn = lv_list_add_btn(list, LV_SYMBOL_FILE, fileListToCut[i].c_str());
У меня другой затык - не могу открыть файл:

Код: Выделить всё


void read_send_file_toCut(fs::FS &fs, const char* fileName){

    Serial.println(fileName);
    File file = fs.open(fileName);

    if(!file){
        Serial.println("Failed to open file for reading");
    }
    file.close();

}
В результате почему-то приписывается директория /sd/ к пути:

Код: Выделить всё

/ToCut/test2 - Copy.gc
[E][vfs_api.cpp:64] open(): /sd/ToCut/test2 - Copy.gc does not exist
Failed to open file for reading
не сталкивались с таким?

KulibinOrsk
Лейтенант
Сообщения: 515
Зарегистрирован: 25.02.2018{, 08:48}
Репутация: 21
Откуда: Оренбург
Имя: Александр

ESP32 + SD card

#55

Сообщение KulibinOrsk » 06.01.2021{, 07:43}

rw6cm, спрошу у вас тут, по существу, чтобы не плодить темы: в версии 7.3 ESP-32 полностью поддерживается или косяки еще лезут ? (по типу как с SD-картами)

Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

ESP32 + SD card

#56

Сообщение rw6cm » 06.01.2021{, 09:52}

shura2,
Все забываю спросить, Вам это надо только для обмена данными с сериал портом?
И выкладывайте полный скетч, чтобы не гадать что и откуда берете.
KulibinOrsk писал(а):
06.01.2021{, 07:43}
ESP-32 полностью поддерживается или косяки еще лезут ?
Не могу сказать.
Использую в своем узком направлении. В основном пишу кодом в ПБ.
Время не хватает что бы все проверить.
Win10-64, FLProg (portable)

shura2
Рядовой
Сообщения: 45
Зарегистрирован: 10.01.2020{, 00:26}
Репутация: 1
Имя: Александр

ESP32 + SD card

#57

Сообщение shura2 » 08.01.2021{, 00:02}

rw6cm писал(а):
06.01.2021{, 09:52}
Все забываю спросить, Вам это надо только для обмена данными с сериал портом?
И выкладывайте полный скетч, чтобы не гадать что и откуда берете.
Как такого скетча нет, я на данном этапе разбираюсь как все работает по частям, разобрался с тфт с тачскрином, разобрался с графической библиотекой LVGL (рекомендую HMI очень удобно программировать https://docs.lvgl.io ),казалось что разобрался как читать sd сарты. теперь с этим затык.
Как выяснил идет конфликт с библиотекой tft-espi.
СпойлерПоказать

Код: Выделить всё

void setup(){
    Serial.begin(115200);
    Serial.println("115200");

    SD.begin(5);
    dir_Listing(SD, directoryToCut, 0);

    lv_init();


        
/* TFT init */
    	tft.begin();
    	tft.setRotation(3);
        uint16_t calData[5] = {264, 3650, 268, 3572, 1};
        tft.setTouch(calData);
        
    dir_Listing(SD, directoryToCut, 0);
СпойлерПоказать

Код: Выделить всё

void dir_Listing(fs::FS &fs, const char * dirname, uint8_t levels){
    Serial.printf("Listing directory: %s\n", dirname);

    int i =0;

    File root = fs.open(dirname); 
    File file = root.openNextFile();
    String tmpFileList; 
    
    while(file){
        if(file.isDirectory()){
            Serial.print("  DIR : ");
            Serial.println(file.name());
            
            
        } else {
             

             if (strstr(file.name(), ".nc") != NULL  || strstr(file.name(), ".gc") != NULL || strstr(file.name(), ".gcode") != NULL  ){ 

                tmpFileList = file.name();
                fileListToCut[i]=file.name();     // присваиваем массиву имя файла из выбранной папки

                Serial.print("  FILE: ");
                Serial.print(file.name());
                Serial.print("  SIZE: ");
                Serial.println(file.size());
            
            
                Serial.print("  I: ");
                Serial.print(i);
                Serial.print("  FILELIST: ");
                Serial.println(fileListToCut[i]);

                
                i++;
                filesInDir = i;

                if (i > fileSelectLimit) break;

            }

        }

        file = root.openNextFile();

    }
    file.close();
}
При первом вызове листинг происходит, во втором нет. пишет всю ту же ошибку [E][vfs_api.cpp:64] open(): /sd/ToCut does not exist

А если SD. begin(); поставить позже, чем tft.begin();то не работает тачскрин, хотя листинг проходит успешно

а вообще делаю экран для управления чпу станком с GRBL. чтение файлов, отправка в уарт + настройки + макросы + вайфай.

Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

ESP32 + SD card

#58

Сообщение rw6cm » 08.01.2021{, 11:24}

shura2 писал(а):
08.01.2021{, 00:02}
Как выяснил идет конфликт с библиотекой tft-espi.
Не исключено. Надо мучить библиотеки )
вот только из кода выше не пойму, Вы их подключили на одну шину SPI с одним CS?
или для TFT где то указан другой пин?
Win10-64, FLProg (portable)

shura2
Рядовой
Сообщения: 45
Зарегистрирован: 10.01.2020{, 00:26}
Репутация: 1
Имя: Александр

ESP32 + SD card

#59

Сообщение shura2 » 12.01.2021{, 21:53}

rw6cm писал(а):
08.01.2021{, 11:24}
вот только из кода выше не пойму, Вы их подключили на одну шину SPI с одним CS?
И так и так подключал. в разделе void setup все работает, дальше из функций нет.
тут https://www.dropbox.com/s/u9mxc9xnpeeep ... 1.zip?dl=0 архив с проектом. в платформио, со всеми библиотеками

как пример, раскидал по функциям вызов dir_Listing(SD, "/ToCut", 0); он тоже вначале работает без проблем, дальше нет.

конфиг
СпойлерПоказать
-DUSER_SETUP_LOADED=0
-DILI9488_DRIVER=1
-DTFT_WIDTH=320
-DTFT_HEIGHT=480
-DTFT_MISO=19
-DTFT_MOSI=23
-DTFT_SCLK=18
-DTFT_CS=13
-DTFT_DC=14
-DTFT_RST=12
-DTOUCH_CS=33
-DTOUCH_CLK=18
-DTOUCH_DIN=23
-DTOUCH_DO=19
-DTOUCH_IRQ=X
-DLOAD_FONT2=1
-DLOAD_FONT4=1
-DLOAD_FONT6=1
-DLOAD_FONT7=1
-DLOAD_FONT8=1
-DLOAD_FONT8N=1
-DLOAD_GFXFF=1
-DSMOOTH_FONT=1
-DSPI_FREQUENCY=27000000
-DSPI_READ_FREQUENCY=20000000
-DSPI_TOUCH_FREQUENCY=2500000
посмотрите, может я где то туплю

Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

ESP32 + SD card

#60

Сообщение rw6cm » 13.01.2021{, 10:45}

shura2 писал(а):
12.01.2021{, 21:53}
архив с проектом. в платформио
в platformio не работаю.
flp или скетч
Win10-64, FLProg (portable)

Ответить

Вернуться в «ESP32»