Страница 3 из 4
ESP32 + SD card
Добавлено: 25.12.2020{, 07:59}
rw6cm
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 секунд:
К стати можно посмотреть на чем сделаны свитчеры (для клавы мыши моников)
которые переключают(на ходу) один комплект на разные компы.
ESP32 + SD card
Добавлено: 25.12.2020{, 19:09}
yuriich
кррттибиидарчьрлмомпрдьлиьмб
ESP32 + SD card
Добавлено: 25.12.2020{, 22:01}
rw6cm
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 тоже с такой проблемой столкнулся
ESP32 + SD card
Добавлено: 25.12.2020{, 22:22}
yuriich
написано)
Отправлено спустя 3 минуты 14 секунд:
.
ESP32 + SD card
Добавлено: 27.12.2020{, 08:42}
rw6cm
yuriich,
Можно фото модулей есп и сд.
Что бы знать с какими что не так.
ESP32 + SD card
Добавлено: 28.12.2020{, 17:42}
yuriich
rw6cm писал(а): ↑27.12.2020{, 08:42}
yuriich,
Можно фото модулей есп и сд.
Что бы знать с какими что не так.
OK! Как будет возможность скину!
ESP32 + SD card
Добавлено: 01.01.2021{, 03:19}
shura2
мне надо читать файлы из определенной директории в переменную. на базе примера
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
что я неправильно делаю?
ESP32 + SD card
Добавлено: 01.01.2021{, 14:22}
rw6cm
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(){
}
ESP32 + SD card
Добавлено: 01.01.2021{, 21:35}
shura2
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]);
Там оказывается какой то бред
п.с. при копировании на форум, почему в переменных пропадает знак [ ]
ESP32 + SD card
Добавлено: 02.01.2021{, 08:18}
rw6cm
shura2 писал(а): ↑01.01.2021{, 21:35}
Там оказывается какой то бред
Там это и есть
Передача в терминал (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-я позиция)
ESP32 + SD card
Добавлено: 02.01.2021{, 14:54}
shura2
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" };
по этому образцу пытался делать, т.е. объявить не массив символов, а массив строк
ESP32 + SD card
Добавлено: 02.01.2021{, 20:23}
rw6cm
shura2 писал(а): ↑01.01.2021{, 21:35}
надо прочитать список файлов из определенной директории
ESP32 + SD card
Добавлено: 03.01.2021{, 12:30}
rw6cm
добавил в блок нумерацию каталога, удобней парсить строку.
В примере парсинг строки каталога файлов в директории, с раскладом в массив.
ESP32 + SD card
Добавлено: 06.01.2021{, 01:46}
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
не сталкивались с таким?
ESP32 + SD card
Добавлено: 06.01.2021{, 07:43}
KulibinOrsk
rw6cm, спрошу у вас тут, по существу, чтобы не плодить темы: в версии 7.3 ESP-32 полностью поддерживается или косяки еще лезут ? (по типу как с SD-картами)
ESP32 + SD card
Добавлено: 06.01.2021{, 09:52}
rw6cm
shura2,
Все забываю спросить, Вам это надо только для обмена данными с сериал портом?
И выкладывайте полный скетч, чтобы не гадать что и откуда берете.
KulibinOrsk писал(а): ↑06.01.2021{, 07:43}
ESP-32 полностью поддерживается или косяки еще лезут ?
Не могу сказать.
Использую в своем узком направлении. В основном пишу кодом в ПБ.
Время не хватает что бы все проверить.
ESP32 + SD card
Добавлено: 08.01.2021{, 00:02}
shura2
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. чтение файлов, отправка в уарт + настройки + макросы + вайфай.
ESP32 + SD card
Добавлено: 08.01.2021{, 11:24}
rw6cm
shura2 писал(а): ↑08.01.2021{, 00:02}
Как выяснил идет конфликт с библиотекой tft-espi.
Не исключено. Надо мучить библиотеки )
вот только из кода выше не пойму, Вы их подключили на одну шину SPI с одним CS?
или для TFT где то указан другой пин?
ESP32 + SD card
Добавлено: 12.01.2021{, 21:53}
shura2
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
посмотрите, может я где то туплю
ESP32 + SD card
Добавлено: 13.01.2021{, 10:45}
rw6cm
shura2 писал(а): ↑12.01.2021{, 21:53}
архив с проектом. в платформио
в platformio не работаю.
flp или скетч