Files
Kettenoeler/DEV.md
2025-08-22 17:58:30 +02:00

8.2 KiB
Raw Blame History

Developer Documentation Smart Chain Oiler

Diese Datei richtet sich an Entwickler:innen, die das Projekt aufbauen, erweitern oder debuggen wollen. Ergänzend zur README.md (Überblick & Features) enthält dieses Dokument Details zu BuildProzess, Debugging, Protokollen und internen Architekturen.


Build & Flash

PlatformIO Environments

  • pcb_rev_1-2_serial, pcb_rev_1-2_ota
  • pcb_rev_1-3_serial, pcb_rev_1-3_ota
  • pcb_rev_1-4_serial, pcb_rev_1-4_ota

Default: pcb_rev_1-4_serial

Serial Flash

pio run -e pcb_rev_1-4_serial -t upload

OTA Flash

pio run -e pcb_rev_1-4_ota -t upload
  • Port: 8266
  • Auth: ADMIN_PASSWORD (aus wifi_credentials.ini)

Filesystem Update (LittleFS)

  • Immer zuerst FSImage flashen, wenn „Benötigte FlashVersion“ ≠ „Installierte“
  • .fs.gz hochladen → danach .fw.bin

Serial Console (115200 Baud)

Der ESP8266 bietet ein einfaches CLI (über UART oder USB). Nützliche Befehle:

Befehl Funktion
help Liste aller Kommandos
sysinfo Systeminfo (Versionen, Uptime)
netinfo Netzwerkinfos (IP, WiFi)
dtc_list Aktive DTCs anzeigen
dtc_clear DTCListe zurücksetzen
purge Entlüften/Pumpimpulse starten
toggle_wifi WiFiAP ein/aus
tank_refill Tankfüllstand zurücksetzen
isr_debug on/off Debug-Ausgabe zu ImpulsISR

WebSocket API

Endpoint

ws://<host>/ws

Server → Client Events

  • NOTIFY:<type>;<msg> → Toast/Alert im UI
  • DEBUG:<text> → Debugausgabe
  • DTC:<list> → aktive DTCs (Format: ts,code,severity,active;…)
  • MAPPING_STATUS:<map> → Mapping Keys → Labels (Statuswerte)
  • MAPPING_STATIC:<map> → Mapping Keys → Labels (Staticwerte)
  • STATUS:<values> → Livewerte (z. B. Distanzzähler, Tank %)
  • STATIC:<values> → Konfiguration, Versionen

Client → Server Events

  • Generisches Schema: btn-<elementId>:<value>
  • Beispiel: btn-refill:1 (Tankreset), btn-purge:25 (25 Impulse)

DTC Framework

Severity:

  • INFO nur Anzeige im WebUI
  • WARN (Orange) Hinweis, Betrieb läuft weiter
  • CRITICAL (Rot) Pumpe gestoppt

DTCDefinitionen: siehe dtc_defs.txt. Im WebUI werden Codes per dtc_table.json in Titel & Beschreibung gemappt.


Tankmodell & Persistenz

  • amountPerDose_microL definiert Ölmenge pro Puls
  • Virtueller Tank (ml, Warnschwelle %, Restreichweite)
  • Daten persistiert in EEPROM/Flash (Partition PDS)
  • Sanity/ChecksumPrüfungen → passende DTCs

Speed Sources

  • Impuls/Pickup: via Interrupt (konfigurierbar: Puls/Umdrehung, Reifenmaße)
  • GPS (TinyGPSPlus): Baudrate wählbar, Distanzberechnung
  • CAN (KTMspezifisch): tested mit KTM 890 Adventure R & 1290 SuperDuke
  • OBD2 CAN/KLine: in Testphase (PCB ≥ 1.4 für KLine)

LED Control

  • Implementiert in ledcontrol.cpp
  • Farben + Muster (led_colors.h)
  • BrightnessRange konfigurierbar (WebUI)
  • DTC Severity → LED Orange/Rot

Codegen & Versionsverwaltung

  • struct2json.cpp wird automatisch generiert (nicht manuell editieren)
  • GitRevision via codegen/git_rev_macro.py eingebettet
  • FlashVersion Check: „Benötigte vs. Installierte FlashVersion“ (WebUIUpdateTab)

Hardware PinMapping & PCB Revisionen

PowerPfad (Rev 1.4)

  • +12V EingangVerpolschutzDiodeStepDown auf 5V → versorgt Wemos D1 mini
  • 3,3V wird vom Wemos bereitgestellt (per LDO) und speist Peripherie (CAN, KLine, OLED, EEPROM, WS2812DataLevel ok am D3)
  • Pumpe: LowSideMOSFET mit Freilaufdiode (Entstörung gegen induktive Spannungsspitzen)

Wemos D1 mini (ESP8266) Pins

Funktion BoardPin GPIO Bemerkung
Pumpe (MOSFET, LowSide) D0 GPIO16 Schaltausgang für Pumpentreiber
I²C SCL (OLED/EEPROM) D1 GPIO5 U8g2 + I2CEEPROM auf gleichem Bus
I²C SDA (OLED/EEPROM) D2 GPIO4 PullUps auf 3,3V vorhanden
WS2812 LED Data D3 GPIO0 Serieller Widerstand im Datenpfad
CockpitTaster D4 GPIO2 gegen GND, Schutzdiode, interner PullUp
SPI SCK (MCP2515) D5 GPIO14 CANController
SPI MISO (MCP2515) D6 GPIO12 shared mit internen Leitungen, siehe KLine/UART Hinweis
SPI MOSI (MCP2515) D7 GPIO13 CANController
CS / CEN / Impuls (per Jumper) D8 GPIO15 JumperFunktion: CS für MCP2515 oder CEN_KLine oder ImpulsEingang
UART0 TX TX (J44) GPIO1 geht an USBUART und an KLineTransceiver (aktiv nur wenn CEN_KLine gesetzt)
UART0 RX / GPSEingang RX (J43) GPIO3 USBUART und GPSEingang; GPSFrames werden vom Parser konsumiert, Rest an CLI geroutet

Hinweis zu KLine: Der MC33660 wird über CEN_KLine (D8, per LötJumper) nur aktiviert, wenn gesendet/empfangen werden soll. Dadurch bleibt die serielle Konsole (USB) im Normalbetrieb verfügbar.

CAN / OBDKLine / GPS Anschlüsse

  • CAN: MCP2515 (SPI) + MCP2551, Signale CAN_H/CAN_L nach außen geführt
  • KLine: MC33660, UART0 TX/RX zugeschaltet über CEN_KLine
  • GPS (seriell): UART0 RX an J4Pin3, Baudrate im WebUI wählbar; nur RX genutzt

PCBRevisionen

  • Rev1.2: Basis (Pumpe, Taster, LED, optional OLED/I²C)
  • Rev1.3: Verbesserte CANIntegration/PowerPfad
  • Rev1.4: KLineTransceiver, JumperMux auf D8 (CS/CEN/Impuls), GPSHeader (J4)

-------------------|------|-----------------|-------------------------------------------| | Taster | D3 | GPIO0 | PullUp, ISRAbfrage | | RGBLED (WS2812) | D4 | GPIO2 | Adafruit NeoPixelLib | | Pumpe (MOSFET) | D1 | GPIO5 | LowSide Treiber | | CANCS | D8 | GPIO15 | MCP2515 CS | | CANINT | D0 | GPIO16 | Interrupt vom MCP2515 | | OBD2 KLine | D7 | GPIO13 | ab PCB Rev 1.4, Pegelwandler erforderlich | | GPS RX | D6 | GPIO12 | Seriell, TinyGPSPlus | | OLED I²C SCL | D5 | GPIO14 | U8g2Lib | | OLED I²C SDA | D2 | GPIO4 | U8g2Lib |

Hinweis: tatsächliches Mapping je nach config.h und PCBRevision. Tabelle zeigt Standardzuordnung Rev1.4.

PCB Revisionen

  • Rev 1.2: Basisfunktionen, kein OBD2Support
  • Rev 1.3: Verbesserte CANIntegration, stabileres PowerDesign
  • Rev 1.4: zusätzlicher Pegelwandler für OBD2 KLine, vorbereitet für GPSModul

Known Limitations / TODO

  • OBD2 CAN/KLine: nur Basisfunktionen, erweiterte PIDUnterstützung offen
  • GPS: bei schlechtem Empfang kann DTC „NO GPS SIGNAL“ spammen
  • OLED: nur BasicStatusanzeigen; keine volle UI