Git Product home page Git Product logo

e3v3se_display_klipper's Introduction

PyPI version Documentation

Interface for the Creality Ender 3 V3 SE display running Klipper

Update: A new version of this project that uses the printer original display connector is released on jpcurti/ender3-v3-se-klipper-with-display. It incorporates this project into a custom klipper and works any host without any additional configuration or wiring. Check it out!

This project allows you to use the original Creality E3V3SE (Ender 3 V3 SE) display with Klipper when connected directly to the host (at the moment a Raspberry pi only) via UART and GPIOs.It fetches the information from Klipper via the moonraker API and is able to send basic commands back, so that you can re-use the printer original display for some basic functionality.

Demonstration image

Considering that the communication protocol between E3V3SE and the display is presently undisclosed, the repository includes a comprehensive guide on reverse engineering the communication protocol of such printers. This resource is invaluable for extending this capability to other 3D printers. Users are encouraged to customize the project to suit their specific printer models.

Supported features

The currently supported features are:

Feature Status
Print file
Tune print
Pause/continue print
Stop print
Move Axis
Home Axis
Set Z offset
Disable step motors
Preheat bed
Cooldown
Set nozzle temperature
Set bed temperature
Set max speed
Set max acceleration
Set steps per-mm
Leveling Menu

Features that are not available are shown as a pop-up:

Demonstration image

Installation

Via pip

pip install e3v3se-display-klipper
e3v3se_display_klipper 

By cloning the project

git clone https://github.com/jpcurti/E3V3SE_display_klipper.git
cd E3V3SE_display_klipper

Configuration and Running

Parameters can be set as arguments or in a config.ini file in the project root. Run python3 run.py --help (for project cloning) or e3v3se_display --help for a complete list of parameters.

  • Example of configuration file: Check the file config-example.ini
  • Example when running as arguments:
python run.py --com_port '/dev/ttyAMA0' --baud 115200 --gpio_wheel_button_left 26 --gpio_wheel_button_right 19 --gpio_wheel_button_click 13 --klipper_api_key 'yourapikey' --klipper_socket '/home/youruser/printer_data/comms/klippy.sock' 

or 

e3v3se_display_klipper --com_port '/dev/ttyAMA0' --baud 115200 --gpio_wheel_button_left 26 --gpio_wheel_button_right 19 --gpio_wheel_button_click 13 --klipper_api_key 'yourapikey' --klipper_socket '/home/youruser/printer_data/comms/klippy.sock' 

Wiring

Using a Rpi as a host

If you want to follow the same wiring as the default configuration, make sure to configure the primary UART on the raspberry!.

Then, wire the raspberry pi and display according to the image below: Wiring diagram between display and raspberry pi

Display RPi
VCC (5V) 2
GND 6
TX 10 (RX)
RX 8 (TX)
A 19
B 26
ENTER 13

Important - Credits:

  • This repository is heavily based on the DWIN_T5UIC1_LCD repository for the E3V2 display and makes use of most of the available classes and methods implemented there, with the necessary modifications for the E3V3SE display. All credits goes to the author of the DWIN_T5UIC1_LCD project for making the version which this repository is based on.

  • This project is based on the E3V3SE display firmware 1.0.6. Any changes in the firmware version, such as a new version from Creality, can change the assets locations within the display memory and a new mapping would be necessary. A list of available firmware can be found on Creality website and a detailed instruction on how to update your display is available on youtube.

Useful links

https://www.klipper3d.org

https://octoprint.org/

https://github.com/arksine/moonraker

https://github.com/odwdinc/DWIN_T5UIC1_LCD

e3v3se_display_klipper's People

Contributors

jpcurti avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

e3v3se_display_klipper's Issues

Preheat PLA setting prevents subsequent prints

It seems that XY homing on a new print doesn't work after this function runs. The nozzle stays in the center of the bed, and fluidd reports a coordinate out of range error. A hard reboot clears it.

Here's my start g-code in Orca:

M220 S100 ;Reset Feedrate
M221 S100 ;Reset Flowrate

M140 S[bed_temperature_initial_layer_single] ;Set bed temp
M104 S140 ; Preheat nozzle

BED_MESH_PROFILE LOAD=default 

G28 X Y ;Home XY axes
G28 Z ;Home Z axis & load bed mesh

M104 S[nozzle_temperature_initial_layer] ;Set nozzle temp
G92 E0 ;Reset Extruder
G1 X-1.0 Y20 Z0.3 F5000.0 ;Move to start position
M190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize
M109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize
G1 Z0.2 ;Lower nozzle to printing height
G1 Y145.0 F1500.0 E15 ;Draw the first line
G1 X-0.7 F5000.0 ;Move to side a little
G1 Y30 F1500.0 E15 ;Draw the second line
G92 E0 ;Reset Extruder

Add installation guide with real diagrams/images

  • [ IMPORTANT: DISPLAY UART IS LOCATED ON PIN PA3,2 (USART 2) and not on USART 3 PB11/10 as documented by others ]
  • [Document the icon retrieval process as a separate .md page]
  • [Add github pages for documentation export as page]

Project packaging & distribution

  • Create a run file with default values for COM, baud and other from a configuration file
  • Make it accessible via CLI command
  • Package as Pypi

[Klipper mod] Add "virtual rotary button"

The screen communication protocol can be extended for response messages from the display unit to the klipper host.
Extend rotary button methods already available from klippy so that the screen rotary button and its commands (left, right, click) are registered and translated as a UART message sent to the host. The protocol will be as follow:

Head Encoder CMD code Value Tail
1 Byte 1 Byte 1 Byte 4 Bytes
0xAA 0xBC 0x00-0x04 0xCC 0x33 0xC3 0x3C

Each of the 3 inputs (left, right, click) will be a corresponding bit on the command, following the logic:
(BTN_CLICK<<2) | (BTN_RIGHT << 1) | (BTN_LEFT)

Command Value
Left turn 0x01 (0001)
Right turn 0x02 (0010)
UNDEFINED 0x03 (0011)
Button click 0x04 (0100)

Note: To be done after screen is complete.

Add support for multiple languages

Change the respective menu icons for other languages using its respective library IDs:

Language Lib_id
Language Lib ID
Chinese 2
English 4
German 6
Russian 9
French 12
Turkish 15
Spanish 17
Italian 19
Portuguese 21
Japanese 23
Korean 25
  • [ Add language submenu under "Prepare" menu]
  • [Change icon set when another language is selected]

[Klipper mod] Connect display with host via a klipper "serial bridge" implementation

A serial bridge was already proposed and implemented by @
E4ST2W3ST, but it need to be adapted for the ender 3 v3 se with the following changes:

  • [Change port forwarding to match E3V3 serial port (from USART1 to USART 2 (RX on PA3, TX on PA2) ]
  • [ Create virtual rotary button that generates UART messages from rotary button state]
  • [Port existing Display, Screen interface and printer interface to klippy]
  • [Packaging and release]

Set temperature does nothing

I was attempting a cold pull by setting the nozzle temp on idle, but the temp just resets back to 0, so I had to do it from fluidd.

Map currently working features

This serves both as a question and an enhancement request,
What menus/features are currently supported? An what is still pending?

Also, thank you for you amazing work!

Reduce status bar flickering

At the moment, the whole action menu is updated every cycle without necessity. This makes the screen flickers and consumes time that will be important when porting this to klipper.

  • [ Remove method to update status bar on every menu, move it to a timer-based update]
  • [Store last values and compare them before updating the screen, drawing only values that actually change]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.