Начало работы с PipCore

Установка компонента, конфигурация модулей и быстрый запуск первого приложения.

1. Установка

Вариант 1 - из реестра компонентов. В папке приложения:

idf.py add-dependency "pisppus/PipCore^2.0.0"

Компонент-менеджер сам скачает ядро и его зависимости (например, joltwallet/littlefs) при первой сборке - вручную ничего ставить не нужно.

Вариант 2 - как локальный компонент. Скопируйте (или подключите сабмодулем) папку PipCore/ в проект и добавьте её в поиск компонентов в корневом CMakeLists.txt:

set(EXTRA_COMPONENT_DIRS "${CMAKE_CURRENT_LIST_DIR}/PipCore")

Затем подключите компонент в приложении как обычно:

idf_component_register(SRCS "main.cpp" REQUIRES PipCore)

2. Конфигурация (Kconfig)

Все опции находятся в меню PipCore:

idf.py menuconfig   →   PipCore

По умолчанию все модули выключены: ядро собирается «headless» - только Platform (время, GPIO, память) и Log.

Опция Описание По умолчанию
PIPCORE_DISPLAY Драйвер панели: None / ST7789 / ST7796 / ILI9488 None
PIPCORE_ENABLE_GRAPHICS Sprite-графика (RGB565) on, если выбран драйвер дисплея
PIPCORE_ENABLE_TOUCH Ёмкостный тач семейства FT6x36 off
PIPCORE_ENABLE_AUDIO 16-голосный PAC-микшер + I²S-выход off
PIPCORE_AUDIO_TASK_STACK Стек таска микшера, байт (1024…32768) 4096
PIPCORE_AUDIO_TASK_PRIO Приоритет таска микшера (1…25) 5
PIPCORE_AUDIO_TASK_CORE Ядро CPU для микшера (0/1). На одноядерных чипах игнорируется 0
PIPCORE_ENABLE_WIFI WiFi STA (событийная модель) off
PIPCORE_ENABLE_OTA OTA-сервис (манифест + Ed25519 + SHA-256). off (требует WiFi)
PIPCORE_OTA_PROJECT_URL Базовый URL сервера обновлений ""
PIPCORE_OTA_HTTP_TIMEOUT_MS Таймаут HTTP-запросов OTA (500…30000). 2000
PIPCORE_ENABLE_PREFS Настройки в NVS off
PIPCORE_ENABLE_STORAGE Файловое хранилище LittleFS off
PIPCORE_STORAGE_PARTITION_LABEL Метка раздела LittleFS "storage"
PIPCORE_LOG_LEVEL Стартовый уровень логов (0…5, см. Log) 2 (Info)
PIPCORE_ENABLE_DEBUG Трекер аллокаций + профайлер off
PIPCORE_DEBUG_CONSOLE Отладочная консоль для PipCore Inspector. off (требует Debug)
PIPCORE_DEBUG_CONSOLE_ACCEPT_RISK Подтверждение риска неаутентифицированного доступа off
PIPCORE_DEBUG_CONSOLE_STACK Стек таска консоли, байт (1024…32768) 4096
PIPCORE_DEBUG_TRANSPORT Транспорт консоли: USB-Serial/JTAG / UART0 USB-Serial/JTAG
Пины и параметры шин

Kconfig не задаёт их. Они передаются в рантайме структурами DisplayConfig, TouchConfig, SoundConfig, net::WifiConfig.

Транспорт консоли

USB-Serial/JTAG доступен на ESP32 S и C серий; оригинальный ESP32 и ESP32-S2 требуют UART0.

Макросы для условной компиляции

Все опции доступны в коде как макросы 0/1, поэтому их можно использовать в #if:

#if PIPCORE_ENABLE_TOUCH
    // код, который нужен только со включённым тачем
#endif
Макрос Значение
PIPCORE_VERSION Версия ядра ("2.0.0")
PIPCORE_TARGET_ESP32 / PIPCORE_TARGET_DESKTOP Целевая платформа: прошивка или симулятор (ровно один из двух равен 1)
PIPCORE_ENABLE_GRAPHICS, _TOUCH, _AUDIO, _WIFI, _OTA, _PREFS, _STORAGE, _DEBUG Включён ли соответствующий модуль
PIPCORE_DEBUG_CONSOLE Включена ли отладочная консоль
PIPCORE_OTA_PROJECT_URL Базовый URL OTA (строковый литерал)

3. Быстрый старт

Минимальная программа: экран + заливка цветом. Нужен PIPCORE_DISPLAY в menuconfig.

#include <PipCore.hpp>

using namespace pipcore;

extern "C" void app_main()
{
    Platform *plat = GetPlatform();

    // 1. Описываем дисплей: пины, разрешение, частоту SPI.
    DisplayConfig cfg = {};
    cfg.mosi   = 6;
    cfg.sclk   = 5;
    cfg.cs     = 7;
    cfg.dc     = 8;
    cfg.rst    = -1;          // -1: пин reset не подключён
    cfg.width  = 320;
    cfg.height = 480;
    cfg.hz     = 80'000'000;  // 80 МГц
    cfg.order  = 1;           // BGR-порядок каналов (типично для ST7796)
    cfg.invert = true;

    // 2. Конфигурируем и запускаем. Обе функции возвращают true при успехе.
    if (!plat->configDisplay(cfg) || !plat->beginDisplay(0))
    {
        log::error("display: %s", plat->lastErrorText());
        return;
    }

    // 3. Рисуем.
    plat->display()->fillScreen565(Sprite::color565(0, 8, 16));
}