Создание проекта PlatformIO
# Выйти из виртуального окружения если нужно
deactivate
# Активировать PlatformIO окружение
source ~/platformio_venv/bin/activate
# Создать директорию проекта
mkdir -p ~/vs1053_diagnostic
cd ~/vs1053_diagnostic
# Инициализировать PlatformIO проект
pio project init --board nodemcuv2
2. Создание конфигурационного файла
platformio.ini:
[env:nodemcuv2]
platform = espressif8266
board = nodemcuv2
framework = arduino
monitor_speed = 115200
upload_speed = 921600
lib_deps =
3. Создание основного скетча
src/main.cpp:
#include <Arduino.h>
#include <SPI.h>
// Пины для VS1053
const int X_CS = D1; // GPIO5
const int X_DCS = D2; // GPIO4
const int DREQ = D3; // GPIO0
const int RESET = D4; // GPIO2
// Регистры VS1053
#define SCI_MODE 0x00
#define SCI_STATUS 0x01
#define SCI_CLOCKF 0x03
#define SCI_VOL 0x0B
#define SCI_AUDATA 0x05
// Функция чтения регистра
uint16_t readRegister(uint8_t reg) {
while (!digitalRead(DREQ)) {
delayMicroseconds(100);
}
digitalWrite(X_CS, LOW);
SPI.transfer(0x03); // Read operation
SPI.transfer(reg);
uint16_t result = SPI.transfer(0xFF) << 8;
result |= SPI.transfer(0xFF);
digitalWrite(X_CS, HIGH);
return result;
}
// Функция записи в регистр
void writeRegister(uint8_t reg, uint16_t value) {
while (!digitalRead(DREQ)) {
delayMicroseconds(100);
}
digitalWrite(X_CS, LOW);
SPI.transfer(0x02); // Write operation
SPI.transfer(reg);
SPI.transfer(value >> 8);
SPI.transfer(value & 0xFF);
digitalWrite(X_CS, HIGH);
}
void setup() {
Serial.begin(115200);
delay(2000); // Ждем инициализации Serial
Serial.println("\n=== VS1053 Diagnostic Tool ===");
Serial.println("PlatformIO on Ubuntu 18.04");
Serial.printf("ESP8266 Chip ID: %08X\n", ESP.getChipId());
Serial.printf("Free Heap: %d bytes\n", ESP.getFreeHeap());
// Инициализация пинов
pinMode(X_CS, OUTPUT);
pinMode(X_DCS, OUTPUT);
pinMode(DREQ, INPUT);
pinMode(RESET, OUTPUT);
digitalWrite(X_CS, HIGH);
digitalWrite(X_DCS, HIGH);
digitalWrite(RESET, LOW);
// Инициализация SPI
SPI.begin();
SPI.setFrequency(1000000); // 1 MHz
// Сброс VS1053
Serial.println("Resetting VS1053...");
digitalWrite(RESET, LOW);
delay(100);
digitalWrite(RESET, HIGH);
delay(500); // Ждем полной инициализации
// Проверка связи
Serial.println("Testing communication...");
uint16_t status = readRegister(SCI_STATUS);
Serial.printf("SCI_STATUS: 0x%04X\n", status);
if (status == 0xFFFF || status == 0x0000) {
Serial.println("ERROR: No communication with VS1053");
Serial.println("Please check:");
Serial.println("1. Wiring connections");
Serial.println("2. Power supply (3.3V)");
Serial.println("3. Ground connections");
return;
}
Serial.println("✓ Communication established");
// Получение информации о чипе
uint8_t version = (status >> 4) & 0x0F;
Serial.printf("Chip Version: %d\n", version);
// Тест тактовой частоты
Serial.println("Testing clock settings...");
writeRegister(SCI_CLOCKF, 0x6000); // 3.5x multiplier
uint16_t clockf = readRegister(SCI_CLOCKF);
Serial.printf("SCI_CLOCKF: 0x%04X\n", clockf);
// Проверка аудиоданных
uint16_t audata = readRegister(SCI_AUDATA);
Serial.printf("SCI_AUDATA: 0x%04X\n", audata);
Serial.println("\n=== Diagnostic Results ===");
if (status != 0xFFFF && status != 0x0000) {
Serial.println("✓ VS1053 detected and responsive");
Serial.println("✓ SPI communication working");
Serial.println("✓ Chip is properly reset");
} else {
Serial.println("✗ VS1053 not responding");
}
Serial.println("\nPress reset button to run diagnostics again");
}
void loop() {
// Минимальный мониторинг
static unsigned long lastUpdate = 0;
if (millis() - lastUpdate > 5000) {
uint16_t status = readRegister(SCI_STATUS);
Serial.printf("[%lu] Status: 0x%04X | Heap: %d bytes\n",
millis()/1000, status, ESP.getFreeHeap());
lastUpdate = millis();
}
delay(100);
}
4. Компиляция и загрузка
# Компиляция проекта
pio run
# Загрузка на ESP8266 (замените порт если нужно)
pio run -t upload
# Если нужно указать конкретный порт:
pio run -t upload --upload-port /dev/ttyUSB0
# Мониторинг Serial
pio device monitor
5. Скрипт для автоматической загрузки и мониторинга
upload_and_monitor.sh:
#!/bin/bash
echo "Compiling VS1053 diagnostic..."
pio run
echo "Uploading to ESP8266..."
pio run -t upload
echo "Starting serial monitor..."
pio device monitor
Сделать исполняемым:
chmod +x upload_and_monitor.sh
./upload_and_monitor.sh