🇷🇺 Русская версия · 🇬🇧 English
WiFi-мост для дозиметра ATOMTEX БДКГ-05 на ESP32-S3 с USB OTG Host.
Подключается к прибору по USB (Modbus RTU поверх USB-serial, эмулированный FTDI), опрашивает МЭД, ЦПС, накопленную дозу и температуру раз в секунду и показывает live-график в браузере — без приложения, без Home Assistant (опционально — через 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 — по желанию, на свой брокер).
/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, синий акцент).
Плата публикует снимок показаний раз в 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)
# 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
# Показания появятся автоматически| Эндпоинт | Метод | Что делает |
|---|---|---|
/ |
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 стек.