# Подключение TFT-экрана ST7735

## Основная схема (esp32dev)

```
     ESP32                    ST7735
  ┌───────────┐             ┌─────────────┐
  │       3V3 ├─────────────┤ VCC         │
  │       GND ├─────────────┤ GND         │
  │     GPIO5 ├─────────────┤ CS          │
  │     GPIO2 ├─────────────┤ DC          │
  │    GPIO18 ├─────────────┤ SCK         │
  │    GPIO23 ├─────────────┤ MOSI (SDA)  │
  │           │             │ RST         │ ← не подключается, см. ниже
  └───────────┘             └─────────────┘
```

## Таблица пинов (esp32dev)

| ST7735 | ESP32 (esp32dev) | Назначение |
|--------|--------------------|------------|
| VCC    | 3.3V               | Питание |
| GND    | GND                | Общий провод |
| CS     | GPIO5              | SPI Chip Select |
| DC     | GPIO2              | Data/Command — см. [THEORY.md](THEORY.md#2-spi--лишний-провод-dc-как-чип-понимает-команда-это-или-данные) |
| SCK    | GPIO18             | SPI Clock (аппаратный) |
| MOSI   | GPIO23             | SPI Master Out / Slave In (аппаратный) |
| RST    | не подключён       | Программный сброс, см. ниже |
| MISO   | не используется    | ST7735 в этой библиотеке только принимает данные |

Пины `TFT_CS`/`TFT_DC`/`TFT_RST` определяются автоматически в зависимости от
целевой платы через `#if defined(...)` в
[tft_display.h:13-33](include/tft_display.h#L13-L33) — их не нужно менять
руками при смене платы в `platformio.ini`.

## Почему RST не подключён

Многие модули ST7735 не подключают контакт RST к отдельному пину, а
задают `TFT_RST = -1` — это указывает библиотеке `Adafruit_ST7735`
использовать программный сброс (команда по самой SPI-линии) вместо
физического импульса на отдельном проводе. Экран инициализируется чуть
дольше, но это экономит один GPIO — разумный компромисс для проектов, где
пинов не хватает.

## Пины для других плат

| Плата | Окружение PlatformIO | CS | DC | RST |
|-------|------------------------|----|----|-----|
| ESP32 DevKit (esp32dev) | `esp32dev` | GPIO5 | GPIO2 | −1 (программный) |
| ESP32-C6-DevKitC-1 | `esp32c6` | GPIO18 | GPIO19 | −1 (программный) |
| ESP32-S3 (LoRaWAN-хаб Ebyte EoRa-HUB-900TB) | `eora_hub_s3` | GPIO10 | GPIO9 | −1 (программный) |
| ESP8266 NodeMCU | `esp8266` | GPIO15 (D8) | GPIO2 (D4) | −1 (программный) |

Во всех случаях SCK/MOSI используют стандартный аппаратный SPI платы —
отдельно их задавать не нужно.

## Типичные проблемы

| Симптом | Причина | Решение |
|---------|---------|---------|
| Экран остаётся белым/пустым после `begin()` | Перепутаны CS/DC | Сверить с таблицей выше для своей платы |
| Цвета инвертированы или "не те" | Неверный вариант инициализации панели | В [tft_display.cpp:8](src/tft_display.cpp#L8) уже стоит `INITR_BLACKTAB` — стандарт для большинства модулей; если цвета всё равно неверны, попробуйте `INITR_GREENTAB` |
| Изображение обрезано / смещено | Неверный поворот | `Display.begin(rotation)` — попробуйте значения 0-3 |
| Плата esp32c6 не собирается | Известный баг фреймворка (`Serial`/`USBSerial`), не связан с экраном | См. `COMPONENT_STANDARD.md`, использовать esp32dev/esp32-s3 |
