Skip to content

VibeEngineering-LLC/atomtex-esp32

Repository files navigation

ATOMTEX БДКГ-05 → ESP32-S3 → Web UI / MQTT

🇷🇺 Русская версия · 🇬🇧 English

WiFi-мост для дозиметра ATOMTEX БДКГ-05 на ESP32-S3 с USB OTG Host.

Подключается к прибору по USB (Modbus RTU поверх USB-serial, эмулированный FTDI), опрашивает МЭД, ЦПС, накопленную дозу и температуру раз в секунду и показывает live-график в браузере — без приложения, без Home Assistant (опционально — через MQTT), без облака.

ESP32-S3 ESP-IDF USB Protocol MQTT

ATOMTEX БДКГ-05 ─USB (Modbus RTU)─► ESP32-S3 ─Web UI /bdkg─► браузер
                                        │
                                        ├─► MQTT + HA discovery (опц., выкл. по умолчанию)
                                        │
                                        └─► CSV-лог на flash (LittleFS), скачивание кнопкой

⚠ Перед использованием

Прошивка при каждом USB-подключении прибора сама посылает штатную «инициализацию режима дозиметра» — документированную производителем последовательность Modbus-команд (health-poll готовности → запись регистра режима → включение двух coil'ов запуска замера). Это не выход за рамки протокола прибора, а обязательный шаг для получения показаний.

  • Кнопка «Сброс» на странице /bdkg повторяет эту инициализацию на приборе — накопленная доза и текущее усреднение на приборе обнуляются/перезапускаются. Нажимайте осознанно.
  • Прошивка/OTA затрагивает только плату ESP32, не сам прибор. Прерывание прошивки может потребовать повторной заливки платы через USB (UART-порт, не OTG).
  • MQTT/HA-публикация и запись CSV-лога на flash — по умолчанию выключены, включаются вручную на вкладке «Система».

Отказ от ответственности

Прошивка предоставляется «как есть», без каких-либо гарантий. Автор не несёт ответственности за любой прямой или косвенный ущерб: сброс накопленной дозы/показаний прибора, потерю данных, неработоспособность прибора или платы, иные последствия использования. Используя прошивку, вы принимаете эти условия и действуете на свой страх и риск.


Что это решает

Штатный сбор показаний БДКГ-05 требует прямого USB-подключения к компьютеру со специализированным ПО сборщика. Эта прошивка превращает копеечную ESP32-S3 в постоянный WiFi-мост:

  • прибор подключён к ESP через USB — маленькая плата рядом с прибором, ПК не нужен;
  • показания доступны в любом браузере по WiFi: МЭД (мкЗв/ч), ЦПС, температура, накопленная доза;
  • история 300 точек хранится на плате (кольцевой буфер) — после F5 график не пустеет и не дёргается, данные не зависят от браузера;
  • CSV-лог на flash (LittleFS) — Старт/Стоп записи, «Скачать сегодня» одной кнопкой;
  • MQTT + Home Assistant discovery — опционально, конфиг брокера задаётся в Web UI, retain-автообнаружение;
  • раздельный zoom по времени (X) и по значению (Y) на каждом из трёх графиков (колесо/Shift+колесо/drag/dblclick), переключаемое сглаживание (SMA) с настраиваемым окном;
  • местное время на плате (часовой пояс выбирается на вкладке «Система») — CSV и метки времени не в UTC.

Никаких облаков. Никаких аккаунтов. Всё работает в локальной сети (MQTT — по желанию, на свой брокер).

Что видно в Web UI

/bdkg — Мониторинг

  • Три live-графика: МЭД (мкЗв/ч), ЦПС, температура — обновление раз в секунду
  • Ось времени (X) с реальными метками HH:MM:SS, раздельный zoom X/Y на каждом графике
  • Переключаемое SMA-сглаживание с настраиваемым окном (2–120 с)
  • Индикатор записи (REC) и свободного места на flash — оба live
  • Кнопки Старт / Стоп записи CSV-лога, Сброс замера (с подтверждением)
  • Кнопка «Скачать сегодня» — CSV текущего дня одним кликом

/bdkg/system — Система

  • ESP32-S3: чип/flash/PSRAM/версия прошивки/uptime/heap
  • Flash (LittleFS): занято/свободно
  • WiFi: SSID/RSSI/IP, кнопка «Сбросить WiFi»
  • Прибор БДКГ-05: статус USB-подключения, статус записи лога
  • MQTT: адрес брокера, логин/пароль, включение публикации
  • Чекбоксы автозапуска: «Запускать замер при старте», «Стирать CSV-архив при старте»
  • Часовой пояс (список поясов РФ, POSIX-формат)
  • Кнопка перезагрузки платы

Цветовая палитра обеих страниц единая (GitHub-dark, синий акцент).

MQTT / Home Assistant

Плата публикует снимок показаний раз в 10 с в топик bdkg05/<id>/state (<id> — 6 hex-символов из STA MAC-адреса платы) и retain-конфиги Home Assistant discovery (homeassistant/...) при каждом подключении к брокеру. Конфиг брокера хранится только в NVS платы, задаётся в Web UI на вкладке «Система» — жёстко зашитого адреса нет, публикация по умолчанию выключена.

Протокол

БДКГ-05 общается по Modbus RTU поверх USB-serial (эмулированный USB-CDC, 19200 бод, 8N1, адрес прибора 1). Инициализация: health-poll готовности (FC 0x07) → запись регистра режима (FC 0x06) → включение двух coil'ов запуска (FC 0x05). Опрос — 7 регистров чтения раз в секунду (FC 0x04): температура, мгновенная скорость счёта, ЦПС с погрешностью, МЭД с погрешностью, накопленная доза.

Что нужно

Железо:

  • ESP32-S3-DevKitC-1 N16R8 (16 MB Flash, 8 MB PSRAM) — нужен именно S3 с USB OTG
  • USB-C OTG кабель — от ESP32-S3 (host) к прибору БДКГ-05 (device)
  • Дозиметр ATOMTEX БДКГ-05 (USB-порт)
  • USB-кабель для прошивки ESP (через UART-порт, не OTG)

Софт:

  • ESP-IDF v5.4 или Docker (espressif/idf:v5.4)

Быстрый старт (5 минут)

# 1. Клонировать
git clone https://github.com/VibeEngineering-LLC/atomtex-esp32.git
cd atomtex-esp32

# 2. Собрать (вариант A: локальный ESP-IDF)
idf.py set-target esp32s3
idf.py build

# 2. Собрать (вариант B: Docker, без установки ESP-IDF)
docker run --rm -v "$(pwd):/project" -w /project espressif/idf:v5.4 \
  bash -c ". /opt/esp/idf/export.sh && idf.py build"

# 3. Прошить (COM-порт подставить свой)
idf.py -p COM14 flash

# 4. Подключиться к WiFi
#    Плата поднимает AP captive portal → ввести SSID и пароль

# 5. Открыть в браузере
#    http://<IP-платы>/bdkg

# 6. Подключить прибор БДКГ-05 USB-C OTG кабелем к USB-порту ESP32-S3
#    Показания появятся автоматически

Web API

Эндпоинт Метод Что делает
/ GET 302-редирект на /bdkg
/healthcheck GET Health-пробa (для мониторинга/CI)
/bdkg GET Web UI — мониторинг
/bdkg/system GET Web UI — система
/api/csrf-token GET Выдать CSRF-токен (нужен в заголовке X-CSRF-Token на всех POST)
/api/bdkg GET Текущий снимок показаний + статус записи (JSON)
/api/bdkg/history GET История последних 300 точек с платы (JSON)
/api/bdkg/log/start / /stop POST Старт/стоп записи CSV-лога
/api/bdkg/reset POST Сброс замера (переинициализация прибора)
/api/bdkg/logs GET Список файлов CSV-лога
/api/bdkg/log?date= GET Скачать CSV-лог за дату
/api/bdkg/mqtt GET/POST Конфиг MQTT-публикации
/api/tz GET/POST Часовой пояс платы
/api/boot-config GET/POST Автозапуск записи / очистка flash при старте
/api/system GET Здоровье ESP32 (heap, uptime, flash, WiFi)
/api/wifi/reset POST Сбросить WiFi, перезагрузиться в режим настройки
/api/reboot-esp POST Перезагрузить ESP32

Все POST-эндпоинты требуют заголовок X-CSRF-Token, полученный из GET /api/csrf-token. Web UI делает это автоматически.

Безопасность и модель доверия

Мост рассчитан на доверенную локальную сеть (домашний WiFi) и не имеет аутентификации пользователя — кто угодно в той же сети может открыть Web UI и управлять записью/сбросом. Это осознанный выбор для домашнего прибора без облака и аккаунтов; не выставляйте плату напрямую в интернет.

Что защищено: CSRF-токен на всех мутирующих POST — сторонняя вкладка в браузере не может «вслепую» отправить сброс замера или сброс WiFi (same-origin policy).

Внешние обращения: SNTP-запросы к pool.ntp.org (синхронизация времени) и, если включено вручную, публикация на указанный оператором MQTT-брокер. Никаких других исходящих соединений в интернет нет.

Структура проекта

atomtex-esp32/
├── components/
│   ├── bdkg05/            протокол БДКГ-05 поверх Modbus (регистры, coil'ы, инициализация)
│   ├── bdkg_usb/          USB-CDC транспорт + 1 Гц poll-таск + кольцо истории (300 точек)
│   ├── bdkg_log/          CSV-лог на LittleFS (старт/стоп, ротация, HTTP-выдача)
│   ├── bdkg_mqtt/         MQTT-паблишер + Home Assistant discovery
│   └── modbus_rtu/        Modbus RTU кадры (FC 03/04/05/06/07, CRC-16)
├── main/
│   ├── main.c              точка входа, SNTP, часовой пояс
│   ├── boot_config.c       поведение при старте платы (NVS-флаги)
│   ├── tz_config.c         часовой пояс (NVS, POSIX-строка)
│   ├── wifi_manager.c      STA + AP captive portal
│   └── web_server.c        HTTP API + CSRF
├── web/
│   ├── bdkg.html            Web UI — мониторинг
│   ├── bdkg_system.html     Web UI — система
│   └── setup.html           captive portal (настройка WiFi)
├── partitions.csv
├── sdkconfig.defaults       конфиг ESP32-S3 USB OTG
├── CMakeLists.txt
├── LICENSE                  MIT
└── README.md                этот файл

Проект отпочковался от репозитория atomspectra-waterfall-esp32 (гамма-спектрометр KB Radar Atom Spectra), унаследовав только ESP32-S3/USB-OTG-host/WiFi-обвязку. Код спектрометра/водопада (USB-CDC-мост к FTDI, shproto, TCP-мост, спектрограмма и их Web UI) из этого репозитория физически удалён — здесь остался только код БДКГ-05.

Лицензия

MIT — см. LICENSE.

Кредиты

  • ATOMTEX (atomtex.com) — производитель дозиметра БДКГ-05.
  • Espressif — ESP-IDF и USB Host стек.

About

ATOMTEX БДКГ-05 dosimeter ↔ ESP32-S3 WiFi bridge — Web UI, CSV log, MQTT/HA discovery

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors