• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Не пойму, где ошибка кода

ospkant777

New member
Доброго всем времени суток. Я начинающий еще в программировании. Вроде создал код для непосредственной записи через FTP сервер сразу на флешку, а выдает ошибку. Целый день сижу и не вижу. Уже и функцию перед сетапом поставил.

вот код на гитхабе https://github.com/ospkant/Myrepos/blob/main/WiFiClient3.ino

Может вообще я не правильно сделал?
 

Ildarmustafin86

Active member
Приветствую. Я думаю вам ответят быстрее если вы выложите код сюда и покажете что за ошибка выходит. А то придётся зайти на гит, скачать, установить, посмотреть что за ошибка и только после этого пытаться вам помочь
 

ospkant777

New member
#include <ESP8266WiFi.h>
#include <FS.h>
#include <ESP8266FtpServer.h>
#include <SD.h>

const char* ssid = ".....";
const char* password = ".....";

FtpServer ftpSrv;
File uploadFile;
bool fileOpen = false;

void onFileReceived(FtpServer::FileMeta_t file_meta) {
Serial.println("File received");
if (fileOpen) {
uploadFile.close();
}
uploadFile = SD.open(file_meta.name, FILE_WRITE);
fileOpen = true;
}

void setup() {
Serial.begin(9600);

WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
delay(500);

Serial.print("\n\nLocal IP: ");
Serial.println(WiFi.localIP());

if (!SD.begin(4)) {
Serial.println("SD card initialization failed");
return;
}
Serial.println("SD card initialized");

ftpSrv.begin("login","password"); // Инициализируем FTP-сервер (на 21-й порт)
ftpSrv.onFileReceived(onFileReceived);
}

void loop() {
ftpSrv.handleFTP();
}

variable or field 'onFileReceived' declared void
 

aZholtikov

Active member
Класс FtpServer содержит только 2 метода:
begin(String uname, String pword);
handleFTP();

Откуда ...ять взялось onFileReceived??? Конечно не компилируется...
А что по этому поводу говорит Example библиотеки?
 

aZholtikov

Active member
Переходите с Arduino IDE на нормальную IDE. VS Code + PlatformIO например. 99% вопросов "почему не того" сразу отпадут.
 

ospkant777

New member
Переходите с Arduino IDE на нормальную IDE. VS Code + PlatformIO например. 99% вопросов "почему не того" сразу отпадут.
Вот сейчас как раз разбираюсь. После Arduino IDE еще не привык. Хоббийно программирую в VS обычной, но там другой интерфейс, а с VS Code разобраться надо... Так все таки, может быть готовое решение есть для задачи? Блин, я вообще в собственном коде запутался.

VS Code пока нормальных туториалов на ютубе не нашел, сейчас сам разбираюсь... Если есть годный контент у кого, поделитесь пожалуйста или пошлите туда... где есть....
 

aZholtikov

Active member
PlatformIO можно "прилепить" и к "обычной" VS. Чуток с "бубном" просто.
Пример из библиотеки полностью рабочий. Проверил. Качается и заливается туда-обратно. Но в Flash ессно. В чем собственно вопрос? Надо на SD?
 

aZholtikov

Active member
VS Code пока нормальных туториалов на ютубе не нашел, сейчас сам разбираюсь... Если есть годный контент у кого, поделитесь пожалуйста или пошлите туда... где есть....
 

ospkant777

New member
PlatformIO можно "прилепить" и к "обычной" VS. Чуток с "бубном" просто.
Пример из библиотеки полностью рабочий. Проверил. Качается и заливается туда-обратно. Но в Flash ессно. В чем собственно вопрос? Надо на SD?
С компьютера через FTP на SD транзитом, без флеша с буфером хотел сделать, но я еще даже не юниор в этом деле, а младенец:) С буферами вообще бяда...
 

ospkant777

New member
Сейчас в новой PlatformIO вообще другой интерфейс и в VS Code тоже, пока найдешь... И Гайвер не все там показывает, а кратко, а мне именно по интерфейсу нужно, что где находиться, чтобы пальцем ткнули.
 

aZholtikov

Active member
С компьютера через FTP на SD транзитом, без флеша с буфером хотел сделать, но я еще даже не юниор в этом деле, а младенец:) С буферами вообще бяда...
Тут не подскажу - нет SD карты для теста... Может кто еще подскажет. И...
 

aZholtikov

Active member
И нех туда лезть. Первая верхняя иконка слева ваше все (2 листа). Больше для начала не надо.
 

ospkant777

New member
Попробуйте плагин arduino от microsoft, по сложности, как ардуиноиде.
Практически надо только указать путь, где находятся библиотеки.
Уже более менее разобрался :) , только не пойму, почему когда из Quick Access нахожу и добавляю нужную библиотеку в проект, она в проекте не появляется:oops:. Может быть проблема в пути с русскими буквами. Попробую переделать в настройках поменять путь для компиляции, может что изменится
 

ospkant777

New member
Как я раньше без нее жил (VS Code и Platform IO), Arduino IDE в сторонке тихо отдыхает и нервно ждет, когда его удалят. Насколько удобный инструмент. Все под рукой, что надо. Изменил путь в настройках, но перед этим я библиотеку в platformio.ini записал, в итоге не знаю, что сработало, но ведь библиотеку увидел. Теперь дело пойдет.....(y)
 

CodeNameHawk

Moderator
Команда форума
Попробуйте ардуиноиде 2, там все есть из коробки.
почему когда из Quick Access нахожу и добавляю нужную библиотеку в проект
Я не использую platformio, в мс плагине такого нет, там просто показал в настройках путь к папке со всеми библиотеками, в проекте написал #include название библиотеки и вперёд.
 

ospkant777

New member
Вроде разобрался. Но одного понять не могу, какой конечный адрес 8266 32Mbit (4MB)? Я пытаюсь высчитать его по коду:

uint32_t flashSize = ESP.getFlashChipSize(); // получение данных о флеш-памяти
uint32_t flashStartAddr = 0x40200000; // адрес начала флеш памяти
uint32_t flashEndAddr = flashStartAddr + flashSize - 1; // мы вычитаем 1 из вычисленного адреса,
// чтобы получить адрес последней доступной ячейки памяти.
Serial.println("");
Serial.print("Flash size: "); // вывод текста
Serial.println(flashSize); // вывод размера флеш памяти
Serial.print("Flash start address: 0х"); // адрес начала флеш памяти
Serial.println(flashStartAddr, HEX); //вывод значения адреса начала флеш памяти
Serial.print("Flash end address: 0x");
Serial.println(flashEndAddr, HEX); //вывод значения адреса конца флеш памяти

А он мне выдает в монитор:

Flash size: 4194304
Flash start address: 0х40200000
Flash end address: 0x405FFFFF

Тогда получается, что 0x405FFFFF правильный конец адреса? Просто читал, что у этого контроллера адрес должен быть 0x407FFFFF. А если я вообще не буду вычитать, тогда адрес будет 0x40600000. Какой из них правильный или микроконтроллер изменяет адреса флеш-памяти? По правильному конечно вычитать надо -1 так как адресация начинается с нуля.
 
Сверху Снизу