Multicolor prints with the Ender 3 Pro 32-bit silent motherboard using Octoprint

Last week I posted the steps I took to install the V4.2.7 silent motherboard on my Ender 3 Pro. Overall the upgrade was worth it. But I have noticed Creality for some reason removed functions that existed in the old firmware. One of those features appears be the ability to pause and change filament, which complicates doing multi-color printing. After some frustration I decided to post the steps I took here in order to get this working correctly. The key is to use Octoprint. The rest of this post will assume anyone reading this will have Octoprint installed and working to control a 3d printer. Cura 4.7.1 is the slicer being used to determine where the filament changes will occur.

Note: I did find other possible ways to fix this issue. One solution is a firmware fix. But I like the idea of the Octoprint approach since 99% of my prints jobs are done through Octoprint anyhow.

DrVax is the source of this info.

It was a video posted on YouTube by DrVax that gave me the foundation for fixing this issue. He has some great videos on his YouTube channel that are worthy of checking out. The nice thing about the video in question here is that it should work with almost any FDM printer and Octoprint. If you read this and choose to watch Dr. Vax’s video instead of reading my post, it won’t hurt my feelings.

Install optional plugins in Octoprint

Two optional plugins suggest by DrVax will help with multi-color printing. Though not necessary, I have already found I love these plugins. The third plugin mentioned is a cool feature but isn’t a part of multi-color printing. The plugin is called ipOnConnect and is worth checking out, but is not really within this post’s scope.

The first plugin is DisplayLayerProgress.

Installing DisplayLayerProgress from the Octoprint plugins.

The first thing you will notice after installing the plugin is that the Current Height and Layer show up on the printers state (pictured below). Plus, in the header, you will see the same information. And better yet, you will see the percentage and layer information on the printers display panel.

Great additions to Octoprint from the DisplayLayerProgress plugin.

The second helpful plugin is M117NavBar. This plugin allows the M117 commands sent to the printers LCD to show up on the Octoprint page.

Installing M117NavBar in Octoprint.

Below is what my Octoprint page looks like after installing these two plugins. Notice the printer display showing up in the lower-left corner and up in the navigation bar.

Adding the Pause and Resume G-code to Octoprint

To get multi-color printing working from Octoprint, it is necessary to provide the g-code for everything we need the printer to do during a filament changeout. To change these, go to the Octoprint Settings (wrench) and go into GCODE Scripts on the left-hand side.

Below is the code to be entered in the Pause Section of the g-code scripts. This is the exact code provided by Dr. Vax. I didn’t see any reason to change any of it. I love that a tone plays when the printer is paused. Since getting the silent motherboard, it is hard to know when printing has stopped.

{% if pause_position.x is not none %}
; play some tone to remind us something is happening
M300 S440 P200
M300 S660 P250
M300 S880 P300
; relative XYZ
G91
; relative E
M83
; retract filament, move Z slightly upwards
G1 Z+10 E-5 F4500
; absolute E
M82
; absolute XYZ
G90
; move to a safe rest position, adjust as necessary
G1 X0 Y0
; make sure position steppers stay powered on to lock position
M17 Z X Y
; unlock the extruder stepper so we can use the dial
M84 E
{% endif %}

Below is the code to be entered in the Resume Section of the g-code scripts. Again, this is the exact code presented by Dr. Vax. I didn’t see a reason to change any of the code.

{% if pause_position.x is not none %}
; relative extruder
M83
; prime nozzle
; retract filament just a bit
G1 E-5 F4500
; now extrude it the same amount
G1 E5 F4500
; absolute E
M82
; absolute XYZ
G90
; reset E
G92 E{{ pause_position.e }}
; move back to pause position XYZ
G1 X{{ pause_position.x }} Y{{ pause_position.y }} Z{{ pause_position.z }} F4500
; reset to feed rate before pause if available
{% if pause_position.f is not none %}G1 F{{ pause_position.f }}{% endif %}
{% endif %}

Don’t forget to click save after copying the scripts into the appropriate sections!

Setting up the filament changes in Cura.

To setup layer changes, first import the STL you want to use. Then configure your settings; however you usually would for the filament you are using (quality, temp, retraction, supports, etc…). Once you are ready, slice the file like usual.

Now you can set the layer heights. Click on Preview instead of Save to File as you usually would. This will bring up a slide bar on the right-hand side. As you slide that bar up and down, you can see the layers forming or going away (depending on which way you are going). To make this easier, you can use the up/down arrows on the keyboard once you have highlighted the slider with your mouse.

For the example I am using, I want the color change to happen right when the VH logo appears directly above the print base. To do this, I started at the bottom and brought the slider up until the body stopped changing, and the letters were rising. Cura makes this easy to determine because the body fill changes direction every time a new layer is added to the body. When the body stops changing direction, you are past that part of the print. I then took note of the first layer above when the body stopped changing. In this case, it was layer 26. See the picture below.

Using the slider in CURA to determine where a filament change should occur.

Now we have to go to Extensions up in the CURA menu and choose Post Processing > Modify G-Code. Then click on Add a Script and choose Pause at Height. If you have an older version of Cura, you might notice I have more blanks than yours. That’s OK. I’m not using them anyhow.

The blanks to change are:

  • Pause at: change from Height to Layer Number.
  • Pause Layer: enter the actual layer you want to change filament.
  • Put a Zero in every blank that had a number, this is done because we are setting these G-Code items via Octoprint.
  • Put the standby temp in at the desired temperature. You want to do this because you need the temp at the desired level to change the filament. That is easier to do here instead of in Octoprint, partly because here is where you are already setting filament temps.
  • Finally, enter Filament Change in the message to send the Display Panel.
  • I left the Method at marlin (M0), which seemed to work OK.

Here are the settings I used:

Pause at height script in CURA.

I wanted a second filament change to occur for the last five layers. I used the above settings for the second script, except that I used layer 56 for the pause.

Once you click close in this, you will see a little icon down by CURA’s slice button. You can click on that to return to the scripts screen.

Scripts icon in CURA.

You will once again have to slice the file. This time though, the file can be saved and sent to Octoprint. Dr. Vax has a plugin that connects CURA to Octoprint. I don’t use that and just saved the file to a local directory and then uploaded it to Octoprint.

Save to file screen in CURA.

Printing from Octoprint

Now it is time to do the actual print from Octoprint. Just load the file and click print as usual. Here is a screenshot that was taken shortly after printing. Notice the extra information that is available about the print. The Printer Display shown in the lower-left hand side is precisely what shows up on the bottom line of my Ender 3 Plus. The print is actually on the second layer because it counts starting at layer 0.

Octoprint screen after print started.

When the printer gets to the magic layer, Octoprint will pause the job. It will then execute the script, including moving the extruder to a handy place to replace the filament. The display on my Ender 3 Pro also showed Filament Change on it. Below is the screen Octoprint will show after the print job is paused.

Octoprint screen after paused.

At this point, the filament can be manually taken out and replaced with the new filament. I always push a little extra through to get the old color out. When it is done oozing, I’ll take away the drippage. Finally, all that has to be done now is click Resume in Octoprint. The Resume button shows up in Octoprint, where the Pause button usually is (see the above picture).

The finished test print

Below is the final product. It is a tribute to Eddie Van Halen I created in TinkerCAD. The base is Real Black PLA filament from 3D Solutech. The two top colors are Sparkle Red PLA filament and Sparkle Blue filament, both from Hatchbox. Overall I’m pleased with this process of doing multi-color prints via Octoprint.

VH multicolor print.

Song of the Day: Intruder/Pretty Woman

This is the song that made me a Eddie Van Halen fan. I remember hearing the intro Intruder as a kid and thinking it was the coolest thing I ever heard. I still think that! Plus this is just a great 80’s artifact of a music video.

Bonus Song: Right Now

I know a lot of VH fans back in the day hated that Sammy Hagar took over lead vocals. I was not one of those haters. Having already been a fan of Sammy, I thought it rocked that two of my favorite artists were together in the same band. And of course one of my favorite songs from that great partnership also happens to have been a big hit for them.

Leave a Reply