Initial TableWatch implementation

This commit is contained in:
2026-01-18 21:33:13 +02:00
commit 15c84487ec
20 changed files with 1261 additions and 0 deletions

101
README.md Normal file
View File

@@ -0,0 +1,101 @@
# ElinkInformer / TableWatch
Epaper інформер на ESP32S3 (WeActStudio 2.9" tricolor). Показує час великими цифрами, WiFi, батарею, погоду та дані з Notion. Є веб‑інтерфейс для керування інтервалами, а також оновлення прошивки через браузер.
## Функції
- великий годинник у стилі flipcard
- статус‑бар: WiFi, батарея, погода, час
- таблиця Notion (5 записів) з полями `Name` + `Data/Date`
- чергування екранів (час/Notion) з налаштовуваними інтервалами
- WiFi portal налаштування (SSID `ElinkInformer-Setup`)
- веб‑інтерфейс з Bootstrapтемою (mDNS `tablewatch.local`)
- оновлення прошивки через web upload
## Обладнання
- ESP32S3 (board: `esp32-s3-zero` у PlatformIO)
- WeActStudio 2.9" EPaper (GxEPD2_290_C90c)
## Піни дисплея
У `src/config.h`:
- `PIN_BUSY = 6`
- `PIN_RST = 7`
- `PIN_DC = 8`
- `PIN_CS = 9`
- `PIN_SCK = 10`
- `PIN_MOSI = 11`
## Батарея / ADC
Налаштування в `src/config.h`:
- `kBatteryAdcPin` (за замовчуванням `A0`)
- `kBatteryAdcRefMv` (3300 мВ)
- `kBatteryDividerNum`/`kBatteryDividerDen` (коефіцієнт подільника)
- `kBatteryMvMin`/`kBatteryMvMax` (межі 0100%)
Калібруйте `kBatteryMvMin`/`kBatteryMvMax` під вашу батарею.
## Погода
- Джерело: OpenMeteo (`kWeatherUrl`)
- Відображення: `Дніпро +3C дощ` (українські назви)
## Notion
- Використовується Notion API для читання бази.
- Потрібні поля в базі:
- `Name` (title)
- `Data` або `Date` або `Дата` (date)
- ID бази береться з URL (параметр `v` не потрібен).
- Токен інтеграції збережений у `kNotionToken`.
**Важливо:** інтеграцію потрібно додати до доступу бази (Share → додати інтеграцію).
## Веб‑інтерфейс
Доступ за адресою `http://tablewatch.local/` (mDNS) або IP.
Можна налаштувати:
- час показу екрана годинника
- час показу екрана Notion
- інтервал мережевої синхронізації
Кнопки:
- Оновлення прошивки (завантаження `.bin`)
- Перезавантаження
## Оновлення прошивки (Web)
Використовуйте файл `.bin` після збірки:
```bash
pio run
```
Файл з’явиться у `.pio/build/esp32-s3-devkitm-1/firmware.bin`.
## Збірка та прошивка (USB)
```bash
pio run
pio run -t upload
```
## Налаштування WiFi
Після старту пристрій піднімає portal:
- SSID: `ElinkInformer-Setup`
- Відкрити `192.168.4.1`
## Налаштування інтервалів
Параметри зберігаються в RTC:
- `gClockScreenSec` — екран часу
- `gTableScreenSec` — екран Notion
- `gNetSyncSec` — мережевий синх
Дефолти в `src/config.h`:
- `kDefaultClockScreenSec`
- `kDefaultTableScreenSec`
- `kDefaultNetSyncSec`
## Структура проєкту
- `src/config.h` — всі константи/налаштування
- `src/app_state.*` — стан та RTC змінні
- `src/display.*` — рендеринг дисплея
- `src/network.*` — WiFi, NTP, погода, Notion
- `src/web.*` — веб‑інтерфейс та OTAupload через web
- `src/hardware.*` — ADC/батарея
- `src/main.cpp` — ініціалізація та головний цикл
## Безпека
Токен Notion збережений у прошивці у відкритому вигляді. Для продакшна бажано використовувати проксі/сервер або секрети поза прошивкою.