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:

  1. Protocol: Frames, ENABLE en detectie van het accu-type.
  2. Data decode: Omzetting van bytes naar cellen, temperatuur, fouten en lock-status.
  3. Display: Aansturing via Adafruit GFX ST7789.
  4. UI State Machine: Beheer van het TFT-scherm en optioneel de USB PC bridge.

---

Hardware

Benodigde Componenten

ComponentOpmerkingen
ESP32-C3 SuperMiniElke ESP32-C3 board met native USB
2.4" SPI TFT, ST7789 (240×320)Inclusief geïntegreerde EC11 rotary encoder module
Makita BL1830 LXT adapterBevestigingsclip voor de 18V accu
2 × 4.7 kΩ weerstandenPull-ups voor DATA en ENABLE (470 Ω werkt ook)
USB-C voedingPowerbank of lader (voedt de tool, NIET de accu)

Bedrading

Display + Encoder module (2-in-1 TFT + EC11)

ESP32-C3Module pinRol
GPIO0SCLSPI clock
GPIO1SDASPI data (MOSI)
GPIO10RESReset
GPIO20DCData / command select
GPIO21CSChip select (active low)
3.3 VVCCLogische voeding
3.3 VBLKAchtergrondverlichting (of loslaten = altijd aan)
GNDGNDGround
GPIO5AEncoder fase A
GPIO6BEncoder fase B
GPIO7PUSHEncoder drukknop
GPIO2KOSecundaire knop (kort = terug, lang = home)

Accu-adapter (Makita LXT connector)

ESP32-C3AccupinRol
GPIO3 + 4.7 kΩ pull-up naar 3.3 VPin 2 — DATAOneWire data
GPIO4 + 4.7 kΩ pull-up naar 3.3 VPin 6 — ENABLEEnable (active high)
GNDHoofd B- terminalGround
Niet verbindenPin 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

  1. Installeer het ESP32 board package (Espressif) via de Boards Manager.
  2. Installeer de volgende libraries via de Library Manager:
  • Adafruit GFX Library
  • Adafruit ST7735 and ST7789 Library
  • RotaryEncoder (door Matthias Hertel)
  1. Open PocketOBI/PocketOBI.ino.
  2. Selecteer Board: ESP32C3 Dev Module, en zet USB CDC On Boot op Enabled.
  3. 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.