
Qwen3-Max9:56 AM
Отлично! Вы переходите к реальному монтажу — это ключевой этап.
На основе скриншота и всей истории чата я подготовлю для вас:
✅ 1. Скетч, соответствующий веб-интерфейсу на скриншоте
Ваш веб-интерфейс показывает:
- Статус VS1053 («Not Available»)
- Статус SD-карты («Not Available»)
- IP, сигнал Wi-Fi, громкость
- Кнопки: Play Radio, Stop, Volume +/–, Start/Stop Record, Next Station, Scan Networks, System Info, Test Functions
Это означает, что вам нужен скетч с расширенным веб-интерфейсом, который отображает статус оборудования и имеет кнопки управления.
📜 Рабочий скетч (версия 4.0.0) — под ваш веб-интерфейс
Этот скетч:
- Показывает статус VS1053 и SD
- Отображает Wi-Fi, IP, RSSI, громкость
- Имеет кнопки управления как на скриншоте
- Поддерживает энкодер, FRAM, TCA9548A, OTA
- Совместим с ESP32-MAX-V3.0 и VS1053 Breakout v4
cpp
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
⌄
⌄
⌄
⌄
⌄
⌄
isRecording = false;
stopPlaying();
server.sendHeader("Location", "/");
server.send(303);
});
server.on("/next", HTTP_GET, []() {
currentStation = (currentStation + 1) % stationCount;
if (isPlaying) playStation(currentStation);
saveSettingsToFRAM();
server.sendHeader("Location", "/");
server.send(303);
});
server.on("/station", HTTP_GET, []() {
String idxStr = server.arg("idx");
int idx = idxStr.toInt();
if (idx >= 0 && idx < stationCount) {
currentStation = idx;
if (isPlaying) playStation(currentStation);
saveSettingsToFRAM();
}
server.sendHeader("Location", "/");
server.send(303);
});
server.on("/scan", HTTP_GET, []() {
connectToBestWiFi();
server.sendHeader("Location", "/");
server.send(303);
});
server.on("/info", HTTP_GET, []() {
String html = "<h1>System Info</h1>";
html += "<p>ESP32 Chip ID: " + String(ESP.getEfuseMac(), HEX) + "</p>";
html += "<p>Free Heap: " + String(ESP.getFreeHeap()) + " bytes</p>";
html += "<p>Sketch Size: " + String(ESP.getSketchSize()) + " bytes</p>";
html += "<p>SDK Version: " + String(ESP.getSdkVersion()) + "</p>";
server.send(200, "text/html", html);
});
server.on("/test", HTTP_GET, []() {
String html = "<h1>Test Functions</h1>";
html += "<p>Testing VS1053: " + (vs1053Available ? "OK" : "FAIL") + "</p>";
html += "<p>Testing SD: " + (sdCardAvailable ? "OK" : "FAIL") + "</p>";
html += "<p>Testing FRAM: " + (framReadBytes(0, new uint8_t[2], 2) ? "OK" : "FAIL") + "</p>";
server.send(200, "text/html", html);
});
server.begin();
}
📐 2. Схемы подключения оборудования
Вот таблицы подключения согласно вашему заданию и конструкции ESP32-MAX-V3.0 и VS1053 Breakout v4.
🧩 Таблица подключения VS1053 Breakout v4
|
VS1053 BREAKOUT |
ESP32-MAX-V3.0 |
|
SCK |
GPIO18 |
|
MISO |
GPIO19 |
|
MOSI |
GPIO23 |
|
XCS |
GPIO5 |
|
XDCS |
GPIO17 |
|
DREQ |
GPIO16 |
|
XRST |
GPIO4 |
|
SD_CS |
GPIO25 |
|
GND |
GND |
|
3.3V |
3.3V |
⚠️ XRST должен быть подтянут к 3.3V через резистор 10 кОм или напрямую — если он висит в воздухе, модуль не запустится.
🧩 Таблица подключения TFT ST7735 1.8"
|
TFT ST7735 |
ESP32-MAX-V3.0 |
|
CS |
GPIO15 |
|
DC |
GPIO2 |
|
RST |
GPIO0 |
|
MOSI |
GPIO23 (общий SPI) |
|
SCK |
GPIO18 (общий SPI) |
|
GND |
GND |
|
VCC |
3.3V |