------------------------------------------------------------------------------------ ----------------Скрипт кнопки копировать---------------------

Подробное описание кода веб-сервера с загрузкой файлов в SPIFFS для ESP32

Подробное описание кода веб-сервера с загрузкой файлов в SPIFFS для ESP32


Подробное описание кода веб-сервера с загрузкой файлов в SPIFFS для ESP32

Подробное описание кода веб-сервера с загрузкой файлов в SPIFFS для ESP32,

#include <Arduino.h>

#include <WiFi.h>

#include <SPIFFS.h>

#include <WebServer.h>

 

// Настройки Wi-Fi

const char* ssid = "";

const char* password = "";

 

// Создаем объект WebServer на порту 80

WebServer server(80);

 

// Функция для получения информации о размере SPIFFS

String getSPIFFSInfo() {

  size_t totalBytes = SPIFFS.totalBytes();

  size_t usedBytes = SPIFFS.usedBytes();

 

  String output = "<h3>Информация о SPIFFS</h3>";

  output += "<p>Общий размер: " + String(totalBytes) + " байт</p>";

  output += "<p>Использовано: " + String(usedBytes) + " байт</p>";

  output += "<p>Свободно: " + String(totalBytes - usedBytes) + " байт</p>";

  return output;

}

 

// Функция для вывода списка файлов

String listFiles() {

  String output = "<ul>";

  File root = SPIFFS.open("/");

  while (File file = root.openNextFile()) {

    output += "<li>" + String(file.name()) + " (" + String(file.size()) + " байт)</li>";

  }

  output += "</ul>";

  return output;

}

 

// Обработчик главной страницы

void handleRoot() {

  String html = "<!DOCTYPE html><html><head><meta charset='utf-8'></head><body>";

  html += "<h1>Файлы в SPIFFS</h1>";

  html += getSPIFFSInfo();

  html += listFiles();

  html += "<h2>Загрузка файла</h2>";

  html += "<form method='POST' action='/upload' enctype='multipart/form-data'>";

  html += "<input type='file' name='file'><input type='submit' value='Загрузить'></form>";

  html += "<h2>Форматирование SPIFFS</h2>";

  html += "<a href='/format'><button>Форматировать SPIFFS</button></a>";

  html += "</body></html>";

  server.send(200, "text/html; charset=utf-8", html);

}

 

// Обработчик загрузки файла

void handleUpload() {

  HTTPUpload& upload = server.upload();

  static File file;

 

  if (upload.status == UPLOAD_FILE_START) {

    String fileName = upload.filename;

    Serial.print("Загрузка файла: ");

    Serial.println(fileName);

 

    file = SPIFFS.open("/" + fileName, "w"); // Открываем файл для записи

    if (!file) {

      Serial.println("Ошибка открытия файла для записи");

      return;

    }

  } else if (upload.status == UPLOAD_FILE_WRITE) {

    if (file) {

      size_t bytesWritten = file.write(upload.buf, upload.currentSize); // Записываем данные в файл

      if (bytesWritten != upload.currentSize) {

        Serial.println("Ошибка записи файла");

        return;

      }

    }

  } else if (upload.status == UPLOAD_FILE_END) {

    if (file) {

      file.close();

      Serial.println("Файл успешно загружен.");

    }

    server.sendHeader("Location", "/");

    server.send(303);

  } else {

    Serial.println("Ошибка при загрузке файла");

  }

}

 

// Обработчик форматирования SPIFFS

void handleFormat() {

  Serial.println("Форматирование SPIFFS...");

  if (SPIFFS.format()) {

    Serial.println("SPIFFS отформатирован.");

  } else {

    Serial.println("Ошибка форматирования SPIFFS.");

  }

  server.sendHeader("Location", "/");

  server.send(303);

}

 

void setup() {

  Serial.begin(115200);

 

  if (!SPIFFS.begin(true)) {

    Serial.println("Ошибка инициализации SPIFFS!");

    return;

  }

 

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {

    delay(1000);

    Serial.println("Подключение к Wi-Fi...");

  }

  Serial.println("Подключено к Wi-Fi");

  Serial.print("IP-адрес: ");

  Serial.println(WiFi.localIP());

 

  server.on("/", handleRoot);

  server.on("/upload", HTTP_POST, [](){ server.send(200); }, handleUpload); // Добавил пустой обработчик для ответа на POST запрос

  server.on("/format", handleFormat);

 

  server.begin();

}

 

void loop() {

  server.handleClient();

}

 


Категория: Разное | Просмотров: 58 | Добавил: Админ | Рейтинг: 0.0/0
Всего комментариев: 1
1 Админ  
0
Подробное описание кода веб-сервера с загрузкой файлов в SPIFFS для ESP32

Этот код создает простой веб-сервер на плате ESP32, который позволяет просматривать файлы в файловой системе SPIFFS, загружать новые файлы и форматировать SPIFFS.

Подключение библиотек:

#include <Arduino.h>
#include <WiFi.h>
#include <SPIFFS.h>
#include <WebServer.h>

- `<Arduino.h>`: Базовая библиотека для плат Arduino.
- `<WiFi.h>`:   Библиотека для работы с Wi-Fi.
- `<SPIFFS.h>`:   Библиотека для работы с файловой системой SPIFFS.
- `<WebServer.h>`: Библиотека для создания веб-сервера.

Настройки Wi-Fi:

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

- `ssid`: Имя вашей сети Wi-Fi.
- `password`: Пароль вашей сети Wi-Fi.

Создание объекта WebServer:

WebServer server(80);

- Создается объект `server` класса `WebServer`, который будет прослушивать запросы на порту 80 (стандартный порт HTTP).

Функции:

1. `getSPIFFSInfo()`:
- Возвращает HTML-код с информацией о размере SPIFFS: общий размер, использованное пространство и свободное место.
- Использует `SPIFFS.totalBytes()` и `SPIFFS.usedBytes()` для получения информации о размере.

2. `listFiles()`:
- Возвращает HTML-код с маркированным списком файлов, хранящихся в SPIFFS.
- Рядом с именем каждого файла указывается его размер в байтах.

3. `handleRoot()`:
- Обработчик запросов к корневому пути ("/").
- Формирует HTML-страницу, которая отображает:
- Заголовок "Файлы в SPIFFS".
- Информацию о SPIFFS, полученную с помощью `getSPIFFSInfo()`.
- Список файлов, полученный с помощью `listFiles()`.
- Форму для загрузки файлов.
- Кнопку для форматирования SPIFFS.

4. `handleUpload()`:
- Обработчик POST-запросов к пути "/upload", который отвечает за загрузку файлов.
- Состоит из нескольких блоков, обрабатывающих разные этапы загрузки:
- `UPLOAD_FILE_START`: Начало загрузки файла. Открывается файл с именем, полученным из запроса, в режиме записи (`"w"`).
- `UPLOAD_FILE_WRITE`: Прием данных файла. Данные из буфера запроса (`upload.buf`) записываются в открытый файл.
- `UPLOAD_FILE_END`: Конец загрузки файла. Файл закрывается.
- В случае ошибок на любом из этапов выводится сообщение в Serial.

5. `handleFormat()`:
- Обработчик запросов к пути "/format", который отвечает за форматирование SPIFFS.
- Вызывает `SPIFFS.format()` для форматирования SPIFFS.
- Выводит сообщение о результате в Serial.

Настройка и запуск сервера:

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

if (!SPIFFS.begin(true)) { // Инициализация SPIFFS
Serial.println("Ошибка инициализации SPIFFS!");
return;
}

WiFi.begin(ssid, password); // Подключение к Wi-Fi
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Подключение к Wi-Fi...");
}
Serial.println("Подключено к Wi-Fi");
Serial.print("IP-адрес: ");
Serial.println(WiFi.localIP());

server.on("/", handleRoot);
server.on("/upload", HTTP_POST, [](){ server.send(200); }, handleUpload); // Обработка POST-запросов к "/upload"
server.on("/format", handleFormat); // Обработка запросов к "/format"

server.begin(); // Запуск сервера
}

void loop() {
server.handleClient(); // Обработка входящих запросов
}

- В `setup()`:
- Инициализируется Serial.
- Инициализируется SPIFFS.
- Выполняется подключение к Wi-Fi.
- Настраиваются обработчики для разных путей: `/`, `/upload`, `/format`.
- Запускается веб-сервер.

- В `loop()`:
- Вызывается `server.handleClient()` для обработки

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Понедельник, 21.07.2025, 19:12
Партнёры
Здесь
Форма входа
Календарь
«  Сентябрь 2024  »
Пн Вт Ср Чт Пт Сб Вс
      1
2345678
9101112131415
16171819202122
23242526272829
30
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0