Add UART multiplexer and INA226 monitoring
This commit is contained in:
49
README.md
49
README.md
@@ -6,18 +6,31 @@ watch-watch — вбудована система на ESP32-S3 для нагл
|
||||
- **Керування каналами живлення**: 5 незалежних ліній `EN` (GPIO 2, 4, 5, 18, 19), які можна увімкнути, вимкнути або перемкнути з коду чи CLI.
|
||||
- **Послідовний автотест**: у `app_main` реалізовано базову логіку — канали вмикаються по черзі з інтервалом 4 с, що дозволяє перевірити всі DC/DC.
|
||||
- **Світлодіодний індикатор стану**: п’ять WS2812 (GPIO 8) показують роботу каналів — активний канал підсвічується яскраво-зеленим, увімкнені/вимкнені відображаються зеленим/синім, помилки — червоним.
|
||||
- **Моніторинг навантаження**: датчики INA226 вимірюють напругу, струм та потужність кожного каналу, інформація потрапляє в лог і CLI.
|
||||
- **UART взаємодія з Raspberry Pi**: один UART через мультиплексор (A0/A1/A2) ділиться між п’ятьма Pi, дозволяючи надсилати службові повідомлення або обмінюватися даними.
|
||||
- **Нативний USB-CLI**: ESP32-S3 підключається до Raspberry Pi 5 по USB і стає CDC ACM пристроєм; командний інтерфейс дозволяє керувати каналами та дивитись стан у реальному часі.
|
||||
- **Модульна архітектура**: окремі компоненти `dcdc_controller` і `usb_cdc_cli` спрощують розширення (телеметрія, автоматизація, протоколи зв’язку).
|
||||
|
||||
## Структура проєкту
|
||||
```
|
||||
├── CMakeLists.txt
|
||||
├── Kconfig.projbuild # меню і параметри WATCH_WS2812_*
|
||||
├── README.md
|
||||
├── sdkconfig # збережені налаштування menuconfig
|
||||
├── dependencies.lock
|
||||
├── main
|
||||
│ ├── main.c // базова логіка, ініціалізація модулів
|
||||
│ ├── dcdc_controller.c/.h // API керування DC/DC каналами
|
||||
│ ├── usb_cdc_cli.c/.h // TinyUSB CLI для Raspberry Pi 5
|
||||
│ └── idf_component.yml // залежність на espressif/esp_tinyusb
|
||||
├── sdkconfig // конфігурація (опції TinyUSB увімкнені)
|
||||
└── README.md // цей файл
|
||||
│ ├── CMakeLists.txt
|
||||
│ ├── idf_component.yml # залежності: esp_tinyusb, led_strip
|
||||
│ ├── main.c # головний цикл, тестова логіка DC/DC
|
||||
│ ├── dcdc_controller.c/.h # керування GPIO EN
|
||||
│ ├── usb_cdc_cli.c/.h # CLI по USB CDC
|
||||
│ ├── ws2812_status.c/.h # індикація стану на WS2812
|
||||
│ ├── ina226_monitor.c/.h # вимірювання напруги/струму/потужності
|
||||
│ └── uart_mux.c/.h # UART взаємодія з 5 Raspberry Pi
|
||||
├── managed_components
|
||||
│ ├── espressif__esp_tinyusb # бібліотека TinyUSB від Espressif
|
||||
│ └── espressif__led_strip # драйвер керування WS2812 (RMT/SPI)
|
||||
└── .vscode / .devcontainer / .clangd # допоміжні файли середовища розробки
|
||||
```
|
||||
|
||||
## GPIO-призначення каналів
|
||||
@@ -39,6 +52,25 @@ watch-watch — вбудована система на ESP32-S3 для нагл
|
||||
- Колірні алгоритми можна кастомізувати у `main/ws2812_status.c`.
|
||||
- GPIO, кількість діодів та тактову частоту RMT можна змінити через `idf.py menuconfig` (розділ *Налаштування watch-watch*).
|
||||
|
||||
## Моніторинг живлення (INA226)
|
||||
- Один INA226 підключений до загальної шини живлення (I2C порт 0, GPIO 6/7; адреса налаштовується параметром `WATCH_INA226_ADDR`).
|
||||
- Модуль `ina226_monitor` вимірює сумарну напругу, струм і розраховує потужність — ці значення фіксуються в логах і використовуються для телеметрії.
|
||||
- Команда CLI `sense` показує поточні показники для всієї системи (канал не вказується, бо датчик один).
|
||||
- Конфігурація I2C, адреси, шунта та кроку струму знаходиться в `menuconfig → INA226 моніторинг`.
|
||||
|
||||
## UART взаємодія та heartbeat
|
||||
- Загальний UART (типово UART1, GPIO17/16) підключений до аналогового мультиплексора, лінії адреси `A0/A1/A2` (GPIO 9/10/11) вибирають одну з Raspberry Pi.
|
||||
- Модуль `uart_mux` серіалізує доступ до UART, надає API для `uart_mux_write/read` і періодично опитує UART на наявність heartbeat.
|
||||
- Після кожного вимірювання INA226 ESP32-S3 відправляє поточну телеметрію (`PWR <V> <I>`) до активної Raspberry Pi.
|
||||
- Якщо heartbeat від Pi не надходить протягом `CONFIG_WATCH_UART_HEARTBEAT_TIMEOUT_SEC` (за замовчуванням 60 с), відповідний канал живлення вимикається й знову вмикається для примусового перезапуску.
|
||||
- Команди CLI `uart send` / `uart read` дозволяють вручну надсилати/читати повідомлення, а в `app_main` можна реалізувати власні протоколи синхронізації.
|
||||
|
||||
## UART взаємодія з Raspberry Pi
|
||||
- Шина UART (типово UART1, TX=GPIO17, RX=GPIO16) підключена до аналогового мультиплексора з адресними лініями A0/A1/A2 (GPIO 9/10/11), що дозволяє вибирати одну з 5 Raspberry Pi.
|
||||
- Модуль `uart_mux` гарантує серійний доступ: перед операцією він виставляє двійковий код каналу на A0-A2 та блокує UART м’ютексом.
|
||||
- У `app_main` після вимірювань кожному Pi відправляється телеметрія (`CHx <V>V <I>mA`), а через CLI можна виконати `uart send <n> <msg>` або `uart read <n> [len]`.
|
||||
- Усі параметри (порт, швидкість, GPIO) доступні в `menuconfig → UART мультиплексор`.
|
||||
|
||||
## USB CDC CLI
|
||||
Після підключення ESP32-S3 до Raspberry Pi 5 з’являється USB-пристрій (CDC ACM). У CLI доступні команди:
|
||||
|
||||
@@ -49,6 +81,11 @@ watch-watch — вбудована система на ESP32-S3 для нагл
|
||||
| `enable <n>` | увімкнути канал `n` (0..4) |
|
||||
| `disable <n>` | вимкнути канал `n` |
|
||||
| `toggle <n>` | перемкнути канал `n` |
|
||||
| `sense` | виміряти загальну напругу/струм/потужність |
|
||||
| `uart send <n> <msg>` | надіслати повідомлення у Raspberry Pi `n` |
|
||||
| `uart read <n> [len]` | прочитати відповідь від Raspberry Pi `n` |
|
||||
| `uart send <n> <msg>` | відправити текст у Raspberry Pi №n |
|
||||
| `uart read <n> [len]` | прочитати дані з цільового Pi |
|
||||
|
||||
CLI з’являється після того, як Raspberry Pi встановить DTR (наприклад, через `screen`, `picocom` або власний скрипт).
|
||||
|
||||
|
||||
Reference in New Issue
Block a user