PocketOBI is een handheld diagnosetool ontwikkeld door The Repair Forge voor Makita LXT (18V) accu's. Het apparaat draait op een ESP32-C3 en maakt gebruik van het Makita OneWire-protocol om onafhankelijk van een pc batterijinformatie uit te lezen.
De belangrijkste functionaliteiten zijn:
- Monitoring: Realtime weergave van celspanningen (met kleurcodering voor gezondheid), temperatuursensoren en de laadstatus (SoC).
- Metadata-uitlezing: Inzicht in oplaadcycli, fabricagedatum, capaciteit en foutcodes.
- Reparatie: De tool kan valse BMS-blokkeringen (lockouts) opheffen door specifieke bytes in het frame te herschrijven, mits de cellen technisch nog gezond zijn.
- PC Bridge modus: Het apparaat kan fungeren als USB↔OneWire adapter voor de desktopapplicatie Open Battery Information.
Hardware en installatie: De tool wordt gebouwd met een ESP32-C3 SuperMini, een 2.4" SPI TFT-scherm (ST7789) met rotary encoder en een Makita LXT adapter. De software kan worden geflasht via de Arduino IDE of PlatformIO. Het project is gelicenseerd onder de PolyForm Noncommercial License 1.0.0.
PocketOBI: Standalone Makita LXT Accu Reader en Diagnosetool
PocketOBI fungeert als een standalone OBI-client: het maakt gebruik van hetzelfde Makita OneWire-protocol zoals gedocumenteerd door het Open Battery Information project, maar is uitgevoerd als een handheld apparaat met een TFT-scherm en een rotary encoder in plaats van een computer.
Het project is ontwikkeld door The Repair Forge. Meer informatie over de bouw is te vinden op hun YouTube-kanaal: https://www.youtube.com/channel/UCQL-pcIEkrDPyljl3QPzcw.
Demo
Bekijk de volledige walkthrough, inclusief de werking, het reverse-engineering proces en een live demo: https://youtu.be/57KsQQ7-Qd0.
---
Projectstatus en Veiligheid
Status: Dit project bevindt zich in de bètafase en is een work in progress. Feedback en testrapporten (met name seriële logs van echte accu's) zijn zeer welkom.
⚠️ Veiligheidswaarschuwing: Deze accu's bevatten lithiumcellen en kunnen tot circa 21V op B+ leveren. Verbind B+ nooit met de ESP32. Het resetten van een BMS-fout helpt alleen bij accu's waarvan de cellen daadwerkelijk gezond zijn (een valse blokkering). Forceer nooit een accu met een echt defecte of zwakke cel terug in gebruik; dit vormt een brandrisico. Gebruik deze tool op eigen risico.
---
Functionaliteiten
- Standalone reader: Menu-gestuurde gebruikersinterface via een rotary encoder (klikken voor selectie, korte druk op de back-knop voor 'terug', lange druk voor 'home').
- Celmonitoring: Visuele weergave van celspanningen met kleurcodering voor de gezondheid (groen/geel/rood) en detectie van onbalans.
- Accustatus: Inzicht in totale pack-spanning, geschatte laadstatus (SoC), twee BMS-temperatuursensoren en het verschil daartussen.
- Metadata: Uitlezen van model, aantal oplaadcycli, fabricagedatum, capaciteit, foutcode en vergrendelingsstatus.
- BMS-detectie: Automatische detectie van standaard versus oudere F0513 BMS-generaties.
- Foutreset: Resetfunctie met feedback over de status vóór en na de actie (volledige test-mode + power-cycle sequentie).
- Ontgrendelen/Repareren: Kan een lader-blokkering opheffen bij gezonde cellen door het frame te herschrijven. Hierbij wordt de charger-lock nybble gewist en worden de checksums opnieuw berekend.
- LED-test: Testfunctie voor de accu-leds (aan/uit).
- Debug-modus: Weergave van ruwe data (ROM ID + message frame).
- PC Bridge modus: Fungeert als USB↔OneWire adapter (drop-in vervanging voor ArduinoOBI), waardoor de desktopapplicatie Open Battery Information via PocketOBI kan werken.
---
Architectuur
De datastroom verloopt als volgt: de Makita accu communiceert over één datalijn; de meegeleverde OneWire2 driver (overgenomen van OBI) regelt de specifieke Makita bit-timings. De ESP32-C3 firmware is opgebouwd uit verschillende lagen:
- Protocol: Frames, ENABLE en detectie van het accu-type.
- Data decode: Omzetting van bytes naar cellen, temperatuur, fouten en lock-status.
- Display: Aansturing via Adafruit GFX ST7789.
- UI State Machine: Beheer van het TFT-scherm en optioneel de USB PC bridge.
---
Hardware
Benodigde Componenten
| Component | Opmerkingen |
| ESP32-C3 SuperMini | Elke ESP32-C3 board met native USB |
| 2.4" SPI TFT, ST7789 (240×320) | Inclusief geïntegreerde EC11 rotary encoder module |
| Makita BL1830 LXT adapter | Bevestigingsclip voor de 18V accu |
| 2 × 4.7 kΩ weerstanden | Pull-ups voor DATA en ENABLE (470 Ω werkt ook) |
| USB-C voeding | Powerbank of lader (voedt de tool, NIET de accu) |
Bedrading
Display + Encoder module (2-in-1 TFT + EC11)
| ESP32-C3 | Module pin | Rol |
| GPIO0 | SCL | SPI clock |
| GPIO1 | SDA | SPI data (MOSI) |
| GPIO10 | RES | Reset |
| GPIO20 | DC | Data / command select |
| GPIO21 | CS | Chip select (active low) |
| 3.3 V | VCC | Logische voeding |
| 3.3 V | BLK | Achtergrondverlichting (of loslaten = altijd aan) |
| GND | GND | Ground |
| GPIO5 | A | Encoder fase A |
| GPIO6 | B | Encoder fase B |
| GPIO7 | PUSH | Encoder drukknop |
| GPIO2 | KO | Secundaire knop (kort = terug, lang = home) |
Accu-adapter (Makita LXT connector)
| ESP32-C3 | Accupin | Rol |
| GPIO3 + 4.7 kΩ pull-up naar 3.3 V | Pin 2 — DATA | OneWire data |
| GPIO4 + 4.7 kΩ pull-up naar 3.3 V | Pin 6 — ENABLE | Enable (active high) |
| GND | Hoofd B- terminal | Ground |
| Niet verbinden | Pin 1 — B+ (18 V) | NOOIT VERBINDEN |
Belangrijke opmerkingen bij de bedrading:
- Pull-ups: 4.7 kΩ is de referentiewaarde; 470 Ω is succesvol getest op breadboards. Sterkere pull-ups kunnen helpen bij lange of rommelige bedrading.
- Pinidentificatie: Identificeer DATA/ENABLE aan de hand van de labels op de ESP32 ("3" / "4") en niet aan de hand van de positie op de adapter. Sommige AliExpress-adapters hebben een omgekeerde nummering, waardoor DATA op pin 6 kan landen en ENABLE op pin 2. Verkeerde aansluitingen resulteren in geen communicatie (alleen 0xFF/00).
- Voeding: Voed de tool altijd via USB-C, nooit vanaf de Makita accu. B+ is 18V en de BMS kan de eigen output afsluiten bij een fout.
---
Installatie en Flashen
Via Arduino IDE
- Installeer het ESP32 board package (Espressif) via de Boards Manager.
- Installeer de volgende libraries via de Library Manager:
- Adafruit GFX Library
- Adafruit ST7735 and ST7789 Library
- RotaryEncoder (door Matthias Hertel)
- Open
PocketOBI/PocketOBI.ino.
- Selecteer Board: ESP32C3 Dev Module, en zet USB CDC On Boot op Enabled.
- Upload de code.
Let op: Arduino vereist dat de sketch in een map staat met exact dezelfde naam als het .ino bestand (PocketOBI). Als je een ZIP-bestand downloadt van GitHub, hernoem dan de map door het achtervoegsel -main te verwijderen.
Via PlatformIO (VS Code)
Een kant-en-klaar project bevindt zich in de platformio/ map:
cd platformio
pio run # compileren
pio run -t upload # compileren + flashen
---
Gebruik
Voed de tool via USB, verbind DATA / ENABLE / GND met de accu (nooit B+) en het apparaat begint automatisch met lezen. Gebruik de rotary encoder om door het menu te navigeren en klik om een optie te selecteren.
- "No battery found": Controleer de bedrading en gebruik
Menu → Read battery.
- "Comm error" / all-0xFF: De BMS van de accu reageert niet (accu is dood of niet OBI-compatibel).
---
Ontgrendelen en Repareren (Unlock/Repair)
Sommige accu's weigeren op te laden terwijl de cellen gezond en gebalanceerd zijn. Dit komt doordat de BMS een frame opslaat dat de lader blokkeert. De Makita-lader valideert slechts drie velden van het 32-byte frame:
- Nybble 34 (byte 17, low): De charger lock; moet 0 zijn.
- CS0 (nybble 41):
sum(nybbles 0–15) & 0x0F.
- CS2 (nybble 43):
sum(nybbles 32–40) & 0x0F.
De functie Unlock / repair wist nybble 34, berekent CS0/CS1/CS2 opnieuw en schrijft het frame terug naar de BMS. De foutcode (nybble 40, bijv. 0xF = dood) wordt nooit gewist; een echt defecte accu wordt dus niet geforceerd terug in gebruik genomen.
⚠️ Waarschuwing: Deze actie schrijft naar het flashgeheugen van de BMS en vereist een bevestiging op het scherm. Gebruik dit uitsluitend voor gezonde accu's met een valse blokkering.
---
Opmerking over Temperatuureenheden
Temperaturen worden gedecodeerd als 1/10 K ($T_C = raw / 10 - 273.15$). Dit is bevestigd door meerdere onafhankelijke bronnen (rosvall protocol docs, obi-esp32 encoding en m5din-makita fork). De oorspronkelijke Open Battery Information app decodeert dit veld als Celsius x100; dit lijkt een uitschieter te zijn.
Omdat de eenheid niet officieel door Makita is gedocumenteerd, moeten absolute waarden als benaderingen worden beschouwd. Het meest betrouwbare signaal is relatief: twee sensoren worden naast elkaar getoond. Als één waarde sterk afwijkt van de andere of onplausibel is (rood), duidt dit waarschijnlijk op een defecte thermistor.
---
Credits en Licentie
Credits
- Open Battery Information (Martin Jansson): Het oorspronkelijke project dat het Makita-protocol documenteert en de
OneWire2 library leverde.
- appositeit: Voor de ESP32-C3 bedradingsreferentie via de
obi-esp32 port.
- rosvall/makita-lxt-protocol: De basis voor veel van de LXT-decodering (frame map, checksums).
- synrais/Makita-LXT-Battery-Monitor-Unlocker: Onderzoek naar de frame byte map en de unlock opcodes. PocketOBI is een clean-room implementatie gebaseerd op deze publieke feiten.
Licentie
PocketOBI is gelicenseerd onder de PolyForm Noncommercial License 1.0.0. Het is gratis te gebruiken, aanpassen en delen voor niet-commerciële doeleinden (persoonlijk gebruik, hobby, reparatie, educatie, onderzoek). Voor commercieel gebruik is een aparte licentie vereist.
Bundels van derden behouden hun eigen licenties (zie THIRD-PARTY.md). De OneWire2 library en het Open Battery Information project blijven onder de MIT-licentie.
PocketOBI: Standalone Makita LXT Accu Reader en Diagnosetool
PocketOBI fungeert als een standalone OBI-client: het maakt gebruik van hetzelfde Makita OneWire-protocol zoals gedocumenteerd door het Open Battery Information project, maar is uitgevoerd als een handheld apparaat met een TFT-scherm en een rotary encoder in plaats van een computer.
Het project is ontwikkeld door The Repair Forge. Meer informatie over de bouw is te vinden op hun YouTube-kanaal: https://www.youtube.com/channel/UCQL-pcIEkrDPyljl3QPzcw.
Demo
Bekijk de volledige walkthrough, inclusief de werking, het reverse-engineering proces en een live demo: https://youtu.be/57KsQQ7-Qd0.
---
Projectstatus en Veiligheid
Status: Dit project bevindt zich in de bètafase en is een work in progress. Feedback en testrapporten (met name seriële logs van echte accu's) zijn zeer welkom.
⚠️ Veiligheidswaarschuwing: Deze accu's bevatten lithiumcellen en kunnen tot circa 21V op B+ leveren. Verbind B+ nooit met de ESP32. Het resetten van een BMS-fout helpt alleen bij accu's waarvan de cellen daadwerkelijk gezond zijn (een valse blokkering). Forceer nooit een accu met een echt defecte of zwakke cel terug in gebruik; dit vormt een brandrisico. Gebruik deze tool op eigen risico.
---
Functionaliteiten
- Standalone reader: Menu-gestuurde gebruikersinterface via een rotary encoder (klikken voor selectie, korte druk op de back-knop voor 'terug', lange druk voor 'home').
- Celmonitoring: Visuele weergave van celspanningen met kleurcodering voor de gezondheid (groen/geel/rood) en detectie van onbalans.
- Accustatus: Inzicht in totale pack-spanning, geschatte laadstatus (SoC), twee BMS-temperatuursensoren en het verschil daartussen.
- Metadata: Uitlezen van model, aantal oplaadcycli, fabricagedatum, capaciteit, foutcode en vergrendelingsstatus.
- BMS-detectie: Automatische detectie van standaard versus oudere F0513 BMS-generaties.
- Foutreset: Resetfunctie met feedback over de status vóór en na de actie (volledige test-mode + power-cycle sequentie).
- Ontgrendelen/Repareren: Kan een lader-blokkering opheffen bij gezonde cellen door het frame te herschrijven. Hierbij wordt de charger-lock nybble gewist en worden de checksums opnieuw berekend.
- LED-test: Testfunctie voor de accu-leds (aan/uit).
- Debug-modus: Weergave van ruwe data (ROM ID + message frame).
- PC Bridge modus: Fungeert als USB↔OneWire adapter (drop-in vervanging voor ArduinoOBI), waardoor de desktopapplicatie Open Battery Information via PocketOBI kan werken.
---
Architectuur
De datastroom verloopt als volgt: de Makita accu communiceert over één datalijn; de meegeleverde OneWire2 driver (overgenomen van OBI) regelt de specifieke Makita bit-timings. De ESP32-C3 firmware is opgebouwd uit verschillende lagen:
- Protocol: Frames, ENABLE en detectie van het accu-type.
- Data decode: Omzetting van bytes naar cellen, temperatuur, fouten en lock-status.
- Display: Aansturing via Adafruit GFX ST7789.
- UI State Machine: Beheer van het TFT-scherm en optioneel de USB PC bridge.
---
Hardware
Benodigde Componenten
| Component | Opmerkingen |
| ESP32-C3 SuperMini | Elke ESP32-C3 board met native USB |
| 2.4" SPI TFT, ST7789 (240×320) | Inclusief geïntegreerde EC11 rotary encoder module |
| Makita BL1830 LXT adapter | Bevestigingsclip voor de 18V accu |
| 2 × 4.7 kΩ weerstanden | Pull-ups voor DATA en ENABLE (470 Ω werkt ook) |
| USB-C voeding | Powerbank of lader (voedt de tool, NIET de accu) |
Bedrading
Display + Encoder module (2-in-1 TFT + EC11)
| ESP32-C3 | Module pin | Rol |
| GPIO0 | SCL | SPI clock |
| GPIO1 | SDA | SPI data (MOSI) |
| GPIO10 | RES | Reset |
| GPIO20 | DC | Data / command select |
| GPIO21 | CS | Chip select (active low) |
| 3.3 V | VCC | Logische voeding |
| 3.3 V | BLK | Achtergrondverlichting (of loslaten = altijd aan) |
| GND | GND | Ground |
| GPIO5 | A | Encoder fase A |
| GPIO6 | B | Encoder fase B |
| GPIO7 | PUSH | Encoder drukknop |
| GPIO2 | KO | Secundaire knop (kort = terug, lang = home) |
Accu-adapter (Makita LXT connector)
| ESP32-C3 | Accupin | Rol |
| GPIO3 + 4.7 kΩ pull-up naar 3.3 V | Pin 2 — DATA | OneWire data |
| GPIO4 + 4.7 kΩ pull-up naar 3.3 V | Pin 6 — ENABLE | Enable (active high) |
| GND | Hoofd B- terminal | Ground |
| Niet verbinden | Pin 1 — B+ (18 V) | NOOIT VERBINDEN |
Belangrijke opmerkingen bij de bedrading:
- Pull-ups: 4.7 kΩ is de referentiewaarde; 470 Ω is succesvol getest op breadboards. Sterkere pull-ups kunnen helpen bij lange of rommelige bedrading.
- Pinidentificatie: Identificeer DATA/ENABLE aan de hand van de labels op de ESP32 ("3" / "4") en niet aan de hand van de positie op de adapter. Sommige AliExpress-adapters hebben een omgekeerde nummering, waardoor DATA op pin 6 kan landen en ENABLE op pin 2. Verkeerde aansluitingen resulteren in geen communicatie (alleen 0xFF/00).
- Voeding: Voed de tool altijd via USB-C, nooit vanaf de Makita accu. B+ is 18V en de BMS kan de eigen output afsluiten bij een fout.
---
Installatie en Flashen
Via Arduino IDE
- Installeer het ESP32 board package (Espressif) via de Boards Manager.
- Installeer de volgende libraries via de Library Manager:
- Adafruit GFX Library
- Adafruit ST7735 and ST7789 Library
- RotaryEncoder (door Matthias Hertel)
- Open
PocketOBI/PocketOBI.ino.
- Selecteer Board: ESP32C3 Dev Module, en zet USB CDC On Boot op Enabled.
- Upload de code.
Let op: Arduino vereist dat de sketch in een map staat met exact dezelfde naam als het .ino bestand (PocketOBI). Als je een ZIP-bestand downloadt van GitHub, hernoem dan de map door het achtervoegsel -main te verwijderen.
Via PlatformIO (VS Code)
Een kant-en-klaar project bevindt zich in de platformio/ map:
cd platformio
pio run # compileren
pio run -t upload # compileren + flashen
---
Gebruik
Voed de tool via USB, verbind DATA / ENABLE / GND met de accu (nooit B+) en het apparaat begint automatisch met lezen. Gebruik de rotary encoder om door het menu te navigeren en klik om een optie te selecteren.
- "No battery found": Controleer de bedrading en gebruik
Menu → Read battery.
- "Comm error" / all-0xFF: De BMS van de accu reageert niet (accu is dood of niet OBI-compatibel).
---
Ontgrendelen en Repareren (Unlock/Repair)
Sommige accu's weigeren op te laden terwijl de cellen gezond en gebalanceerd zijn. Dit komt doordat de BMS een frame opslaat dat de lader blokkeert. De Makita-lader valideert slechts drie velden van het 32-byte frame:
- Nybble 34 (byte 17, low): De charger lock; moet 0 zijn.
- CS0 (nybble 41):
sum(nybbles 0–15) & 0x0F.
- CS2 (nybble 43):
sum(nybbles 32–40) & 0x0F.
De functie Unlock / repair wist nybble 34, berekent CS0/CS1/CS2 opnieuw en schrijft het frame terug naar de BMS. De foutcode (nybble 40, bijv. 0xF = dood) wordt nooit gewist; een echt defecte accu wordt dus niet geforceerd terug in gebruik genomen.
⚠️ Waarschuwing: Deze actie schrijft naar het flashgeheugen van de BMS en vereist een bevestiging op het scherm. Gebruik dit uitsluitend voor gezonde accu's met een valse blokkering.
---
Opmerking over Temperatuureenheden
Temperaturen worden gedecodeerd als 1/10 K ($T_C = raw / 10 - 273.15$). Dit is bevestigd door meerdere onafhankelijke bronnen (rosvall protocol docs, obi-esp32 encoding en m5din-makita fork). De oorspronkelijke Open Battery Information app decodeert dit veld als Celsius x100; dit lijkt een uitschieter te zijn.
Omdat de eenheid niet officieel door Makita is gedocumenteerd, moeten absolute waarden als benaderingen worden beschouwd. Het meest betrouwbare signaal is relatief: twee sensoren worden naast elkaar getoond. Als één waarde sterk afwijkt van de andere of onplausibel is (rood), duidt dit waarschijnlijk op een defecte thermistor.
---
Credits en Licentie
Credits
- Open Battery Information (Martin Jansson): Het oorspronkelijke project dat het Makita-protocol documenteert en de
OneWire2 library leverde.
- appositeit: Voor de ESP32-C3 bedradingsreferentie via de
obi-esp32 port.
- rosvall/makita-lxt-protocol: De basis voor veel van de LXT-decodering (frame map, checksums).
- synrais/Makita-LXT-Battery-Monitor-Unlocker: Onderzoek naar de frame byte map en de unlock opcodes. PocketOBI is een clean-room implementatie gebaseerd op deze publieke feiten.
Licentie
PocketOBI is gelicenseerd onder de PolyForm Noncommercial License 1.0.0. Het is gratis te gebruiken, aanpassen en delen voor niet-commerciële doeleinden (persoonlijk gebruik, hobby, reparatie, educatie, onderzoek). Voor commercieel gebruik is een aparte licentie vereist.
Bundels van derden behouden hun eigen licenties (zie THIRD-PARTY.md). De OneWire2 library en het Open Battery Information project blijven onder de MIT-licentie.