Skip to the content
2 layers100 × 100 mmDieselfire, the printed circuit board in 3D

A modernized open-source controller for generic Chinese diesel heaters, forked from Afterburner by Ray Jones.

Size
100 × 100 mm
Copper layers
2
Thickness
1.6 mm
Parts
44
Nets
31
Pads
297
Tracks, vias
342, 378
Pours
2
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
30 May 2026
Updated
4 Jun 2026

Overview

Dieselfire is an open-source printed circuit board by wabolabs, from the wabolabs/dieselfire repository on GitHub. It is a 2-layer board of 100 × 100 mm with 44 parts on 31 nets, routed with 342 tracks and 378 vias.

Its parts include 10 resistors, 10 ICs, 8 capacitors, 5 connectors and 2 diodes.

README

README.md

DieselFire

⚠ ALPHA QUALITY — NOT TESTED ON HARDWARE

This project is in early development. The firmware has not been tested on physical ESP32-S3 hardware. All protocol simulation and UI development has been done via the PC simulator. There are likely bugs, edge cases, and incomplete drivers. Use at your own risk. Hardware bringup is in progress.

A modernized open-source controller for generic Chinese diesel heaters, forked from Afterburner by Ray Jones.

Overview

DieselFire is a complete redesign of the Afterburner project, updated with modern hardware while preserving the core functionality that made Afterburner popular:

  • Diesel heater control via the "blue wire" half-duplex serial protocol (25000 baud)
  • WiFi connectivity for web interface, MQTT, and OTA updates
  • Bluetooth Low Energy for mobile app control
  • Environmental monitoring with temperature, humidity, pressure, and CO detection
  • Color touchscreen UI with LVGL graphics
  • Programmable timers (14 channels)
  • Fuel gauge and hour meter
  • Smart error detection

Online Simulator

Try the DieselFire UI in your browser without any hardware: dieselfire.wabo.cc

Runs as a WebAssembly build of the native PC simulator. Includes the full touchscreen interface, Blue Wire protocol simulation, and a diesel heater emulator for testing all states and fault conditions.

Hardware

ComponentSpecification
MCUESP32-S3-WROOM-1-N8R8 (8MB flash, 8MB PSRAM)
Display2.8" 320×240 ILI9341 TFT with capacitive touch (GT911)
Ambient SensorBME280 (temperature, humidity, pressure/altitude)
CO SensorMQ-7 carbon monoxide (external module)
RTCDS3231 with CR2032 battery backup
External TempDS18B20 waterproof probe (optional)
Power12V DC input (heater system voltage)
ConnectivityUSB-C (programming/debug), WiFi, BLE 5
Expansion2× 2×10 GPIO headers

License

DieselFire is released under the GNU General Public License v3.0.

This project is a fork of Afterburner by Ray Jones (Copyright 2018-2020). The original Afterburner code was used as the foundation and has been substantially modified and modernized. All original Afterburner code remains under GPLv3 as per the original license.

See LICENSE for the full license text.

Quick Start

  1. Hardware: Order PCB from JLCPCB/PCBWay using Gerber files in gerber/
  2. Firmware: Install PlatformIO, then run pio run to build
  3. Flash: Connect via USB-C and run pio run --target upload
  4. Configure: Connect to the AP "DieselFire" (password: thereisnospoon) or connect to existing WiFi

Project Structure

text
DieselFire/
├── boards/                  # PlatformIO board definitions
├── docs/
│   ├── design/              # Design documents and specifications
│   ├── firmware/            # Firmware documentation
│   └── hardware/            # Hardware documentation
├── gerber/                  # PCB fabrication files
├── kicad/
│   ├── schematic/           # KiCad schematic files
│   ├── pcb/                 # KiCad PCB layout files
│   ├── footprints/          # Custom KiCad footprints
│   └── libraries/           # KiCad symbol libraries
├── lib/                     # PlatformIO libraries (vendored)
├── src/
│   ├── cfg/                 # Configuration headers
│   ├── Display/             # LVGL display driver and screens
│   ├── Protocol/            # Blue wire protocol handling
│   ├── RTC/                 # Real-time clock and timers
│   ├── Utility/             # Utility classes (sensors, storage, etc.)
│   ├── WiFi/                # WiFi, web server, OTA
│   ├── Bluetooth/           # BLE implementation
│   └── OLED/                # Legacy OLED code (to be removed)
├── platformio.ini           # PlatformIO project configuration
├── README.md
└── LICENSE

Features

Heater Control

  • Power on/off commands
  • Temperature setpoint adjustment
  • Fuel mixture tuning
  • Pump priming
  • Thermostat mode (cyclic, stop/start, linear)
  • Frost protection mode
  • Humidity-based control
  • OEM controller co-existence mode

Connectivity

  • WiFi: STA mode (connect to existing network) or AP mode (captive portal)
  • BLE 5: Bluetooth Low Energy for mobile app control
  • MQTT: Publish heater status and receive commands
  • Web Server: HTTPS web interface with WebSocket JSON streaming
  • OTA: Over-the-air firmware updates

Sensors

  • BME280: Ambient temperature, humidity, pressure (altitude)
  • MQ-7: Carbon monoxide detection (external module)
  • DS18B20: External waterproof temperature probe (optional)
  • SCD41: CO2 sensing (optional, not on default board)

User Interface

  • 2.8" Color Touchscreen: 320×240 ILI9341 with capacitive touch
  • LVGL Graphics: Hardware-accelerated UI with PSRAM buffer
  • Menu System: Hierarchical menus for all settings
  • Timer Chart: Visual overview of 14 programmable timers
  • Status Display: Real-time heater status, sensor readings, alerts

Safety

  • CO Detection: MQ-7 sensor with alarm LED
  • Low Voltage Cutout: Auto-shutdown when battery voltage is too low
  • Error Detection: Smart monitoring of heater state transitions
  • Watchdog: Hardware and software watchdog for reliability

Pinout

ESP32-S3 GPIO Mapping

PeripheralGPIOInterfaceNotes
Native USBIO19 (DP) / IO20 (DN)USB 1.1USB-C, programming + debug
SPI DisplayIO18 (MOSI) / IO17 (SCK) / IO16 (MISO)SPI (HSPI)ILI9341, 320×240
Display CSIO15GPIOTFT chip select
Display DCIO14GPIOTFT data/command
Display RSTIO13GPIOTFT reset
Display BLIO12GPIO/PWMTFT backlight
Touch I2CIO21 (SDA) / IO10 (SCL)I2C (GPIO)GT911 capacitive touch
Touch INTIO9GPIOTouch interrupt
Touch RSTIO8GPIOTouch reset
Blue Wire UARTIO43 (TX) / IO44 (RX)UART0 @ 25kbpsHeater communication
Tx GateIO47GPIO74LCX125 control
BME280 I2CIO21 (SDA) / IO22 (SCL)I2C (VSPI)Temp/RH/Pressure
DS3231 I2CIO21 (SDA) / IO22 (SCL)I2C (VSPI)RTC
DS18B20IO45OneWireExternal temp probe
MQ-7 AOUTIO4ADC1 (12-bit)CO analog reading
MQ-7 DOUTIO5GPIO inputCO digital alert
Status LEDIO48GPIOGreen, active-low
CO Alarm LEDIO44GPIORed, active-low
Power ButtonIO0GPIO (input)With pull-up
Reset ButtonIO5GPIOStandard boot button

Expansion Headers

H1 (2×10): GPIO33, GPIO34, GPIO35, GPIO36, GPIO37, GPIO38, GPIO39, GPIO40, 3.3V, GND, GND H2 (2×10): GPIO41, GPIO42, GPIO43, GPIO44, GPIO45, GPIO46, GPIO47, GPIO48, 3.3V, GND, GND

Connectors

ConnectorTypePurpose
J1USB-CProgramming, debug, power
J22-pin terminal block (3.81mm)12V power input
J33-pin JST-XH (2.5mm)Blue wire to heater
J43-pin JST-XH (2.5mm)DS18B20 external temp sensor
J54-pin JST-XH (2.5mm)MQ-7 CO sensor
H1, H22×10 header (2.54mm)Expansion GPIO

Building

Prerequisites

  • PlatformIO (latest version)
  • ESP32-S3 compatible board (DieselFire PCB)
  • USB-C cable

Build Commands

bash
# Install PlatformIO
pip install platformio

# Clone the repository
git clone https://github.com/wabolabs/DieselFire.git
cd DieselFire

# Build firmware
pio run

# Upload to board
pio run --target upload

# Monitor serial output
pio device monitor --baud 115200

Board Definition

The DieselFire board is defined in boards/dieselfire.json. To use it:

bash
pio run -e dieselfire

Configuration

WiFi Setup

On first boot, the device creates an access point:

  • SSID: DieselFire
  • Password: thereisnospoon

Connect to this AP and open a browser to 192.168.4.1 to configure WiFi.

MQTT Setup

Configure MQTT settings in the web interface or via the debug console:

  • Server address
  • Port (1883 for MQTT, 8883 for MQTT over TLS)
  • Client ID
  • Username/Password (if required)
  • Topic prefix

Sensor Calibration

MQ-7 CO Sensor:

  1. Power on the device in clean air (outdoors)
  2. Wait 48-72 hours for the sensor to stabilize
  3. Use the web interface to run calibration
  4. The R0 value is stored in non-volatile memory

DS18B20 Temperature Probe:

  1. Connect the probe to J4
  2. The probe will be auto-detected on boot
  3. Set offset in settings if needed

Hardware Design

PCB Specifications

  • Size: 80mm × 60mm
  • Layers: 2-layer
  • Trace width: 0.2mm signal, 0.5mm power, 1mm 12V
  • Via size: 0.3mm hole / 0.6mm pad
  • Clearance: 0.15mm minimum

BOM

ReferencePartPackageQtyEst. Cost
U1ESP32-S3-WROOM-1-N8R8QFN-44 module1~$4.00
U22.8" ILI9341 TFT + FPCFPC connector1~$3.50
U3GT911QFN-24 4×41~$0.80
U4BME280QFN-8 2×21~$1.50
U5MQ-7JST-XH 4-pin1~$2.00
U6DS18B20JST-XH 3-pin1~$1.50
U7DS3231SOIC-161~$2.00
U874LCX125SOIC-141~$0.30
U9×2BSS138SOT-232~$0.10
U10MP2451SOT-23-61~$0.50
U11AP2112SOT-89-31~$0.20
J1USB-C-S6SMD1~$0.30
J2Terminal Block 2×3.81TB1~$0.20
J3-J5JST-XH connectors2.5mm3~$0.50
BAT1CR2032 Holder—1~$0.50
H1,H22×10 Header2.54mm2~$0.20
D1,D2LED 060306032~$0.05
SW1,SW2Tactile 6×66×6mm2~$0.10
VariousResistors/Caps0402/0603~20~$1.00
Total BOM~$19.00

PCB fabrication: ~$5-10 for 5 boards (JLCPCB/PCBWay, 2-layer, 80×60mm)

Firmware Development

Architecture

The firmware follows a modular architecture:

text
┌─────────────────────────────────────────────────────────────┐
│                     DieselFire                                │
│                                                              │
│  ┌─────────────┐  ┌──────────────┐  ┌──────────────────┐   │
│  │  Display    │  │   UI Layer   │  │  Settings/Config │   │
│  │  (LVGL)     │  │  (Screens)   │  │  (NVS Storage)   │   │
│  └─────────────┘  └──────────────┘  └──────────────────┘   │
│                                                              │
│  ┌─────────────┐  ┌──────────────┐  ┌──────────────────┐   │
│  │  Protocol   │  │  Blue Wire   │  │  Sensor Layer    │   │
│  │  Handling   │  │  State Machine│ │  (BME280, MQ-7)  │   │
│  └─────────────┘  └──────────────┘  └──────────────────┘   │
│                                                              │
│  ┌─────────────┐  ┌──────────────┐  ┌──────────────────┐   │
│  │  WiFi/HTTP  │  │  BLE/Bluetooth│ │  MQTT/OTA        │   │
│  └─────────────┘  └──────────────┘  └──────────────────┘   │
│                                                              │
│  ┌──────────────────────────────────────────────────────┐   │
│  │                    ESP32-S3 Hardware                  │   │
│  └──────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────┘

Key Modules

ModuleDescriptionLocation
DisplayLVGL integration, ILI9341 driver, GT911 touchsrc/Display/
ProtocolBlue wire protocol, state machine, Tx managementsrc/Protocol/
RTCReal-time clock, timers, timer managersrc/RTC/
UtilitySensors, NV storage, JSON, GPIO helperssrc/Utility/
WiFiWiFiManager, web server, OTA, MQTTsrc/WiFi/
BluetoothBLE implementationsrc/Bluetooth/
OLEDLegacy OLED screens (to be replaced by LVGL)src/OLED/

Development Workflow

  1. Create a feature branch

    bash
    git checkout -b feature/new-screen
  2. Make changes

    • Add/modify code in src/
    • Update documentation in docs/
  3. Build and test

    bash
    pio run
    pio run --target upload
    pio device monitor --baud 115200
  4. Commit and push

    bash
    git add .
    git commit -m "Add new screen for timer overview"
    git push origin feature/new-screen
  5. Create a pull request

Troubleshooting

Board Won't Flash

  • Check USB-C cable (must be data-capable, not charge-only)
  • Hold BOOT button while pressing RESET
  • Check COM port in platformio.ini

Display Not Working

  • Verify FPC connector is seated correctly
  • Check SPI pin connections
  • Verify PSRAM is detected (check serial output)

BME280 Not Detected

  • Check I2C address (0x76 or 0x77)
  • Verify pull-up resistors (4.7kΩ on SDA/SCL)
  • Run I2C scanner from debug console

MQ-7 Readings Unstable

  • Ensure 48-72 hour warmup period
  • Run calibration in clean air
  • Check voltage divider (10kΩ + 10kΩ)
  • Verify ADC pin (IO4) is correct

Blue Wire Communication Issues

  • Verify level shifter connections (BSS138)
  • Check Tx gate control (IO47)
  • Verify UART0 pins (IO43/IO44)
  • Check heater blue wire is connected correctly

Contributing

Contributions are welcome! Please:

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Submit a pull request

Please ensure your code follows the existing style and includes appropriate documentation.

Acknowledgments

DieselFire is a fork of Afterburner by Ray Jones. The original Afterburner project was a groundbreaking open-source controller for Chinese diesel heaters, and this project builds upon that foundation.

Special thanks to:

  • Ray Jones (Afterburner original author)
  • James Clark (Afterburner co-author)
  • The Afterburner community on GitLab
  • The ESP32 and LVGL communities

Disclaimer

DieselFire is provided "as is" without warranty of any kind. The authors are not responsible for any damage caused by the use of this software or hardware. Diesel heaters produce carbon monoxide and other hazardous gases. Always ensure proper ventilation and installation.

Use at your own risk.

Parts

44
QtyValueFootprintReferences
10R_0402_1005MetricR_0402_1005MetricR1, R2, R3, R4, R5, R6, R7, R8, R9, R10
8C_0402_1005MetricC_0402_1005MetricC1, C2, C3, C4, C5, C6, C7, C8
4MountingHole_3.2mm_M3MountingHole_3.2mm_M3MH1, MH2, MH3, MH4
2IDC-Header_2x10_P2.54mm_VerticalIDC-Header_2x10_P2.54mm_VerticalH1, H2
2JST_XH_B3B-XH-A_1x03_P2.50mm_VerticalJST_XH_B3B-XH-A_1x03_P2.50mm_VerticalJ3, J4
2LED_0603_1608MetricLED_0603_1608MetricD1, D2
2SOT-23SOT-23U8_1, U8_2
2SW_Tactile_SPST_Angled_PTS645Vx39-2LFSSW_Tactile_SPST_Angled_PTS645Vx39-2LFSSW1, SW2
1BatteryHolder_Keystone_3002_1x2032BatteryHolder_Keystone_3002_1x2032BAT1
1DFN-8-1EP_2x2mm_P0.5mm_EP0.9x1.5mmDFN-8-1EP_2x2mm_P0.5mm_EP0.9x1.5mmU4
1Hirose_FH12-18S-0.5SH_1x18-1MP_P0.50mm_HorizontalHirose_FH12-18S-0.5SH_1x18-1MP_P0.50mm_HorizontalU11
1JST_XH_B4B-XH-A_1x04_P2.50mm_VerticalJST_XH_B4B-XH-A_1x04_P2.50mm_VerticalJ5
1QFN-24-1EP_4x4mm_P0.5mm_EP2.5x2.5mmQFN-24-1EP_4x4mm_P0.5mm_EP2.5x2.5mmU10
1QFN-44-1EP_7x7mm_P0.5mm_EP5.2x5.2mmQFN-44-1EP_7x7mm_P0.5mm_EP5.2x5.2mmU1
1SOIC-14_3.9x8.7mm_P1.27mmSOIC-14_3.9x8.7mm_P1.27mmU9
1SOIC-16_3.9x9.9mm_P1.27mmSOIC-16_3.9x9.9mm_P1.27mmU7
1SOT-23-6SOT-23-6U2
1SOT-89-3SOT-89-3U3
1TerminalBlock_MaiXu_MX126-5.0-02P_1x02_P5.00mmTerminalBlock_MaiXu_MX126-5.0-02P_1x02_P5.00mmJ2
1USB_C_Receptacle_HRO_TYPE-C-31-M-12USB_C_Receptacle_HRO_TYPE-C-31-M-12J1

Similar boards

  • 2 layers78 × 60 mmIce viz, the printed circuit board in 3D

    Ice viz

    muni-works/vcad

    BRep CAD kernel in Rust/WASM

    44 parts442Apache-2.0
  • 2 layers115 × 14.5 mmUFC Function Select, the printed circuit board in 3D

    UFC Function Select

    jrsteensen/OpenHornet

    OpenHornet 1:1 F/A-18C Simulator Repository

    44 parts431
  • 2 layers37.7 × 20 mmCandleLight, the printed circuit board in 3D

    CandleLight

    HubertD/candleLight

    stm32f0 usb can adapter (KiCAD)

    44 parts400
  • 2 layers88.9 × 88.4 mmTeensypi v91, the printed circuit board in 3D

    Teensypi v91

    simondlevy/Hackflight

    Minimalist flight-control toolkit for makers

    44 parts334GPL-3.0
  • 2 layers125 × 98 mm3-in-1, the printed circuit board in 3D

    3-in-1

    mudmin/AnotherMaker

    This is where I will store code snippets for AnotherMaker Videos

    44 parts258
  • 2 layers65 × 56.5 mmRPiG3iMac, the printed circuit board in 3D

    RPiG3iMac

    qbancoffee/imac_g3_ivad_board_init

    iMac G3 IVAD board initialization with an arduino

    44 parts240LGPL-3.0
  • 2 layers54.4 × 49.3 mmFx3 tn20k adapter, the printed circuit board in 3D

    Fx3 tn20k adapter

    Stefan-Olt/MISRC

    MISRC Is a multi channel RF capture device for FM RF, S-Video, CVBS RAW capture and anything else, but intended and supported for the decode family of projects vhs-decode, ld-decode, hifi-decode.

    44 parts236CC-BY-4.0
  • 2 layers250 × 32 mmPsu, the printed circuit board in 3D

    Psu

    shmoergh/moduleur

    Fully analog DIY-friendly modular synth

    44 parts222

Questions

How big is the Dieselfire PCB?

It measures 100 × 100 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Dieselfire use?

44 parts. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Dieselfire KiCad files?

From the wabolabs/dieselfire repository on GitHub, at the commit this page was made from: the board is kicad/pcb/DieselFire.kicad_pcb and its schematic kicad/schematic/DieselFire.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Dieselfire design in my own project?

Its repository states no licence, so its author keeps all rights: ask wabolabs before reusing the design.