Improve watchdog monitoring and CLI
This commit is contained in:
38
README.md
38
README.md
@@ -4,8 +4,8 @@ watch-watch — вбудована система на ESP32-S3 для нагл
|
||||
|
||||
## Основні можливості
|
||||
- **Керування каналами живлення**: 5 незалежних ліній `EN` (GPIO 2, 4, 5, 18, 19), які можна увімкнути, вимкнути або перемкнути з коду чи CLI.
|
||||
- **Послідовний автотест**: у `app_main` реалізовано базову логіку — канали вмикаються по черзі з інтервалом 4 с, що дозволяє перевірити всі DC/DC.
|
||||
- **Світлодіодний індикатор стану**: п’ять WS2812 (GPIO 8) показують роботу каналів — активний канал підсвічується яскраво-зеленим, увімкнені/вимкнені відображаються зеленим/синім, помилки — червоним.
|
||||
- **Послідовний автотест**: у `app_main` реалізовано базову логіку — канали вмикаються по черзі з інтервалом 3 с, що дозволяє перевірити всі DC/DC без стрибків споживання.
|
||||
- **Світлодіодний індикатор стану**: п’ять WS2812 (GPIO 8) світяться зеленим під час стартової затримки, після чого кожен канал сигналізує лише про дві події — відсутність VPN (два червоних блимання) та падіння APP (три жовтих блимання).
|
||||
- **Моніторинг навантаження**: датчики INA226 вимірюють напругу, струм та потужність кожного каналу, інформація потрапляє в лог і CLI.
|
||||
- **UART взаємодія з Raspberry Pi**: один UART через мультиплексор (A0/A1/A2) ділиться між п’ятьма Pi, дозволяючи надсилати службові повідомлення або обмінюватися даними.
|
||||
- **Нативний USB-CLI**: ESP32-S3 підключається до Raspberry Pi 5 по USB і стає CDC ACM пристроєм; командний інтерфейс дозволяє керувати каналами та дивитись стан у реальному часі.
|
||||
@@ -47,12 +47,12 @@ watch-watch — вбудована система на ESP32-S3 для нагл
|
||||
|
||||
## Світлодіоди стану
|
||||
- IC WS2812 підключений до GPIO 8 (один ланцюг із 5 діодів).
|
||||
- Модуль `ws2812_status` показує одночасно три аспекти стану:
|
||||
- **Живлення**: якщо канал вимкнений, сегмент горить тьмяно-синім; увімкнений канал — зеленим/синім залежно від зв’язку.
|
||||
- **UART-зв’язок**: після кожного опитування Raspberry Pi канал, що відповів (`{"hb":2}`), стає зеленим; якщо відповідей не було, він переходить у синій. Таким чином можна одразу бачити, хто не відповідає.
|
||||
- **Активний канал / опитування**: канал, який зараз опитує watchdog або проходить тестовий цикл, підсвічується яскравішим тоном; поки триває читання UART, колір м’яко блимає, щоб показати активність, але не приховати власний статус.
|
||||
- За критичної помилки (наприклад, DCDC не ініціалізувався) всі індикатори стають червоними.
|
||||
- Колірні алгоритми можна кастомізувати у `main/ws2812_status.c`, там же знаходиться API `ws2812_status_set_ack_state()` для відображення acknowledge.
|
||||
- Після старту всі п’ять діодів світяться сталим зеленим протягом затримки `heartbeat_start_delay_sec`, щоб показати фазу ініціалізації.
|
||||
- Після завершення затримки вся стрічка гасне, а кожен канал індикує лише два типи подій:
|
||||
- VPN=0 — два червоних блимання по 200 мс із паузою між циклами;
|
||||
- APP=0 — три жовтих блимання по 200 мс.
|
||||
Якщо активні обидва попередження, вони програються послідовно (спочатку VPN, потім APP) із паузою 2 с між послідовностями.
|
||||
- При критичній помилці (наприклад, DCDC не ініціалізувався) всі індикатори залишаються червоними.
|
||||
- GPIO, кількість діодів та тактову частоту RMT можна змінити через `idf.py menuconfig` (розділ *Налаштування watch-watch*).
|
||||
|
||||
## Моніторинг живлення (INA226)
|
||||
@@ -87,11 +87,29 @@ watch-watch — вбудована система на ESP32-S3 для нагл
|
||||
| `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 |
|
||||
| `config show` | переглянути таймінги heartbeat/DCDC |
|
||||
| `config set …` | змінити та зберегти таймінги / моніторинг |
|
||||
| `reset` | м’яке перезавантаження ESP32-S3 |
|
||||
| `bootloader` | перезавантажити ESP32-S3 у ROM bootloader для `esptool.py` |
|
||||
|
||||
CLI з’являється після того, як Raspberry Pi встановить DTR (наприклад, через `screen`, `picocom` або власний скрипт).
|
||||
|
||||
### Керування таймінгами heartbeat
|
||||
Команда `config` дозволяє зберігати параметри роботи watchdog та циклу heartbeat у NVS, і вони одразу набувають чинності без перезбирання прошивки:
|
||||
|
||||
1. `hb_period` — інтервал (сек) між опитуваннями/heartbeat у головному циклі.
|
||||
2. `dcdc_off` — тривалість вимкнення каналу DCDC при автоматичному перезапуску (сек).
|
||||
3. `hb_start` — затримка перед стартом опитування після завантаження (сек); застосовується як у головному циклі, так і у watchdog-завданні.
|
||||
4. `hb_monitor` — значення `1` вмикає моніторинг heartbeat (за замовчуванням), `0` вимикає лише контроль/рестарти каналів, але тестові повідомлення heartbeat продовжують відправлятися.
|
||||
5. `hb_miss` — кількість послідовних запитів без відповіді перед автоматичним перезапуском каналу (за замовчуванням 3). Значення зберігає watchdog та використовується в CLI для відображення статистики пропусків/рестартів.
|
||||
|
||||
### Прошивка без натискання BOOT
|
||||
1. Під’єднайтесь до CLI та виконайте команду `bootloader`. ESP32-S3 перезавантажиться у ROM bootloader, а на хості з’явиться USB-пристрій `USB JTAG/serial`.
|
||||
2. На Raspberry Pi запустіть `esptool.py` або `idf.py flash` і вкажіть новий порт (`/dev/ttyACM*` або `/dev/cu.usbmodem*`). Наприклад:
|
||||
`esptool.py --chip esp32s3 --port /dev/ttyACM0 --before usb_reset --after no_reset write_flash 0x0 build/watch-watch.bin`
|
||||
3. Після завершення прошивки виконайте `esptool.py --after hard_reset reset` або просто перезавантажте живлення — пристрій вийде з bootloader і повернеться до нормальної роботи.
|
||||
Таким чином процедура оновлення доступна без натискання кнопки BOOT і може виконуватись безпосередньо з підключеної Raspberry Pi.
|
||||
|
||||
## Збірка та конфігурація
|
||||
1. Встановіть ESP-IDF v5.5.1 (шлях `IDF_PATH` має вказувати на `/Users/tarassivas/esp/v5.5.1/esp-idf`).
|
||||
2. Один раз виконайте `idf.py reconfigure`, щоб підвантажити залежності з `idf_component.yml`.
|
||||
|
||||
Reference in New Issue
Block a user