MyTetra Share
Делитесь знаниями!
Создание проекта PlatformIO
Время создания: 27.08.2025 23:11
Автор: alensav
Текстовые метки: platformio
Раздел: PLATFORMIO
Запись: alensav/MyTetra2/main/base/1756325484lzbe55wqa5/text.html на raw.githubusercontent.com

Создание проекта 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


Так же в этом разделе:
  • Platformio
  • Создание проекта PlatformIO
 
MyTetra Share v.0.67
Яндекс индекс цитирования