Перейти до змісту

Архітектура проєкту

Огляд архітектури JAAM Fusion 5.x.

Загальна структура

JAAM Fusion побудований на модульній архітектурі, де кожен компонент відповідає за певну функціональність.

graph TD
    A[JaamFusion Main] --> B[JaamHardware]
    A --> C[JaamWeb]
    A --> D[JaamApi]
    A --> E[JaamDisplay]

    B --> F[JaamLed]
    B --> G[JaamSensor]
    B --> H[JaamButton]

    C --> I[WebServer]
    C --> J[WebSocket]

    D --> K[HTTP Client]
    D --> L[Data Parser]

    E --> M[OLED]
    E --> N[Animations]

Основні модулі

JaamHardware

Управління апаратними компонентами: - LED стрічка - OLED дисплей - Сенсори (BME280, BH1750) - Кнопки

JaamWeb

Веб-інтерфейс та API: - AsyncWebServer - WebSocket сервер - REST API endpoints - Статичні файли

JaamApi

Інтеграція з зовнішніми API: - JAAM Server WebSocket - Alerts API - Weather API - NTP синхронізація

JaamDisplay

Відображення даних: - OLED інтерфейс - LED анімації - Індикація станів

JaamConfig

Управління налаштуваннями: - Читання/запис EEPROM - JSON конфігурація - Валідація параметрів

Файлова структура

src/
├── JaamFusion.cpp          # Main entry point
├── JaamHardware.cpp/h      # Hardware abstraction
├── JaamLed.cpp/h          # LED control
├── JaamDisplay.cpp/h       # OLED display
├── JaamWeb.cpp/h          # Web server
├── JaamApi.cpp/h          # API client
├── JaamConfig.cpp/h        # Configuration
├── JaamStorage.cpp/h       # EEPROM/SPIFFS
├── JaamButton.cpp/h        # Button handler
├── JaamSensor.cpp/h        # Sensors
└── JaamUtils.h            # Utilities

Потоки виконання (FreeRTOS Tasks)

Main Task

  • Ініціалізація системи
  • Головний цикл обробки

WebServer Task

  • Обробка HTTP запитів
  • WebSocket connections

API Task

  • Отримання даних з API
  • Парсинг та кешування

Display Task

  • Оновлення OLED
  • LED анімації

Управління пам'яттю

Flash Memory (4MB)

  • Program: ~1.5MB
  • SPIFFS: ~1MB (web assets)
  • OTA: ~1.5MB (для оновлень)

RAM (520KB)

  • Heap: ~200KB вільно
  • Stack: ~50KB
  • Static: ~100KB

EEPROM (512 bytes)

  • Налаштування WiFi
  • LED маппінг
  • Користувацькі параметри

Життєвий цикл

sequenceDiagram
    participant Boot
    participant Init
    participant WiFi
    participant WebServer
    participant API
    participant Display

    Boot->>Init: Power On
    Init->>WiFi: Connect
    WiFi->>WebServer: Start Server
    WebServer->>API: Initialize
    API->>Display: Update
    Display->>Display: Main Loop

Патерни проєктування

Singleton

Використовується для глобальних компонентів (Config, Hardware).

Observer

Events для сповіщень між модулями.

Factory

Створення різних типів анімацій та режимів.

Залежності

Основні бібліотеки

  • Arduino Core for ESP32
  • AsyncTCP
  • ESPAsyncWebServer
  • ArduinoJson
  • Adafruit_GFX / U8g2 (для OLED)
  • FastLED / NeoPixelBus (для LED)

Опціональні

  • BME280 (сенсор)
  • BH1750 (сенсор)
  • ESP32Ping (network diagnostics)

Конфігурація збірки

Дивіться platformio.ini для деталей.

Для розробників