Эволюция Диагностики Аккумуляторов Makita: От Arduino OBI к Веб-интерфейсу на ESP32
- Цена: 2.25$
- Перейти в магазин
Каждый, кто работает с профессиональным инструментом Makita, знает, что их аккумуляторы — это не просто «банки» с энергией. Внутри скрывается сложная система управления (BMS), которая хранит массу полезной информации: от количества циклов заряда до напряжения на каждой ячейке. Однако получить эти данные без специального оборудования невозможно. Несколько лет назад сообщество энтузиастов подарило нам проект OBI (Open Battery Interface) — решение на базе Arduino и Python, которое впервые позволило заглянуть «под капот» этих батарей.https://github.com/mnh-jansson/open-battery-information. Это был настоящий прорыв, который послужил отправной точкой и для моего проекта. Но, как и у любой технологии, у него были свои ограничения. Я поставил перед собой цель создать более современное, удобное и полностью автономное устройство. Эта статья — история его разработки.
Disclaimer
Весь проект и данная статья были созданы целеком и полностью с помошью различных текстовых ИИ в основном это Gemini в Google AI studio и ChatGPT все в бесплатных вариантах. Я не являюсь программистом ни в каком виде и весь написанный код для меня выглядит как абракадабра, я понимаю только как оно должно работать алгоритмически, но я не знаю ни С++, ни Pyton или любой другой язык который был использован в данном проекте. Поэтому я не подскажу ничего по синтаксису кода который был сгенерирован и отлажен с помощью большого количесва вопросов и ответов ИИ.В сети я не нашел ни одного источника который бы поделился аналогичных проектом под esp32 хотя есть видео где похожие девайсы пытаются продавать.
Мой проект делался по фану для удовлетворения собственного любопытства.


Глава 1. Анализ протокола: Как общаются аккумуляторы Makita
Прежде чем что-то создавать, нужно было досконально разобраться в том, как работал оригинальный проект OBI. Вся магия скрыта в протоколе обмена данными.
Физически связь с BMS аккумулятора происходит по одному проводу (протокол, похожий на 1-Wire). Но самое интересное — это команды, которые нужно отправлять.
Существует два основных типа контроллеров в батареях Makita, и для них используются разные наборы команд:
- «Стандартные» контроллеры (STANDARD): Встречаются в большинстве аккумуляторов.
- Контроллеры типа «F0513»: Более редкий и капризный тип.
Протокол обмена состоит из двух основных команд-префиксов:
— префикс для большинства «обычных» команд (чтение динамических данных, модели и т.д.).0xCC
— префикс для «сервисных» команд и чтения статического блока данных.0x33
Например, чтобы получить статические данные (циклы, дату производства), нужно было отправить команду
0x33 AA 00 и прочитать в ответ 40 байт. А чтобы получить напряжения на ячейках, нужно было отправить 0xCC D7 00 00 FF и прочитать 29 байт. Сервисные функции, вроде теста LED, требовали двухшаговой последовательности: сначала команда входа в тестовый режим (0x33 D9 96 A5), а затем — команда самого действия.Особой головной болью стал контроллер F0513. В отличие от стандартного, который отдает все напряжения по одной команде, этот требовал отдельного запроса для каждой из пяти ячеек (команды
0xCC 31, 0xCC 32 и т.д.). Это был первый важный нюанс, который предстояло учесть.Глава 2. Аппаратная реализация: Переход на ESP32 и битва за 5 Вольт
Оригинальный OBI был связкой Arduino и ПК. Это было неудобно. Я решил, что современное устройство должно быть автономным, с Wi-Fi и веб-интерфейсом. Выбор пал на ESP32 — мощный микроконтроллер со встроенным Wi-Fi, идеальный для такой задачи.
И тут я столкнулся с главной аппаратной проблемой: пин
Enable на BMS аккумулятора требует для «пробуждения» уверенные +5 Вольт, в то время как логика ESP32 работает на 3.3 Вольтах.Прямое подключение приводило к нестабильной работе: батарея просыпалась через раз. Напряжения 3.3В было недостаточно. Решением стал простой, но надежный NPN-транзисторный ключ.

Принцип работы гениален в своей простоте: ESP32 своим низковольтным сигналом управляет транзистором, который, в свою очередь, коммутирует 5-вольтовую линию. Когда ESP32 подает
LOW (0В), транзистор закрывается, и подтягивающий резистор надежно подает +5В на пин Enable. Когда ESP32 подает HIGH (3.3В), транзистор открывается и притягивает Enable к земле.+5V
|
[ R_pullup: 4.7 кОм ]
|
|---------------------> Пин "Enable" на BMS
|
| C (Коллектор)
[Транзистор 2SD882]
| B (База)
|
[ R_base: 1 кОм ]
|
Пин ESP32 (GPIO) ------------- (Управляющий сигнал 0V / 3.3V)
|
E (Эмиттер)
|
GNDДаже после этого старые модели аккумуляторов отказывались просыпаться. Оказалось, что «силы» подтяжки стандартного резистора в 10 кОм было недостаточно. Путем экспериментов было найдено оптимальное значение — 4.7 кОм, которое обеспечивало достаточный ток для гарантированной активации даже самых «упрямых» батарей.
Глава 3. Программная реализация: От C++ до JavaScript
Вся логика была инкапсулирована в класс
MakitaBMS на C++. Главной задачей было точно воспроизвести тайминги и последовательности команд.Основной код (
):MakitaBMS.cpp
Ключевым моментом стало управление питанием. В отличие от стандартных батарей, которые можно было «разбудить» один раз на всю сессию чтения, капризные F0513 требовали полного цикла выключения-включения питания перед каждой командой. Это было реализовано в функции
readDynamicData, где для F0513 используется специальная лямбда-функция, оборачивающая каждый запрос в цикл управления питанием.Парсинг данных — это отдельная история. Ответ от BMS приходит в виде массива байт, которые нужно правильно интерпретировать. Например, количество циклов заряда хранится в 34-м и 35-м байтах, причем в перевернутом виде и с инвертированными нибблами (полубайтами). Для этого была написана вспомогательная функция
nibble_swap.Бэкенд и веб-сервер (
):main.cpp
В качестве «сердца» устройства выступает
ESPAsyncWebServer. Он запускает веб-сервер и точку доступа Wi-Fi при первом включении. Для мгновенного обмена данными между ESP32 и браузером используется WebSocket.Процесс выглядит так:
- Браузер (клиент) отправляет JSON-сообщение, например:
.{"command": "read_static"} - ESP32 в обработчике
принимает это сообщение.onWebSocketEvent - Вызывает соответствующий метод класса
(например,MakitaBMS
).bms.readStaticData() - Полученные данные упаковываются в структуру
, а затем сериализуются в ответный JSON.BatteryData - Ответ отправляется обратно всем подключенным клиентам.
Фронтенд (
):app.js
Это мозг веб-интерфейса. Он написан на чистом JavaScript без фреймворков. При загрузке страницы он устанавливает WebSocket-соединение с ESP32 и ждет сообщений.
Самая интересная часть — функция
renderCells, отвечающая за визуализацию батареи. Она не просто рисует 5 прямоугольников, а делает это с учетом реальной сборки:- С помощью CSS каждая вторая ячейка «переворачивается», чтобы имитировать последовательное соединение.
- Цвет каждой ячейки рассчитывается динамически. Напряжение ячейки нормализуется в диапазон от 0 до 1 (где 2.8В=0, 4.2В=1), а затем это значение используется для вычисления оттенка в цветовой модели HSL, создавая плавный градиент от красного к зеленому.
- Если разница напряжений превышает 0.1В, самая разряженная ячейка помечается как «разбалансированная» и выделяется пунктирной рамкой.
- Для расчета общего уровня заряда (SOC) используется нелинейная таблица соответствия напряжения процентам, что гораздо точнее простого деления.

Глава 4. Сравнение и преимущества
Что же мы получили в итоге по сравнению с оригинальным Arduino OBI?
- Полная автономность: Устройству не нужен компьютер, только питание по USB.
- Кроссплатформенность: Интерфейс работает в любом браузере на любом устройстве, будь то Android, iOS, Windows или Linux.
- Простота использования: Не нужно устанавливать Python, драйверы и библиотеки. Просто подключись к Wi-Fi и открой страницу.
- Наглядность: Современный, адаптивный интерфейс с графической визуализацией состояния ячеек и автоматическими предупреждениями гораздо информативнее простой таблицы.
- Мобильность: Диагностику можно проводить где угодно, хоть в мастерской, хоть «в поле».
Заключение
Этот проект — пример того, как на основе блестящей идеи сообщества можно создать современный, удобный и законченный продукт. Благодаря мощи ESP32 и гибкости веб-технологий удалось превратить сложный диагностический инструмент в простой и понятный гаджет, доступный каждому. Это не просто тестер, а настоящий «медицинский кардиомонитор» для ваших аккумуляторов, который поможет вовремя заметить проблему и продлить срок их службы.
Проект является полностью открытым, все исходные коды, схемы и инструкции доступны на GitHub: https://github.com/Belik1982/esp32-makita-bms-reader
| +195 |
2033
104
|
| +42 |
1945
68
|
| +40 |
1945
35
|
Идеальный вариант то интегрировать маленький литевый аккум с dc-dc до 5В ими и запитывать esp32 ну и платку зарядки для этого аккума на той же tp4056 или любой другой. И тогда будет полная автономность.
На стройплощадке некогда с батареями разбираться — не работает одна, берем другую запасную.
В мастерской электричества нет? Блэкаут? Тут уж не до диагностики батарей.
у меня пару лет назад на районе меняли провода на столбах. неделями в рабочее время был блэкаут.
Диагностика проведена :D
Можно слегка изменить способ выработки сигнала Enable, применив активный способ формирования высокого уровня. Т.е. не подтяжкой резистором к +5 в, а открытым транзистором или оптроном. Это гарантирует уверенное включение контроллера батареи.
А может и стандартного конвертера 3.3 — 5 вольт на полевике хватит. Эти блочки есть готовые на али за небольшие деньги.
Но… В LICENSE у Вас пусто. А одного упоминания MIT недостаточно.
А с учётом того, что ИИ надёргал всего из самых разных источников с неизвестной лицензией, то и проверить чистоту очень сложно.
на которых вполне можно сделать автономную в схожем конструктиве. ну и запитать тоже от самой батареи.
хотя… тогда и esp, от которой нужен wifi, становится не нужна.
ali.click/s7z1oz
Может знает кто?
Т.е. вопрос вот в чем, LTX китайские Макита поддерживают или нет OBI?
Есть проприетарный протокол Makita для своих батарей. Китайские клоны (скорее всего) поддерживают лишь ту часть протокола, которая необходима для зарядки их батарей в оригинальных зарядных устройствах от Макиты.
@kdekaluga призывается в комменты.
Нам, разумеется, блокировать ничего не надо, но проверять состояние банок и их дисбаланс надо именно во время зарядки. И сообщать об этом пользователю, любым наглядным способом.
Для каких именно?
Вот именно! Потому что imax без бубна и прямых рук к батарее Макита не подключить. Это в обычной жизни никому не надо.
Тоже самое и с обозреваемым устройством. Какой его сценарий использования? Зарядить батарею в обычной зарядке, а потом не забыть подключить этот девайс и проверить все ли ок? Кто этим будет заниматься из обычных пользователей?
Другое дело, если бы зарядка сигнализировала, что «ваша батарея подустала, разбалансировалась» и т.п.
Пора денежку на новую откладывать или эту ремонтировать.
Да, это было бы здорово. Но для этого надо, прежде всего, начать заряжать оригинальные батареи на самодельном з/у. А, значит, сделать его таким, чтобы оно не вызывало дополнительных блокировок батарей в обычной работе. А вот после этого добавлять туда уже сервисные функции.
Но это же большие исследования — например, вы уверены, что батарея будет правильно отвечать на команды непосредственно в процессе зарядки? Может быть, зарядку на это время надо будет выключать. И таких вопросов достаточно много.
диагностика и ремонт(разблокировка) оригинальных аккумуляторов
далась вам эта батарея макита. как нефиг делать аймакс подключается к любой батарее, но два провода для этого нужно и два магнита для всяких 18650. но вот чтобы запустить процесс нужно выставить кучу параметров. а это в повседневной жизни и не нужно, и максимально неудобно, запарно, и быстро надоедает.
разблокировать батарею и посмотреть заодно что не понравилось контроллеру
Лично мне в данном устройстве не функции разблокировки интересны, а отражение информации о «здоровье» батареи. Что как раз просится в состав продвинутого зарядного устройства.
Надеюсь с этим рано и позже тоже разберутся…
Но я согласен, что такой тестер батарей должен иметь свой экран и не быть зависимым от ПК/смартфона.
Не уверен. Например, Мартин, автор OBI, который и выполнил основную работу по реверс-инжинирингу прошивки макитовской батареи не поддерживает создание полноценных самодельных зарядных устройств для оригинальных батарей Макиты из-за авторского права. А других желающих я особо не вижу :)
При этом, для совместимых батарей это всё не нужно, так как, скорее всего, ни одна из них не поддерживает никаких команд, кроме CC, F0, 00, которая передается в момент начала зарядки.
Нравится? А ведь именно так устроен современных мир зарядок для батарей. Чего-то там заливаем в батарею. Сколько залили — хз. Стухла ли батарея или еще жива — хз.
Например древняя LiitoKala: Lii-PD4 успешно показывает влитую энергию и напругу на аккумуляторе 18650. Можно хотя бы оценить его емкость и процент износа. А где подобные решения для батарей? Из коробки, а не в виде разномастной кучи гаджетов.
ЗЫ Чего вы к «разблокировке» привязались, а? Абсолютно бесполезная функция, как по мне. Если BMS заблокирована, то уже сожжен программно управляемый предохранитель внутри батареи. И «удобная» кнопочка в модном, современном интерфейсе уже ничем не поможет. Надо BMS менять или предохранитель. И неизвестно что проще…
поймите простую вещь: каким бы навороченным ни был зарядник и как бы подробно он ни показывал сколько влилось в батарею и какой там процент износа, но макитовская батарея может внезапно заблокироваться и перестать работать. и часто ничего там не пережигается, тупо программная блокировка.
продолжая аналогию с автомобилями: на заправке нам подробно показывают не только количество залитых литров, но даже скорость заполнения и октановое число. а потом мы хлопаем багажником слишком сильно, срабатывает коллижен свитч и бензонасос отключается, а машина перестает заводиться. и в этой ситуации нам не счётчик литров поможет, а диагностический сканер, который покажет что сработал этот самый коллижен свитч. ну или чисто по опыту мастер его сразу проверит и включит обратно. разблокирует.
пережигаемый предохранитель отлично меняется на капельку легкоплавкого припоя. и даже работает потом как настоящий — пережигается контроллером
Продолжая аналогию, надо не сканер из прошлого века, а иметь нормальное сервисное меню в машине на встроенном планшете, где можно увидеть и сбросить ошибки.
Зачем эти пляски с бубном, которые не спасут от следующей «внезапной» блокировки, если можно поменять BMS и получить в качестве бонуса пучок защит, которые отсутствуют в оригинале?
Сейчас жду BMS с али, буду поверять слова делом :)
тогда Вам и вся эта тема с разблокировщиком батарей должна быть в принципе не интересна, потому что оно работает только с оригиналом
Возвращаясь к зарядным для 18650. Я специально выбрал модель с ЖК дисплеем, хотя можно было купить зарядник в 3 раза дешевле с одним светодиодом.
Опять вы про разблокировку, хотя я уже написал, что этот функционал мне и даром не нужен.
Вообще-то сервисные меню обычно защищены от влезания ручками шаловливых пользователей.
За это обычно берется наценка в 100 или 200%, вам ли не знать? :)
Про то, что тема с разблокировщиком мне не интересна я уже сказал несколько раз.
Мне интересна продвинутая зарядка для батарей с диагностическими функциями.
community.platformio.org/t/esp32-c3-mini-can-t-connect-to-wifi-network/48562
У меня таких бракованных штук 5 уже. Даже скрипт написал для входного тестирования.
Есть версия Plus — там перенесли кварц и добавили RGB-LED. В данном проекте им можно быстро отобразить статус.
Но мне больше нравится ESP32 S3 super mini или C6 (для Zigbee). Цена немного выше, но значительно интереснее чип и стабильнее качество.
Отбраковка еcли долго не подключается или низкий RSSI. Было несколько штук, которые даже прошить не получилось. Проблема во внутреннем флеше или тактировании.
тоже попадались глючные. Помогает уменьшение усиления сигнала.
С виду макетка, отладочная плата, есть usb. Но ладиться на ней проблематично, т. к. usb программный и отваливается при перезагрузке.
При этом, она всё-таки макетка, в работу такое ставить как-то криво, для этого есть нормальные форматы типа таких
https://aliexpress.ru/item/1005006889503809.html
Что мне понравилось в S3 supermini так это подготовка к автономному использованию. Есть TP4054 для зарядки лития + не самы плохой LDO. В режиме сна потребление у меня получилось 0.2-0.3мА или около 2-3х месяцев на одной банке 18650 (но это не точно). Не самый выдающийся результат, но мне пока хватает.
Остальное не понял, извините )
Вы что, ставите макетные платы в автономное использование? Зачем? ))
Когда устройство пройдет проверку, то сделаю ему полноценную плату.
Но они почему-то пропали на ali
Для их прошивки полно приспособ типа таких https://aliexpress.ru/item/1005005314727580.html
Залили через этот усб.
Плата уходит в циклическую перезагрузку. Консоль подключается и тут же отваливается по кругу. Ничо не увидеть.
Как будете ладится?
это ж вы про «отладочную плату» писали, а не я.
Китайцы её так называют.
с тем, что озвучил я, проблем нет.
и чего только не придумаешь ради отмазки…
На основе этой платы тоже не так давно сделал мелкий анализатор/редактор батарей DJI — вывод данных на олед, 4 кнопки, меню, редактирование ключевых параметров — прям в формате брелочка.
Я собираю вводные в простом текстовом редакторе в одну простыню и скармливаю, ответы стоящие переношу туда же.
Ещё очень рекомендую попробовать github.com/open-webui/open-webui — у меня в него подключены Claude и ChatGPT, удобно переключаться (код пишет лучше первый, советы даёт — второй).
И да, лучше формулировать вопросы по-английски — корпус английских текстов для обучения на порядки больше чем на русском, соответственно модель «соображает» на нём сильно лучше.
Также следует учитывать, что не заблокированная/разблокированная оригинальная батарея может не заряжаться от оригинального же зарядного Makita по причине срабатывания 4-х выводного smd предохранителя на bms платы батареи. Например при подключении к BL1830 всякоразных трехвыводных цепных пил и секаторов с коллекторным мотором и тд. По информации с известного рессурса по разблокировке/ремонту батарей там предохранителей несколько
PS собирал на Ардуине по usb к компу на win10, один заблоченный bl1860 сбросил ( стоял на фонарике Макиты же, в фонарике почему то оказался предохранитель по питанию «сгоревший», по памяти 5 Амперный там, а bl1860 заблокированный, перед этим заряжался на неродной 3А зарядке). Причина блокировки осталась загадкой, после разблокировки работает.
В двух других bl1830 восстанавливал предохранитель после подключения к китайской цепной пиле и секатору два раза. Пилу и секатор хозяева убрали подальше ;-))
"Батареи Макита 18в разблокировка"
а откуда он там взялся?
А так — я именно вайфай в голове держал, только запутался
З.Ы. А чип-антенна у c3 supermicro объективно лучше печатной у D1. В равных условиях видит больше сетей и имеет более уверенный приём
Ну а если сравнивать лоб в лоб C3 с 8266 — там и наличие BT, и более шустрый проц. Если брать полноценный модуль — там ещё и дополнительный HW UART(правда опять же, когда нужно много UART-ов, проще взять S3, где тоже 3 UART контроллера и буквально любые пины можно переназначить как угодно). Если бы ещё был ULP сопроцессора — был бы прям конфеткой, но чего нет того нет. В любом случае, для наколенных поделлк планирую полностью перейти на них — толко что запасы Wemos D1 доюзаю(уже почти доюзал, буквально парочка осталась)
Исходники в наличии, кому интересно можете попробовать и на esp8266.
github.com/mnh-jansson/m18-protocol
Стоило бы указать жирным шрифтом в преамбуле.
а если без — тут и так все очевидно.
Это делается нажав на задачу upload file system image в разделе задач platformio. см.скрин выше.
ссылка
https://aliexpress.ru/item/1005002837370502.html
Спасибо!
У вас в описании на Github написано:
… Коллектор транзистора -> через резистор 4.7 кОм -> к +5В на ESP32…
А на схеме коллектор подключен через R1 2.2 кОм.
Как всетаки правильно?
Спасибо
под этим вопросом есть мой ответ со скриншотом
Очередной идиотский вопрос:
подскажите пожалуйста, правильно у меня на фото обозначены точки подключения с Вашей схемы?
Спасибо