# 🛰️ FIRMWARE

Профессиональный монорепозиторий для разработки встраиваемых систем (Embedded) на базе микроконтроллеров семейства **ESP32 (V1, S3, C6)**. Проект построен на принципах модульности, неблокирующей архитектуры и централизованного управления кэшем.

---

## 📁 Структура репозитория

*   **`Components/`** — Библиотека изолированных драйверов (C++ классы). Каждый компонент автономен, имеет свою документацию и тестовый стенд по правилам из [`COMPONENT_STANDARD.md`](COMPONENT_STANDARD.md).
*   **`Projects/`** — Сложные системы, собирающие логику из нескольких компонентов (например, охранные системы, метеостанции).
*   **`.pio_global_cache/`** — Глобальное хранилище скомпилированных бинарников (ядер и библиотек), обеспечивающее мгновенную сборку всех модулей.

---

## 🚀 Технологический стек (2026)

- **Core:** Arduino Core 3.x+ (через форк [pioarduino](https://github.com/pioarduino)).
- **Hardware:** ESP32 DevKit V1, ESP32-S3, ESP32-C6.
- **Architecture:** OOP (Object Oriented Programming), State Machines, Dependency Injection.
- **Timing:** Precise Microsecond Timing (для IMU и аудио).
- **Interface:** PlatformIO CLI.

---

## 🛠 Список готовых компонентов

| Модуль | Описание | Статус |
| :--- | :--- | :--- |
| **MPU6050** | Инерциальный модуль (Pitch/Roll) с комплементарным фильтром. | ✅ Pro |
| **GPS NEO 6/7/8** | Приём и разбор NMEA 0183, checksum, статус спутников/fix, watchdog связи. | ✅ Pro |

---

## 📥 Быстрый старт (CLI Mode)

Для работы с любым модулем используйте терминал. Это экономит до 40% ресурсов вашего компьютера по сравнению с GUI.

1.  **Клонируйте репозиторий:**
    ```bash
    git clone <url_репозитория>
    cd SensorHub
    ```

2.  **Перейдите в папку нужного компонента:**
    ```bash
    cd Components/mpu6050
    ```

3.  **Прошейте плату и запустите монитор:**
    ```bash
    pio run -t upload && pio device monitor
    ```
    *Для S3/C6 PlatformIO автоматически подтянет нужные флаги CDC.*

---

## 🏗 Стандарт компонента и добавление нового

Архитектура кода, требования к драйверу (вотчдог связи, обработка ошибок шины, дисциплина приоритетов FreeRTOS) и два допустимых формата документации (A — «Триада + презентация», B — «Код-первый гид») зафиксированы в одном файле: **[`COMPONENT_STANDARD.md`](COMPONENT_STANDARD.md)**. Это единственный источник правды — не дублируй эти правила в других файлах.

Чтобы добавить новый компонент, используй [`NEW_COMPONENT_PROMPT.md`](../content/NEW_COMPONENT_PROMPT.md) как стартовый промт для новой сессии.

Чтобы собрать новый проект в `Projects/` из уже готовых компонентов, используй
[`NEW_PROJECT_PROMPT.md`](../content/NEW_PROJECT_PROMPT.md) — он явно запрещает
переделывать сами компоненты в рамках работы над проектом.

Некоторые компоненты включают Python-визуализаторы/мониторы в `tools/` (например,
[`HMMD-mmWave/tools/radar_view.py`](Sensors/Movement/HMMD-mmWave/tools/radar_view.py) или
[`PIR_sensor_AM312/tools/timeline_view.py`](Sensors/Movement/AM312/tools/timeline_view.py)) —
как настроить для них виртуальное окружение (классический `venv` или `uv`) описано в
[`PYTHON_TOOLS.md`](PYTHON_TOOLS.md).

> ⚠️ Метка «✅ Pro» в таблице выше — статус готовности, а не гарантия отсутствия багов (см. `COMPONENT_STANDARD.md`).

---

## ⚡ Оптимизация сборки

В проекте настроено **общее дерево сборки**. Все `platformio.ini` ссылаются на `build_cache_dir = ../../.pio_global_cache`. 
- **Результат:** Ядро Arduino компилируется 1 раз, а не 30. Экономия места на SSD — до 5 ГБ. Скорость повторной сборки — менее 3 секунд.

---

