ESP32 + SD card

Контроллеры на основе ESP32
Аватара пользователя
rw6cm
Полковник
Сообщения: 2372
Зарегистрирован: 06 сен 2015, 20:25
Имя: Владимир
Поблагодарили: 41 раз

ESP32 + SD card

Сообщение rw6cm »

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

Отправлено спустя 11 минут 48 секунд:
К стати можно посмотреть на чем сделаны свитчеры (для клавы мыши моников)
которые переключают(на ходу) один комплект на разные компы.
Win10-64, FLProg (portable)
yuriich
Рядовой
Сообщения: 6
Зарегистрирован: 24 дек 2020, 11:34
Имя: yurii

ESP32 + SD card

Сообщение yuriich »

кррттибиидарчьрлмомпрдьлиьмб
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось yuriich 25 дек 2020, 22:30, всего редактировалось 1 раз.
Аватара пользователя
rw6cm
Полковник
Сообщения: 2372
Зарегистрирован: 06 сен 2015, 20:25
Имя: Владимир
Поблагодарили: 41 раз

ESP32 + SD card

Сообщение rw6cm »

yuriich писал(а): 25 дек 2020, 19:44 Можно вопрос! Стандартный блок SD для есп32 у вас работает?
Не работает, и не работал на есп32.
yuriich писал(а): 25 дек 2020, 19:44 Придется на nodemcu возвращаться
Если Вы подключили именно так
rw6cm писал(а): 20 фев 2020, 13:38 Ввиду того что на модуле СД свой стабилизатор на 3,3в,
питание на VCC подавал с (Vin) esp32, (на котором 5в при питании от USB)
То возможно есть модули чем то отличающиеся.
hrach тоже с такой проблемой столкнулся
Win10-64, FLProg (portable)
yuriich
Рядовой
Сообщения: 6
Зарегистрирован: 24 дек 2020, 11:34
Имя: yurii

ESP32 + SD card

Сообщение yuriich »

написано)

Отправлено спустя 3 минуты 14 секунд:
.
Аватара пользователя
rw6cm
Полковник
Сообщения: 2372
Зарегистрирован: 06 сен 2015, 20:25
Имя: Владимир
Поблагодарили: 41 раз

ESP32 + SD card

Сообщение rw6cm »

[ref]yuriich[/ref],
Можно фото модулей есп и сд.
Что бы знать с какими что не так.
Win10-64, FLProg (portable)
yuriich
Рядовой
Сообщения: 6
Зарегистрирован: 24 дек 2020, 11:34
Имя: yurii

ESP32 + SD card

Сообщение yuriich »

rw6cm писал(а): 27 дек 2020, 08:42 [ref]yuriich[/ref],
Можно фото модулей есп и сд.
Что бы знать с какими что не так.
OK! Как будет возможность скину!
shura2
Рядовой
Сообщения: 45
Зарегистрирован: 10 янв 2020, 00:26
Имя: Александр

ESP32 + SD card

Сообщение shura2 »

мне надо читать файлы из определенной директории в переменную. на базе примера https://github.com/espressif/arduino-es ... D_Test.ino
написал свою:

[spoiler]
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]);
}[/spoiler]

Почему то переменная в цикле нормально принимает значения, а потом показывает какую-то хрень:
[spoiler]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
[/spoiler]

что я неправильно делаю?
Аватара пользователя
rw6cm
Полковник
Сообщения: 2372
Зарегистрирован: 06 сен 2015, 20:25
Имя: Владимир
Поблагодарили: 41 раз

ESP32 + SD card

Сообщение rw6cm »

[ref]shura2[/ref],
[spoiler]

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

#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
[/spoiler]
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Win10-64, FLProg (portable)
shura2
Рядовой
Сообщения: 45
Зарегистрирован: 10 янв 2020, 00:26
Имя: Александр

ESP32 + SD card

Сообщение shura2 »

[ref=#ff8000]rw6cm[/ref], я наверное не так выразился, мне надо прочитать список файлов из определенной директории в массив типа 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
Полковник
Сообщения: 2372
Зарегистрирован: 06 сен 2015, 20:25
Имя: Владимир
Поблагодарили: 41 раз

ESP32 + SD card

Сообщение rw6cm »

shura2 писал(а): 01 янв 2021, 21:35 Там оказывается какой то бред

[spoiler]
Там это и есть :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]);
:)
[/spoiler]
shura2 писал(а): 01 янв 2021, 21:35 п.с. при копировании на форум, почему в переменных пропадает знак [ ]
Для этого в редакторе есть опция - вставить в виде кода ( в верхнем ряду 5-я позиция)
Win10-64, FLProg (portable)
shura2
Рядовой
Сообщения: 45
Зарегистрирован: 10 янв 2020, 00:26
Имя: Александр

ESP32 + SD card

Сообщение shura2 »

rw6cm писал(а): 02 янв 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
Полковник
Сообщения: 2372
Зарегистрирован: 06 сен 2015, 20:25
Имя: Владимир
Поблагодарили: 41 раз

ESP32 + SD card

Сообщение rw6cm »

shura2 писал(а): 01 янв 2021, 21:35 надо прочитать список файлов из определенной директории
Каталог SDcard ESP32.flp
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Win10-64, FLProg (portable)
Аватара пользователя
rw6cm
Полковник
Сообщения: 2372
Зарегистрирован: 06 сен 2015, 20:25
Имя: Владимир
Поблагодарили: 41 раз

ESP32 + SD card

Сообщение rw6cm »

добавил в блок нумерацию каталога, удобней парсить строку.
В примере парсинг строки каталога файлов в директории, с раскладом в массив.
Каталог SDcard+массив ESP32.flp
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Win10-64, FLProg (portable)
shura2
Рядовой
Сообщения: 45
Зарегистрирован: 10 янв 2020, 00:26
Имя: Александр

ESP32 + SD card

Сообщение shura2 »

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
Лейтенант
Сообщения: 516
Зарегистрирован: 25 фев 2018, 08:48
Откуда: Оренбург
Имя: Александр

ESP32 + SD card

Сообщение KulibinOrsk »

[ref=#ff8000]rw6cm[/ref], спрошу у вас тут, по существу, чтобы не плодить темы: в версии 7.3 ESP-32 полностью поддерживается или косяки еще лезут ? (по типу как с SD-картами)
Аватара пользователя
rw6cm
Полковник
Сообщения: 2372
Зарегистрирован: 06 сен 2015, 20:25
Имя: Владимир
Поблагодарили: 41 раз

ESP32 + SD card

Сообщение rw6cm »

[ref]shura2[/ref],
Все забываю спросить, Вам это надо только для обмена данными с сериал портом?
И выкладывайте полный скетч, чтобы не гадать что и откуда берете.
KulibinOrsk писал(а): 06 янв 2021, 07:43 ESP-32 полностью поддерживается или косяки еще лезут ?
Не могу сказать.
Использую в своем узком направлении. В основном пишу кодом в ПБ.
Время не хватает что бы все проверить.
Win10-64, FLProg (portable)
shura2
Рядовой
Сообщения: 45
Зарегистрирован: 10 янв 2020, 00:26
Имя: Александр

ESP32 + SD card

Сообщение shura2 »

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

[spoiler]

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

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);
[/spoiler]

[spoiler]

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

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();
}
[/spoiler]
При первом вызове листинг происходит, во втором нет. пишет всю ту же ошибку [E][vfs_api.cpp:64] open(): /sd/ToCut does not exist

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

а вообще делаю экран для управления чпу станком с GRBL. чтение файлов, отправка в уарт + настройки + макросы + вайфай.
Аватара пользователя
rw6cm
Полковник
Сообщения: 2372
Зарегистрирован: 06 сен 2015, 20:25
Имя: Владимир
Поблагодарили: 41 раз

ESP32 + SD card

Сообщение rw6cm »

shura2 писал(а): 08 янв 2021, 00:02 Как выяснил идет конфликт с библиотекой tft-espi.
Не исключено. Надо мучить библиотеки )
вот только из кода выше не пойму, Вы их подключили на одну шину SPI с одним CS?
или для TFT где то указан другой пин?
Win10-64, FLProg (portable)
shura2
Рядовой
Сообщения: 45
Зарегистрирован: 10 янв 2020, 00:26
Имя: Александр

ESP32 + SD card

Сообщение shura2 »

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

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

конфиг
[spoiler] -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[/spoiler]

посмотрите, может я где то туплю
Аватара пользователя
rw6cm
Полковник
Сообщения: 2372
Зарегистрирован: 06 сен 2015, 20:25
Имя: Владимир
Поблагодарили: 41 раз

ESP32 + SD card

Сообщение rw6cm »

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

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя