# Схема подключения и аппаратная конфигурация (Wiring & Power Guide)

Этот документ описывает аппаратную коммутацию проекта с адресными светодиодами на базе платы **ESP32-C6-DevKitC-1 v1**, включая внутреннюю разводку встроенного RGB-светодиода и правила безопасного подключения внешней адресной LED-ленты.

---

## 1. Внутренняя трассировка платы (On-Board LED Wiring)

На официальной плате ESP32-C6-DevKitC-1 v1 адресный светодиод **WS2812B** (RGB, корпус 5050) уже распаян производителем и подключён к внутренним шинам по следующей схеме:

```text
+----------------------------------+
|       ESP32-C6 Microcontroller   |
|                                  |
|   [GPIO8] ────────────────────┐  |
+-------------------------------│--+
                                │
                                ▼ (линия данных)
+----------------------------------+
|          WS2812B RGB LED         |
|                                  |
|   [DIN] ◄─────────────────────┘  |
|   [VDD] ◄──── +5V (от шины USB)  |
|   [GND] ◄──── GND (общая земля)  |
+----------------------------------+
```

### Аппаратные параметры линии

* **Пин управления**: `GPIO8` — выбран инженерами Espressif, так как этот пин поддерживает аппаратный вывод через периферию RMT/DMA.
* **Линия питания ($V_{DD}$)**: подключена к силовой шине **5V** после защитного диода Шоттки разъёма USB.
* **Порядок следования цветов в потоке**: **`GRB`** (Green, Red, Blue).

---

## 2. Схема подключения внешней адресной ленты (External LED Strip)

Так как класс `LedEffects` универсален, вы можете использовать тот же код для работы с длинными внешними лентами (WS2812B, WS2811, SK6812). Для этого выберите свободный GPIO (например, `GPIO5`) и выполните подключение по следующей схеме.

### 🚨 Критически важное правило

**Никогда не питайте длинную LED-ленту (более 10–15 диодов) напрямую от пина 5V платы ESP32!** Встроенный стабилизатор или диод Шоттки на плате сгорят от перегрузки по току. Используйте внешний блок питания 5В.

### 📐 Принципиальная схема подключения

```text
+---------------------------+
|  Блок питания 5В (внешний) |
|                            |
|  (+5V) ─────────────────┐  |
|  (GND) ───────────┐     │  |
+-------------------│-----│--+
                    │     │
+-------------------│-----│---------+
|     ESP32-C6 DevKitC-1  │   │     |
|                      │      │     |
|  [GND] ◄─────────────┘      │     |
|                             │     |
|  [GPIO5] ──[ R: 330 Ом ]────┼──┐  │     |
+-----------------------------+  │  │     |
                                 ▼  ▼  ▼
                       +---------------------+
                       |    Адресная лента    |
                       |    (WS2812B / 5V)    |
                       |                       |
                       |  [DIN]  [GND]  [+5V] |
                       +---------------------+
```

### Компоненты схемы

1. **Токоограничительный резистор ($R = 330\ \text{Ом}$, допустимый диапазон 220–470 Ом)**.
   Ставится в разрыв сигнальной линии между пином `GPIO5` и входом ленты `DIN`, **максимально близко к самому GPIO на плате ESP32-C6**, а не у начала ленты. Такое расположение защищает именно выходной каскад микроконтроллера от наводок и обратных импульсов из длинного соединительного кабеля — а это приоритетная задача для диагностического стенда, где плата дороже одного пикселя ленты. Резистор одновременно сглаживает фронты сигнала RMT и ограничивает бросок тока в первый светодиод при включении питания, так что отдельного второго резистора у самой ленты не требуется.
2. **Общая земля (Common GND)**: земля (`GND`) внешнего блока питания **обязательно** должна быть физически соединена с землёй (`GND`) платы ESP32-C6. Без общего провода заземления сигнальный уровень `GPIO5` относительно ленты будет хаотично "плавать", и вместо эффектов лента будет хаотично мигать белым цветом.
3. **Сглаживающий конденсатор ($C = 100\text{–}1000\ \text{мкФ},\ 6.3\text{В}+$)**: подключается параллельно линиям $+5\text{В}$ и $GND$ непосредственно у начала LED-ленты. Компенсирует резкие броски тока при одновременном зажигании множества светодиодов, предотвращая мерцание первого пикселя и срабатывание защиты Brownout на ESP32-C6.

---

## 3. Расчёт бюджета мощности (Power Budget)

* **Один кристалл** (Красный, Зелёный или Синий) на максимальной яркости потребляет ~**20 мА**.
* **Чистый белый цвет** (все три кристалла на яркость 255) одного светодиода потребляет ~**60 мА**.
* **Встроенный светодиод платы**: в коде установлено программное ограничение `FastLED.setBrightness(30)`. При такой настройке ток диода не превышает **5–7 мА** — безопасно для питания от любого USB-порта компьютера через Native USB.

### Расчёт для внешней ленты (например, 100 диодов)

$$I_{max} = 100 \times 60\ \text{мА} = 6000\ \text{мА} = 6\ \text{А}$$

Для тестирования такой ленты потребуется внешний блок питания 5В мощностью не менее **30 Вт** ($5\text{В} \times 6\text{А}$).

---

## 4. Проблема согласования логических уровней (3.3V vs 5V)

* Рабочее напряжение логики ядра ESP32-C6 — **3.3В**. На выходе `GPIO5` логическая единица равна 3.3В.
* Напряжение питания WS2812B — **5.0В**. Минимальное напряжение для распознавания логической единицы на входе `DIN`:

$$V_{IH\_min} = 0.7 \times V_{DD} = 0.7 \times 5.0\text{В} = 3.5\ \text{В}$$

### Почему встроенный диод работает без сдвига уровней?

На плате DevKit трасса от процессора до диода — несколько миллиметров, а напряжение шины USB под нагрузкой обычно проседает до 4.7–4.8В. При таком падении $V_{IH\_min}$ опускается до ~3.3В, и сигналы ESP32-C6 распознаются стабильно.

### Что делать, если внешняя лента "глючит"?

Если при подключении длинной ленты цвета искажаются или эффекты застывают, значит уровень 3.3В не дотягивает до порога ленты. В этом случае в разрыв сигнальной линии (вместо резистора) нужно установить маломощный быстродействующий преобразователь логических уровней (level shifter), например **74AHCT125** или **74HCT245**, который поднимет сигнал `GPIO5` с 3.3В до полноценных 5.0В.

---

## 5. Связь с программной частью

Резистор, общий GND и (при необходимости) level shifter из этого документа — необходимое, но не единственное условие стабильной работы. Корректность тайминга RMT и целостность буфера кадра на стороне кода обеспечивает класс `LedEffects` (см. `README.md` и `THEORY.md`, раздел 1 и 3): если аппаратная часть собрана по этой схеме, а лента всё равно мигает рывками или мерцает только частично — первым делом проверьте версию класса `LedEffects` (актуальная версия использует `fill_solid()` для всех светодиодов во всех эффектах, а не только для первого пикселя — см. `THEORY.md`, раздел 2.4).