Complete start-to-finish guide for running modern Klipper with the stock DWIN touchscreen.
Hardware
- Mainboard: Creality 1.70.3 with ATmega2560 (the “H8” sticker on the SD slot only indicates the stepper driver batch – it does not change pinout or flashing method)
- Screen: DMT48270C043_06Wt (480×272 DWIN T5UID1 / DGUS)
- Host: Raspberry Pi (Zero 2 W, 3, 4 or 5)
Recommended approach (this guide)
Screen is driven from the Pi over UART.
Mainboard runs stock/latest Klipper over USB.
This keeps you on the newest Klipper and is the most maintainable solution in 2026.
| Term | What it is | Where it lives | What it does |
|---|---|---|---|
DWIN Assets (DWIN_SET) |
The graphical UI files for the screen itself | MicroSD card → loaded into the panel’s internal memory | Defines what the screen looks like (pictures, icons, buttons, layout) |
| DWIN Bridge | Software that runs on the Raspberry Pi | On the Pi (Python systemd service) | Makes the screen talk to Klipper / Moonraker in real time |
Simple analogy
- Assets = the dashboard design and labels in your car
- Bridge = the wiring and computer that actually make the gauges move and the buttons work
You need both:
- Flash the correct assets onto the screen once.
- Keep the bridge service running on the Pi so the screen stays live with Klipper.
Option A – Recommended (Modern / Maintainable)
- Screen wired to the Pi UART
- Mainboard runs stock/latest Klipper over USB
- Use a DWIN Bridge (e.g. filipton/dgus-moonraker-screen)
- Pros: Always on the newest Klipper, easy updates, more flexible
- Cons: Requires a level shifter + a small extra service on the Pi
Option B – Classic (Desuuuu style)
- Screen stays connected to the mainboard’s LCD header
- Requires a modified Klipper fork that includes the
[t5uid1]code - Pros: No extra service
- Cons: Fork is archived → harder to stay up-to-date
Most people in 2026 should start with Option A.
- Correct
DWIN_SETassets flashed to the panel - Bridge service installed and running (Option A) or modified Klipper with
[t5uid1](Option B) - UART wiring + level shifter correct (Option A)
- Baud rate 115200
- Klipper MCU flashed successfully over USB
| Purpose | Repository | Notes |
|---|---|---|
| Klipper (latest) | https://github.com/Klipper3d/klipper | Use this for Option A |
| Moonraker | https://github.com/Arksine/moonraker | Stock |
| Mainsail (recommended) | https://github.com/mainsail-crew/mainsail | or Fluidd |
| DWIN Bridge (Option A) | https://github.com/filipton/dgus-moonraker-screen | Best current open option |
| DWIN Assets | https://github.com/Desuuuu/DGUS-reloaded-Klipper/releases | 480×272 T5UID1 assets |
| Modified Klipper (Option B only) | https://github.com/Desuuuu/klipper | Archived – only for classic method |
| Example configs | This repository | — |
Do NOT use the Thinkersbluff CR6 repositories.
They are for a completely different screen (CR6 portrait T5L 272×480) and will not work on the DMT48270C043_06Wt.
Other useful references:
- Official Klipper example:
config/printer-creality-cr10s-2017.cfg - Desuuuu Ender-5-Plus / CR-10S-Pro configs (good pin reference)
Simply connect a good quality USB data cable from the board’s USB port to the Pi.
No extra wiring needed for the MCU.
The screen runs at 5 V logic. The Raspberry Pi is 3.3 V only.
You must use a bidirectional level shifter (or a USB-TTL adapter that is 5 V tolerant on the screen side).
| Raspberry Pi | Level Shifter | DWIN Panel | Notes |
|---|---|---|---|
| 5 V (Pin 2 or 4) | HV side | 5 V | Power the screen |
| GND (Pin 6) | GND | GND | Common ground |
| GPIO14 / TXD (Pin 8) | TX 3.3 V → 5 V | RX | Crossed |
| GPIO15 / RXD (Pin 10) | RX 5 V → 3.3 V | TX | Crossed |
- Baud rate: 115200
- Never connect the screen’s 5 V TX line directly to the Pi.
Enable the UART on the Pi (see section 3.2).
- Flash MainsailOS (recommended) or Raspberry Pi OS + KIAUH.
- Boot and SSH in (
ssh pi@mainsailos.localor the IP). - Change the default password and update:
sudo apt update && sudo apt full-upgrade -y
sudo raspi-configInterface Options → Serial Port →
- Login shell over serial? → No
- Serial port hardware enabled? → Yes
Or edit /boot/firmware/config.txt (Bookworm) / /boot/config.txt:
enable_uart=1
dtoverlay=disable-bt
Reboot, then confirm:
ls /dev/serial*
# You should see /dev/serial0 or /dev/ttyAMA0 / /dev/ttyS0git clone https://github.com/dw-0/kiauh.git
cd kiauh
./kiauh.shInstall Klipper, Moonraker and Mainsail.
These boards must be flashed over USB.
SD-card flashing of the MCU is not supported on the 1.70.3.
cd ~/klipper
make menuconfigRequired settings:
- Micro-controller Architecture → Atmega AVR
- Processor model → atmega2560
- Communication interface → USB
- Baud rate → 250000 (default)
Then:
make clean
make
# Find your exact serial ID
ls /dev/serial/by-id/*
sudo service klipper stop
make flash FLASH_DEVICE=/dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 # ← replace with your real ID
sudo service klipper startIf make flash fails, check that you are using a real data cable and the exact ID from the ls command.
Create or edit ~/printer_data/config/printer.cfg.
# Creality 1.70.3 / ATmega2560 + DMT48270C043_06Wt
# Screen driven from Pi (Option A)
[mcu]
serial: /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 # ← CHANGE THIS
restart_method: command
[printer]
kinematics: cartesian
max_velocity: 300
max_accel: 3000
max_z_velocity: 5
max_z_accel: 100
[stepper_x]
step_pin: PF0
dir_pin: PF1
enable_pin: !PD7
microsteps: 16
rotation_distance: 40
endstop_pin: ^PE5
position_endstop: 0
position_max: 300 # adjust to your machine
homing_speed: 50
[stepper_y]
step_pin: PF6
dir_pin: PF7
enable_pin: !PF2
microsteps: 16
rotation_distance: 40
endstop_pin: ^PJ1
position_endstop: 0
position_max: 300
homing_speed: 50
[stepper_z]
step_pin: PL3
dir_pin: PL1
enable_pin: !PK0
microsteps: 16
rotation_distance: 8 # or 4 depending on leadscrew
endstop_pin: ^PD3
position_endstop: 0
position_max: 400
homing_speed: 10
[extruder]
step_pin: PA4
dir_pin: PA6
enable_pin: !PA2
microsteps: 16
rotation_distance: 33.5 # calibrate this!
nozzle_diameter: 0.4
filament_diameter: 1.75
heater_pin: PB4
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PK5
control: pid
pid_Kp: 22.2
pid_Ki: 1.08
pid_Kd: 114
min_temp: 0
max_temp: 250
[heater_bed]
heater_pin: PH5
sensor_type: EPCOS 100K B57560G104F # check your actual bed thermistor
sensor_pin: PK6
control: pid
pid_Kp: 54.0
pid_Ki: 0.77
pid_Kd: 948
min_temp: 0
max_temp: 120
[fan]
pin: PH6
[display_status]
[virtual_sdcard]
path: ~/printer_data/gcodes
on_error_gcode: CANCEL_PRINT
[pause_resume]
[respond]
[exclude_object]
[gcode_macro PAUSE]
rename_existing: BASE_PAUSE
gcode:
BASE_PAUSE
# add park code here if desired
[gcode_macro RESUME]
rename_existing: BASE_RESUME
gcode:
BASE_RESUME
[gcode_macro CANCEL_PRINT]
rename_existing: BASE_CANCEL_PRINT
gcode:
TURN_OFF_HEATERS
BASE_CANCEL_PRINTAfter first successful connection you must calibrate:
PID_CALIBRATE HEATER=extruder TARGET=210PID_CALIBRATE HEATER=heater_bed TARGET=60- Measure and set correct
rotation_distancefor the extruder Z_ENDSTOP_CALIBRATE(or probe calibrate if you have a BLTouch/CRTouch)
- Format a microSD card as FAT32, allocation unit size 4096.
- Download the correct assets for the DMT48270C043_06Wt:
- https://github.com/Desuuuu/DGUS-reloaded-Klipper/releases
(download theDWIN_SET.tar.gzfrom the latest release)
- https://github.com/Desuuuu/DGUS-reloaded-Klipper/releases
- Extract and copy only the
DWIN_SETfolder to the root of the SD card. - Power the printer off, insert the card into the screen’s SD slot (not the mainboard slot).
- Power on. The panel will update (progress is shown on the screen). When finished it usually shows “END” or reboots.
- Power off, remove the SD card, power on again.
If the screen stays blank or shows garbage, the asset package does not match your exact panel revision. Try another community package specifically labelled for DMT48270C043_06Wt / Ender-5 Plus / older CR-10S Pro.
git clone https://github.com/filipton/dgus-moonraker-screen
cd dgus-moonraker-screen
# Follow the repository’s setup instructions / setup.shConfigure:
- Serial port → the one you wired (
/dev/serial0or/dev/ttyAMA0) - Baud → 115200
- Moonraker URL →
http://127.0.0.1:7125
Enable the systemd service so it starts on every boot.
- Mainboard powers up and Klipper connects (Mainsail shows “Ready”).
- Screen shows the new UI after the DWIN_SET flash.
- Bridge service is running (
systemctl status ...). - Touch controls on the screen respond (test carefully with motors powered but heaters off).
- Run full calibration suite.
- Print a small test object.
Only use this if you really want the screen connected to the mainboard UART.
- Use the archived Desuuuu Klipper fork: https://github.com/Desuuuu/klipper
- Flash the matching DWIN_SET from https://github.com/Desuuuu/DGUS-reloaded-Klipper/releases
- Add to
printer.cfg:[t5uid1] firmware: dgus_reloaded - When compiling, enable the serial port that the LCD header uses on the 1.70.3 board.
This path is no longer recommended for new installs because the fork is archived.
| Problem | Likely cause / fix |
|---|---|
| Screen blank after DWIN_SET | Wrong asset package or incorrect SD format (must be FAT32 + 4096) |
| No communication with screen | TX/RX not crossed, missing level shifter, wrong /dev/serial* device, wrong baud |
| Klipper “Unable to connect” | Wrong serial ID in printer.cfg or board not flashed |
make flash fails |
Charge-only USB cable or wrong FLASH_DEVICE path |
| Pi Zero 2 feels slow | Disable webcam, reduce logging, or upgrade to Pi 4/5 |
- Klipper – Kevin O’Connor & contributors
- Original DGUS-reloaded work – Desuuuu
- Moonraker bridge ideas – filipton and the community
- This guide – assembled specifically for the Creality 1.70.3 + DMT48270C043_06Wt combination
Disclaimer
You are solely responsible for any damage. Always test endstops and movement directions with the steppers powered but the bed and hotend cold.