Skip to content

Repository files navigation

Stand With Ukraine Russian Warship

JAAM Fusion 5.x

Репозиторій містить файли прошивки JAAM Fusion (кодова назва нової версії) - прошивки для ESP32, що дозволяє за допомогою розміщених на мапі України адресних світлодіодів відображати такі типи інформації:

  • 🚨 Повітряні тривоги в реальному часі
  • 🌡️ Погода в регіонах України
  • ☢️ Радіаційне забруднення
  • ⚡ Стан електромережі
  • 🇺🇦 Візуальні зображення (прапор України та інші)
  • 💡 Режим настільної лампи

Крім цього, підтримується окремий OLED-дисплей, який відображає поточний час, погоду, радіацію, стан електромережі, глобальні сповіщення та сервісні повідомлення.

КУПИТИ ГОТОВУ МАПУ МОЖНА ТУТ

jaam3

📚 Ресурси проєкту

📖 Документація для розробників

  • CONTROLS_GUIDE.md - Детальний довідник з додавання нових UI контролів
  • WEB_ASSETS_README.md - Система компресії веб-ресурсів та кешування

🎯 Що нового в JAAM Fusion 5.x

🌟 Головна фішка: Кастомний маппінг LED

Революційна можливість налаштування будь-якої апаратної конфігурації світлодіодів!

  • Повна свобода конфігурації: Підтримка будь-якої кількості та розташування LED
  • Редактор карти LED: Зручний web-інтерфейс для прив'язки LED до регіонів
  • Гнучкість: Від простої стрічки до складних матричних конфігурацій
  • Збереження конфігурації: Маппінг зберігається в пам'яті та відновлюється після перезавантаження
  • Підтримка різних форматів: Можливість використання різних типів LED (WS2812B тощо) в одному проєкті

Тепер ви не обмежені стандартними конфігураціями - створюйте власні унікальні карти!

Архітектурні покращення

  • Модульна структура коду: Кожен компонент системи винесено в окремий клас
  • Асинхронна обробка: Використання ArduinoAsync та FreeRTOS для ефективної багатозадачності
  • Оптимізація пам'яті: Покращене управління heap memory та дефрагментація
  • WebSocket протокол: Real-time оновлення через власний сервер jaam.net.ua

Підтримка нового обладнання

  • ESP32-S3 - повна підтримка з оптимізацією під 4MB Flash
  • ESP32-C3 - підтримка компактних плат
  • Матричні LED конфігурації - підтримка до 400 LED для великих карт
  • DFPlayer PRO - відтворення високоякісних аудіофайлів (замість buzzer мелодій)

Web-інтерфейс

  • GZIP компресія assets - зменшення розміру веб-файлів на 73.7%
  • Real-time API через WebSocket - швидкий обмін даними з клієнтами
  • Динамічне стиснення JSON/HTML - економія трафіку та RAM
  • ETag кешування - мінімізація повторних завантажень статичних ресурсів
  • Редактор карти та кольорів - зручне налаштування LED

Розширена функціональність

  • Нові типи анімацій:

    • Fade (згасання)
    • Blink (блимання)
    • Blend Fade (плавний перехід)
    • Pulse (пульсація)
    • One Way Blend Fade (плавний перехід в одному напрямку)
  • Покращена підтримка сенсорів:

    • BME280 (температура, вологість, тиск)
    • BMP280 (температура, тиск)
    • SHT2x, SHT3x, AHT30 (температура та вологість)
    • BH1750 (цифровий сенсор освітлення)
  • Flexible Display Support:

    • SSD1306 (128x32, 128x64)
    • SH1106G (128x64)
    • SH1107 (128x64)
    • Підтримка обертання дисплею (0°, 90°, 180°, 270°)

Система оновлень

  • OTA Updates - оновлення "по повітрю" через веб-інтерфейс
  • Канали розповсюдження: Production (стабільні) та Beta (експериментальні)
  • Firmware validation - перевірка цілісності прошивки перед встановленням

🛠️ Апаратні платформи

JAAM 2.1 - Текстолітова плата у формі мапи України

Фронтальна частина:

  • 124 LED WS2812B-2020: Підсвічування областей України (м. Київ - окремий LED)
  • OLED дисплей (SH1106G, 1.3"): Час, температура, інформація
  • 5 сервісних LED: Індикація стану системи (живлення, WiFi, дані, API, оновлення)
  • Сенсор освітлення (BH1750): Автоматичне регулювання яскравості
  • Динамік (buzzer): Звукові сповіщення з апаратним вимикачем

Задня частина:

  • 44 LED ambient light: Ефектна підсвітка
  • Сенсор клімату (BME280): Температура, вологість, тиск
  • ESP32: Центр керування
  • Мікрофон (ICS-43432): Резерв на майбутнє, з апаратним вимикачем
  • Дві кнопки: Управління режимами, перезавантаження, перепрошивка
  • Виводи ESP32: Для розширення функціоналу

Живлення:

  • USB-C (живлення та прошивка)
  • DC (5.5×2.1mm, 5–24В)

JAAM 3.2 - Нове покоління

Найсучасніша конфігурація з розширеними можливостями:

  • 405 LED WS2812B (найбільша конфігурація)
  • Матрична розкладка для максимальної детальної візуалізації
  • 39 LED для фонової підсвітки
  • Підтримка складних анімацій
  • 🎯 Підтримка тривог за районами та містами (де це підтримує офіційне API)
    • Детальне відображення тривог на рівні районів
    • Інші міста: підтримка додається в міру розширення офіційного API
    • Автоматичне оновлення підтримки нових міст з новими версіями прошивки

💻 Програмне забезпечення

Основні технології

  • Platform: ESP32 (Espressif32 @ 6.12.0)
  • Framework: Arduino
  • Async Processing: ArduinoAsync для non-blocking операцій
  • WebSocket: Real-time комунікація з сервером
  • LED Control: Adafruit NeoPixel
  • NTP: Синхронізація часу
  • Display: U8g2 для OLED дисплеїв

Режими роботи мапи

1. Режим тривог

Відображення повітряних тривог на базі офіційного API ukrainealarm.com та сторонніх інтеграцій

Офіційне API:

  • Стандартна тривога (червоний)
  • Загроза крилатих та авіаційних ракет (фіолетовий)
  • Загроза ударних БПЛА (помаранчевий)

e-Tryvoga:

  • Загроза крилатих та авіаційних ракет (фіолетовий)
  • Загроза ударних БПЛА (помаранчевий)
  • Загроза КАБ (жовтий)
  • Загроза балістичних ракет (блакитний)
  • Вибухи в регіонах (білий спалах)
  • Розвідувальні БПЛА (синій спалах)

Спеціальні функції:

  • Виділення домашнього регіону
  • Підсвічування нових тривог (інший колір перші N секунд)
  • Підсвічування відбою тривоги (інший колір перші N секунд)

2. Режим погоди

Відображення температури за даними OpenWeatherMap

  • Кольорова індикація температури
  • Підтримка різних температурних шкал

3. Режим прапора України

Відображення синьо-жовтого прапора України

4. Режим настільної лампи

  • Довільні кольори для всіх регіонів
  • Підтримка кастомних палітр
  • Color picker в web-інтерфейсі

5. Offline режим

Мапа не відображає нічого (LED вимкнені)

Режими дисплею

Годинник

  • Великий чіткий час
  • Дата
  • Синхронізація через NTP
  • Підтримка різних часових поясів

Погода

  • Температура у домашньому регіоні
  • Дані з OpenWeatherMap
  • Автоматичне оновлення

Технічна інформація

  • Uptime пристрою
  • Використання пам'яті
  • Сила WiFi сигналу
  • Статус WebSocket з'єднання
  • Температура CPU

Мікроклімат (при наявності датчика)

  • Температура в кімнаті
  • Вологість
  • Атмосферний тиск (для BME280)

🌐 Web-інтерфейс

Доступ до пристрою:

  • За IP адресою: http://<IP_ADDRESS>
  • За mDNS: Кожен пристрій має індивідуальне mDNS ім'я для автоматичного виявлення в локальній мережі

Можливості web-інтерфейсу:

Налаштування мапи:

  • Режим роботи (тривоги, погода, прапор, лампа)
  • Яскравість (загальна, денна, нічна, автоматична)
  • Кольори для різних типів тривог
  • Яскравість для кожного типу тривоги окремо
  • Домашній регіон
  • Налаштування анімацій

Налаштування дисплею:

  • Режим відображення
  • Тип дисплею (SSD1306, SH1106G, SH1107)
  • Роздільність (128x32 або 128x64)
  • Обертання екрану

Налаштування LED:

  • Піни підключення (main, background, service)
  • Кількість LED в кожній стрічці
  • Формат кольорів (RGB, GRB, RGBW тощо)
  • 🌟 Візуальний редактор карти - революційний функціонал кастомного маппінгу:
    • Інтерактивне призначення кожного LED до регіону
    • Підтримка множинного вибору LED для одного регіону
    • Візуальний попередній перегляд конфігурації
    • Збереження та відновлення налаштувань
    • Підходить для будь-якої апаратної конфігурації (від 1 до 400 LED)
  • Редактор фонових кольорів з попереднім переглядом

Налаштування сенсорів:

  • Тип кліматичного сенсора (BME280, SHT2x, SHT3x, AHTxx)
  • Тип сенсора освітлення (BH1750)
  • Калібрування

Налаштування звуку:

  • Buzzer або DFPlayer PRO
  • Мелодії для подій (тривога, відбій, хвилина мовчання)
  • Гучність
  • Годинні сповіщення

Налаштування кнопок:

  • Призначення дій на кожну кнопку
  • Коротке/довге натискання
  • Доступні дії:
    • Перемикання режиму мапи
    • Перемикання режиму дисплею
    • Увімкнення/вимкнення мапи
    • Увімкнення/вимкнення дисплею
    • Нічний режим
    • Перезавантаження (лише довге натискання)

Інтеграція Home Assistant:

  • Доступна HACS інтеграція (див. розділ "Інтеграція з Home Assistant")
  • Керування всіма функціями через HA
  • Сенсори, перемикачі, кнопки та інше

Налаштування оновлень:

  • Канал оновлень (Production/Beta)
  • Перевірка наявності оновлень
  • Оновлення одним кліком
  • Відображення версії прошивки

Системна інформація:

  • Serial консоль в браузері
  • Діагностична інформація
  • Статистика пам'яті
  • Логи роботи

🎵 Звукові можливості

Buzzer (пасивний)

Підтримка мелодій:

  • Гімн України
  • Ой у лузі червона калина
  • Козацький марш
  • Harry Potter Theme
  • Сирена
  • Star Trek Communicator
  • Star Wars Theme
  • Imperial March
  • Star Trek Intro
  • Indiana Jones Theme
  • Back to the Future
  • Kiss - I Was Made For Lovin' You
  • The Little Mermaid
  • Nokia Tune
  • Pac-Man
  • Щедрик
  • X-Men Theme
  • The Avengers

DFPlayer PRO (новинка!)

  • Відтворення MP3 файлів
  • Регулювання гучності (0-30)
  • Підтримка SD карток
  • Висока якість звуку
  • Можливість завантаження власних треків

Події зі звуковим супроводом:

  • Початок тривоги
  • Відбій тривоги
  • Натискання кнопок
  • Годинні сповіщення
  • Хвилина мовчання
  • Стартове привітання

🔧 Налаштування та кастомізація

Яскравість

  • Фіксована: Одне значення для всієї доби
  • За часом: Автоматичне перемикання день/ніч за розкладом
  • За сенсором: Автоматичне перемикання за освітленням в кімнаті
  • Ручна: Натисканням на кнопку

Кольори та яскравість тривог

Окреме налаштування для кожного типу:

  • Стандартна тривога
  • Нова тривога (перші N секунд)
  • Відбій тривоги (перші N секунд)
  • Загроза крилатих та авіаційних ракет
  • Загроза ударних БПЛА
  • Розвідувальні БПЛА
  • Загроза КАБ
  • Загроза балістичних ракет
  • Вибухи
  • Домашній регіон

LED конфігурації та кастомний маппінг

🌟 Революційна можливість: Тепер ви можете створити мапу з будь-якою конфігурацією LED!

Приклади стандартних конфігурацій:

  • JAAM 1.3: 26 LED (Київ окремо)
  • JAAM 2.1: 26 LED (класична)
  • JAAM 3.2: 405 LED (матрична, з підтримкою районів та міст)
  • Ваша власна: від 1 до 400 LED

Як працює кастомний маппінг:

  1. Підключіть LED стрічку будь-якої довжини
  2. Відкрийте візуальний редактор в web-інтерфейсі
  3. Призначте кожен LED (або групу LED) до регіону України
  4. Збережіть конфігурацію - вона зберігається в пам'яті
  5. Насолоджуйтесь унікальною картою!

Переваги кастомного маппінгу:

  • Створення мапи з нестандартною кількістю LED
  • Призначення декількох LED одному регіону (для акцентування)
  • Підтримка матричних конфігурацій будь-якої форми
  • Можливість пропуску регіонів (якщо не потрібні)
  • Адаптація під вашу фізичну конструкцію мапи

Фонова підсвітка:

  • Режим "домашній регіон" - копіює колір та анімацію
  • Режим "кастомний колір" - фіксований колір
  • Режим "карта кольорів" - індивідуальні кольори для кожного LED

Сервісні LED (для плат JAAM)

Індикація стану системи:

  • 🔴 Живлення - Червоний: пристрій працює
  • 🔵 WiFi - Синій: підключено до WiFi
  • 🟢 Дані - Зелений: отримання даних з серверу
  • 🟡 API - Жовтий: HA підключено
  • ⚪ Оновлення - Білий: доступне оновлення прошивки

🏠 Інтеграція з Home Assistant

JAAM Fusion повністю інтегрується в Home Assistant через спеціальну HACS інтеграцію.

Встановлення інтеграції

  1. Установіть HACS (якщо ще не встановлено) - hacs.xyz
  2. Додати репозиторій інтеграції:
    • Відкрийте HACS в Home Assistant
    • Перейдіть до "Інтеграції" (Integrations)
    • Натисніть на "🔵 Custom repositories"
    • Додайте: https://github.com/J-A-A-M/jaam_ha
    • Категорія: "Integration"
  3. Завантажте інтеграцію:
    • Знайдіть "JAAM" в HACS
    • Натисніть "Download"
  4. Перезавантажте Home Assistant
  5. Додайте інтеграцію:
    • Налаштування → Пристрої та служби → Інтеграції
    • Натисніть "+ Додати інтеграцію"
    • Знайдіть та оберіть "JAAM"
    • Вкажіть IP-адресу вашого JAAM пристрою

Посилання на інтеграцію: github.com/J-A-A-M/jaam_ha

Доступні сутності:

Select (Вибір):

  • Режим мапи (тривоги, погода, прапор, лампа, offline)
  • Домашній регіон (вибір з усіх областей та районів України через сервіс HA)

Light (Освітлення - для режиму лампи):

  • Колір лампи (RGB picker)
  • Яскравість лампи (0-100%)

Sensor (Сенсори):

  • Системна інформація:

    • Температура CPU (°C)
    • Uptime пристрою
    • WiFi uptime
    • Сила WiFi сигналу (dBm)
    • Використання пам'яті (bytes)
    • Статус WebSocket підключення
    • WebSocket uptime
  • Інформація про тривоги:

    • Прапорці тривоги в домашньому регіоні
    • Температура в домашньому регіоні (з OpenWeatherMap)
  • Сенсори (якщо підключені):

    • Кліматичні дані (температура, вологість, тиск з BME280/SHT3x/інших)
    • Рівень освітлення (з BH1750 або фоторезистора)

Update (Оновлення):

  • Версія прошивки (поточна та доступна)
  • Можливість оновлення через HA одним кліком

Примітка: Інтеграція підключається через WebSocket API на порту 81. Всі налаштування яскравості, дисплею, кнопок та інші параметри доступні через веб-інтерфейс пристрою (за IP адресою або mDNS ім'ям).


📦 Збірка та встановлення

Вимоги

  • PlatformIO (CLI або VS Code extension)
  • Python 3.x (для скриптів компресії)

Збірка прошивки

# Клонування репозиторію
git clone https://github.com/J-A-A-M/jaam_fusion.git
cd jaam_fusion

# Збірка для стандартної плати
platformio run -e firmware

# Збірка для ESP32-S3
platformio run -e firmware_esp32s3

# Збірка для ESP32-C3
platformio run -e firmware_esp32c3

# Збірка та завантаження
platformio run -e firmware --target upload

# Моніторинг Serial
platformio device monitor

Environments

firmware - Стандартна ESP32 firmware_esp32s3 - ESP32-S3 firmware_esp32c3 - ESP32-C3

Компресія веб-ресурсів

Веб-ресурси автоматично стискаються перед збіркою завдяки tools/compress_assets.py:

  • Скрипт запускається автоматично при збірці
  • Генерує src/web_assets.h з стиснутими даними
  • Зменшення розміру на 73.7%

Детальніше: WEB_ASSETS_README.md


🔌 Схеми підключення

Основні піни (за замовчуванням для JAAM)

// LED стрічки
#define MAIN_LED_PIN      13    // Основна стрічка (мапа)
#define BG_LED_PIN        12    // Фонова підсвітка
#define SERVICE_LED_PIN   25    // Сервісні LED

// Кнопки
#define BUTTON_1_PIN      5     // Кнопка 1 (JAAM 3)
#define BUTTON_2_PIN      0     // Кнопка 2
#define BUTTON_3_PIN      2     // Кнопка 3

// Звук
#define BUZZER_PIN        33    // Buzzer
#define DF_RX_PIN         17    // DFPlayer RX
#define DF_TX_PIN         16    // DFPlayer TX

Підключення дисплею (I2C)

  • VCC → 3.3V
  • GND → GND
  • SDA → GPIO 21
  • SCL → GPIO 22

Підключення сенсорів

BME280/BMP280 (I2C):

  • VCC → 3.3V
  • GND → GND
  • SDA → GPIO 21
  • SCL → GPIO 22

BH1750 (I2C):

  • VCC → 3.3V
  • GND → GND
  • SDA → GPIO 21
  • SCL → GPIO 22

🐛 Налагодження

Serial Monitor

platformio device monitor -b 115200

Telnet (для environment telnet)

telnet <MDNS_NAME>
# або
telnet <IP_ADDRESS>

📝 Налаштування збереження

Всі налаштування зберігаються у внутрішній флеш-пам'яті ESP32 (Preferences/NVS):

  • Відновлюються після перезавантаження
  • Зберігаються після перепрошивки

🔄 Оновлення прошивки

Через веб-інтерфейс (OTA)

  1. Відкрийте веб-інтерфейс
  2. Перейдіть в розділ "Оновлення прошивки"
  3. Оберіть канал (Production/Beta)
  4. Оберіть версію зі списку
  5. Натисніть "Підтвердити" для початку оновлення

Через USB

platformio run -e firmware --target upload

Через FLASHER

  1. Відкрийте браузер Chrome/Edge
  2. Перейдіть на https://flasher.jaam.net.ua/
  3. Підключіть ESP32 через USB
  4. Оберіть версію та встановіть

📊 Технічні характеристики

Системні вимоги

  • MCU: ESP32 (240MHz dual-core)
  • Flash: 4MB мінімум
  • RAM: 520KB (heap 200KB+)
  • WiFi: 2.4GHz 802.11 b/g/n

Споживання енергії

  • JAAM 1.3/2.1: ~2-5W (залежно від яскравості)
  • JAAM 3.2: ~3-10W (залежно від яскравості)

Підтримувані LED

  • WS2812B
  • WS2812B-2020 (компактна версія)
  • Інші сумісні з протоколом NeoPixel

🎨 Структура проєкту

jaam_fusion/
├── platformio.ini           # Конфігурація PlatformIO
├── custom_4MB.csv          # Partition table для ESP32-S3
├── README.md               # Цей файл
├── WEB_ASSETS_README.md    # Документація компресії веб-ресурсів
├── CONTROLS_GUIDE.md       # Довідник з додавання UI контролів
├── data/                   # Дані для генерації карт
│   ├── gen_data.py
│   ├── gen_data.json
│   └── ...
├── src/                    # Вихідний код прошивки
│   ├── JaamFusion.cpp      # Головний файл
│   ├── JaamConfig.h        # Конфігурація
│   ├── JaamAnimation.*     # Система анімацій
│   ├── JaamApi.*           # WebSocket API
│   ├── JaamBattery.*       # Моніторинг батареї
│   ├── JaamButton.*        # Обробка кнопок
│   ├── JaamClimateSensor.* # Кліматичні сенсори
│   ├── JaamDisplay.*       # Керування дисплеєм
│   ├── JaamFirmwareUpdate.*# OTA оновлення
│   ├── JaamHardware.*      # Апаратні конфігурації
│   ├── JaamLed.*           # Керування LED
│   ├── JaamLightSensor.*   # Сенсор освітлення
│   ├── JaamLogs.*          # Система логування
│   ├── JaamMDNS.*          # mDNS сервіс
│   ├── JaamSettings.*      # Налаштування
│   ├── JaamSiren.*         # Сирена
│   ├── JaamSound.*         # Звукова система
│   ├── JaamStorage.*       # Збереження даних
│   ├── JaamUtils.h         # Утиліти
│   ├── JaamWeb.*           # Web-сервер
│   └── web_assets.h        # Згенеровані веб-ресурси
├── tools/
│   └── compress_assets.py  # Скрипт компресії
└── web/                    # Вихідні веб-ресурси
    ├── styles.css
    ├── scripts.js
    ├── map_editor.*
    ├── bg_color_editor.*
    └── ui_schema_*.json

🤝 Внесок у проєкт

Ми вітаємо вклад від спільноти!

Як допомогти:

  1. 🐛 Повідомляйте про баги через Issues
  2. 🔧 Створюйте Pull Request з виправленнями
  3. 📖 Покращуйте документацію
  4. 🎨 Створюйте нові анімації та режими

📜 Ліцензія

Цей проєкт ліцензовано під CC BY-NC-SA 4.0 (Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International).

Це означає:

✅ Дозволено:

  • Вільно використовувати, модифікувати та розповсюджувати код
  • Для особистого, навчального та некомерційного використання
  • Створювати власні версії та покращення
  • Ділитися з іншими

❌ Заборонено:

  • Комерційне використання без письмового дозволу
  • Продаж пристроїв з цією прошивкою
  • Надання платних послуг на основі прошивки
  • Використання в комерційних продуктах

📋 Вимоги:

  • При використанні необхідно зазначити авторство
  • Модифікації мають бути під тією ж ліцензією (CC BY-NC-SA 4.0)
  • Зберігати посилання на оригінальний проєкт

Для комерційного використання

Якщо ви хочете використовувати JAAM Fusion в комерційних цілях (виробництво та продаж пристроїв, надання платних послуг тощо), будь ласка, зв'яжіться з нами:

Повний текст ліцензії: https://creativecommons.org/licenses/by-nc-sa/4.0/

Див. також файл LICENSE в кореневій директорії проєкту.


💙💛 Підтримка України

Цей проєкт створено в підтримку України. Якщо ви хочете допомогти:


🙏 Подяки

Дякуємо всім контриб'юторам, тестувальникам та користувачам проєкту JAAM за підтримку та допомогу в розвитку!

Особлива подяка:

  • Спільноті JAAM Project
  • Розробникам використовуваних бібліотек
  • Всім, хто підтримує проєкт

Stand With Ukraine

Слава Україні! 🇺🇦