Передача аудио файла на esp8266

SuperConductor

✩✩✩✩✩✩✩
23 Ноя 2024
7
0
Добрый день. Мне необходимо передать аудио файл (wav формат) с компьютера по Wi Fi на esp8266, которая скачает его на micro sd карту. Я находил решение для передачи текстового файла через телеграм бота при помощи библиотеки FastBot2 и скачивание его на sd через micro sd card adapter, но не смог найти способа скачать аудио файл. Подскажите, пожалуйста, можно ли как - то (и как если это возможно) скачать файл wav формата по wi fi. Может существует какая - нибудь другая библиотека для телеграм бота, которая позволяет скачать файл любого формата, или есть способ, позволяющий сделать это по другому?
 

SuperConductor

✩✩✩✩✩✩✩
23 Ноя 2024
7
0
@Сотнег,
Насколько я понимаю,
Текстовый файл — простой, содержит только символы в определённой кодировке ( ASCII и д.т.)
WAV — это аудиофайл, хранящий оцифрованный звук в виде последовательности амплитуд звуковой волны.
Я на всякий случай пробовал передавать вместо txt файла файл wav, не получалось.
 

Сотнег

★★★★★★★
15 Янв 2020
4,531
1,541
@SuperConductor,
любой файл - это просто последовательность байтов.
Не вижу смысла в том, чтобы запрещать какие-то из вариантов байтов. Ведь их всего 256.
Может быть, проблема не в содержимом, а в размере файла?
 
  • Лойс +1
Реакции: Олег Поляков

SuperConductor

✩✩✩✩✩✩✩
23 Ноя 2024
7
0
@Сотнег, Стало немного более ясно, но проблема не исчезла. Я всё ещё не могу найти способ взаимодействовать с чем - то кроме текстовых документов. В библиотеке FastBot2 есть функции bool hasDocument(); Text id(); и т.д. , но они не помогают взаимодействовать не с текстовыми документами. hasDocument() даст true, если в сообщении есть текстовый файл и даст 0 если там что - то кроме него (тот же wav файл). Я не смог найти функций для работы с другими файлами.
 

wizard suleiman

✩✩✩✩✩✩✩
13 Окт 2023
58
2
@SuperConductor,
1) версия ядра esp32 менее 3 должна быть
2) сохраняет все, любые файлы
3) пины стандартные
good luck)
C++:
#include <WiFi.h>
#include <ESPAsyncWebServer.h>
#include <SD.h>
#include <SPI.h>

const char* ssid = "ESP32-Access-Point"; // Access point name
const char* password = "123456789"; // Access point password

AsyncWebServer server(80); // Create an asynchronous web server on port 80

void setup() {
Serial.begin(115200); // Initialize the serial port

// Initialize the access point
WiFi.softAP(ssid, password);
Serial.println("Access Point started");

// Get the IP address
IPAddress myIP = WiFi.softAPIP();
Serial.print("ESP32 AP IP address: ");
Serial.println(myIP); // Print IP address to serial port

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

// Set a handler for the root URL
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
String html = "<html><body>";
html += "<h1>Upload MP3 File</h1>";
html += "<form action=\"/upload\" method=\"POST\" enctype=\"multipart/form-data\">";
html += "<input type=\"file\" name=\"file\">";
html += "<input type=\"submit\" value=\"Upload\">";
html += "</form>";
html += "</body></html>";
request->send(200, "text/html", html); // Send HTML page
});

// Set up a handler for file upload
server.on("/upload", HTTP_POST, [](AsyncWebServerRequest *request){
// Handle file upload
}, handleFileUpload);

// Start server
server.begin();
Serial.println("HTTP server started");
}

void loop() {
// No client handling required since async server is used
}

void handleFileUpload(AsyncWebServerRequest *request, String filename, size_t index, uint8_t *data, size_t len, bool final) {
static File file; // Declare file variable as static so it retains its value between calls

if (!index) {
Serial.printf("Upload Start: %s\n", filename.c_str());

// Open file for writing to SD card
file = SD.open("/" + filename, FILE_WRITE);
if (!file) {
Serial.println("Failed to open file for writing");
request->send(500, "text/plain", "Failed to open file for writing");
return;
} else {
Serial.printf("File %s successfully opened for writing.\n", filename.c_str());
}
}

// Write data to file
if (len) {
file.write(data, len);
Serial.printf("Written %d bytes to file %s\n", len, filename.c_str());
}

if (final) {
file.close();
Serial.printf("File %s successfully loaded\n", filename.c_str());
request->send(200, "text/plain", "File uploaded successfully");
}
}