FlashForge Creator Pro & Raspberry Pi 2 & Octoprint

42K5327

Intro: FlashForge Creator Pro & Raspberry Pi 2 & Octoprint

I recently set up a 3d printing workstation and I wanted to share my setup.

Running Octoprint on a Raspberry Pi 2 attached to my printer lets me upload prints directly from Slic3r, start printing them and monitor progress remotely on a webcam, control basic printer functions like temperatures and print cancellation.

Most of the instructions here I cobbled together from guides I found online and advice I received in forums.
A few sources offhand that were astoundingly helpful:

These groups are active and expertly informed. I've had a number of questions and problems and achieved solutions within hours and learned a ton at the same time.

I now have a great pipeline for printing consisting of the following steps:

  1. Obtain STL or OBJ model from thingiverse or craft one in modelling software (I like 123d for simple shapes).
  2. Configure print settings and slice using Slic3r.
  3. Upload directly from Slic3r to Octoprint.
  4. Start and monitor print from Octoprint web interface.
  5. Cancel Print if needed or adjust temperatures on the fly.
  6. Admire freshly 3d printed object.

This guide can be improved. Please let me know how!

I will not go over setting up your printer and I assume you know the rudiments of creating a 3d model from your SD card. Please be able to print the "simple" way first before attempting to create a networked printer. The Flashforge Google group is a great place to learn.

Requirements:

Hardware:

  • FlashForge Creator Pro
  • Raspberry Pi 2 + Webcam + USB Wifi dongle
  • USB Cable that came with your FFCP printer
  • Wifi router. (Optional admin access needed if you want to connect from outside your local Wifi)

Software:

STEP 1: Raspberry Pi Setup

The first step is getting Octoprint running on your RPi with camera support.

I'm not going to do a step by step here because there is a great guide over at
http://octoprint.org/download/ that would be dumb to recreate.

Here is what I needed to do:

  1. Install the Rpi camera board
  2. Download the latest Octoprint image from the link above and flash it onto the Pi's SD card.
  3. Edit the network settings in octopi-network.txt so our pi can connect to WIFI.
  4. Boot the RPi and get ssh access, or use the terminal with an external monitor.
  5. Use raspi-config to expand the filesystem.
  6. Use raspi-config to enable the camera.
  7. Verify that the Octoprint web interface is accessable on our LAN at http://octopi.local

The first time through you should set up a password to stop bad guys from wrecking your printer or starting a fire!
It's possible. I checked.

I mounted my pi with a 3d printed case, and combined camera mount/hanger that fits into one of the FFCP handles on the left hand side of the printer.

I use this one because it's really easy to install and print and it does what I need. https://www.thingiverse.com/thing:947903
There are dozens of really neat looking ones that mount in different spots for better angles.

Here is what my Octoprint control screen looks like

RPi camera board is a bit far-sighted for this application so the build plate is a bit blurry. I don't mind too much since i just want to see if my print is nice and neat or a pile of spaghetti so I know to hit the cancel button. I already ordered a real webcam to try out instead with a shorter focal distance.

So you have your Octopi running and your camera working and pointed at the print bed.
The next step is to get Octoprint talking to your FFCP!

STEP 2: Octoprint Setup

Now that we have our Raspberry Pi print server running and our webcam installed we need to configure Octoprint to talk to our printer.

Update Octoprint

Make sure we are running the latest version of octoprint.

Go to Settings -> Octoprint -> Software Update
Click "Check for update Now" and follow directions.

Creator Pro printer profile

Edit the default profile or create a new profile with the following values.
  • Form Factor: Rectangular
  • Origin: Center
  • Volume: X:227 Y:148 Z:150
  • Heated Bed: True
  • Axis: X:2500 Y:2500 Z:200 E:300
  • Nozzle Diameter: 0.4
  • Number of Extruders: 2
  • Nozzle Offsets: T1 X:0 Y:0

Save this profile and make it default.

Install & configure Octoprint-GPX

Go to Settings -> Octoprint -> Plugin Manager and find and install GXP plugin.
The url is Here https://github.com/markwal/OctoPrint-GPX but it should be in the list.

Once the plugin is installed you will see a menu in Settings -> Plugins -> GPX.
Select the following options:

  • Enable GPX: True
  • Show pre-release updates: False
  • Verbose GPX logging: False
  • Machine type: Replicator 1 - dual extruder
  • Pause after connection: 2 seconds
  • Gcode flavor: makerbot
  • Recalc build progress: yes
  • Ditto Printing: No
  • Nominal filament width: Leave blank
  • Actual filament width: Leave blank
  • Recalculate extrusion: No
  • Packing density: Leave Blank

Save these settings.

GCODE Scripts

I use the following gcode, it seems to work fine. Remember that this will run before/after whatever gcode you generate with your slicer, so make sure you don't accidentally duplicate moves etc, which might make your printer do bad things (e.g. lower print bed beyond lowest range! It makes a terrible noise).

After print job completes:

<p>M73 P100 ; end build progress<br>G162 X Y F2500; home X and Y axes
M18; disable all stepper motors
M109 S0 T0; set bed temperature to 0
M104 S0 T1; set extruder temperature to 0
M70 P5 (We <3 Making Things!)
M72 P1; Play Ta-Da song</p>

After print job is cancelled

<p>G162 X Y F2500; home X and Y axes<br>M18; disable all stepper motors</p><p>;disable all heaters
{% snippet 'disable_hotends' %}
{% snippet 'disable_bed' %}
;disable fan
M106 S0
M70 P5 (Doh!)
M72 P1; Play Ta-Da song</p>

After connection to printer is established

<p>M72 P1<br>M70 P15 (Octoprint in control)</p>


API Code

To upload gcode to Octoprint directly from Slic3r, obtain your API code now.
Go to Settings -> Features -> API and make sure Enable is checked.

Copy and paste the code now or remember where to find it.


Optional Plugins

I use the following plugins to make the system a bit cooler.

Autoconfig automatically loads prints uploaded from Slic3r
CustomControl lets you add buttons to the control tab like "Emergency Stop" or other creative things.

PrintHistory lets me know that I'm improving over time and when to ask for a couple bucks from my friends for filament costs.

STEP 3: Slic3r Printer Settings

Please go through the following settings to configure 3 different printer profiles for printing with the
  • Left nozzle
  • Right nozzle
  • Dual printing

We will go in order of the subsections but save the Custom G-code section for last since it is the only one that changes between profiles and we don't want to duplicate our changes for each profile.

As you can see the gcode is very similar for each profile. The only thing changing is the extruder numbers (T0 for right, T1 for left) and some instructions to home the nozzles at the correct coordinates.

Getting familiar with G-code is a bit daunting at firstbut is really the key to mastering 3d printing. I'm definitely an amateur at this point.

General Section

Size and Coordinates:

Click the Gear icon next to Bed Shape and input your printer's bed size.

  • Bed Size: X: 226 Y: 150
  • Origin: X: 114 Y: 75


Capabilities:

Extruders: 2

Octoprint Upload

Host or IP: octopi.local
API Key: <Copy and paste this from Octoprint>

Firmware

G-code flavor: RepRap (Marlin/Sprinter/Repetier)

* You might be thinking "This should be sailfish (makerbot)" but I have it on good authority that the Octoprint-gpx plugin works better with this g-code flavor. (https://groups.google.com/forum/#!topic/octoprint/...)

Advanced

Leave these at default settings.

Extruder 1 & Extruder 2

Size

Nozzle Diameter: 0.4mm

Position

Extruder offset: X 0 Y 0 (FFCP handles this for us)

Retraction

Leave default

Retraction when tool is disabled

Leave default (You can change this if you're getting a lot of drool apparently but I'm not having a lot of luck).

Custom G-code

Since this is the only section that differs between printer profiles, we will begin saving our profiles here.
At the top left you should see "- default -" selected with a floppy disk (remember those?) icon for saving.

There are ways this G-code could be better, I just wish I knew them right now. These scripts are working for me on a late 2015 FFCP with sailfish v7.7 and octoprint-gpx.

Paste the following G-code into the boxes to create a Single Right nozzle only profile:

Start G-code

; begin
M73 P0 ; tell the firmware we're starting a build G130 X118 Y118 Z40 A118 B118 ; set vref's to default ; ; set temps M140 S[first_layer_bed_temperature] ; set bed temp, don't wait M104 S[first_layer_temperature_0] T0 ; set nozzle temp, don't wait ; ; home and set coordinates

T0 ; home on the right extruder G90 ; set positioning to absolute G28 X Y Z ; home XYZ at default home feedrates ; home Z again slowly to give more consistent first layer height G92 X0 Y0 Z0 A0 B0 ; define this as Z=0, the other coords are technically unnecessary but x3g requires them so gpx will make some up G1 Z5 ; move the platform 5mm down G28 Z F500 ; so we can home z again slowly M132 X Y Z ; Recall stored home offsets

; ; wait for heat up G1 X112 Y-72 Z30 F3300 ; move to waiting position (front right corner of print bed) M116 ; wait for target temperatures to be reached. GPX only, RepG doesn't understand ; ; purge and wipe G92 E0 ; set current extruder position as 0 so that E15 below makes sense G1 X110 Y-70 Z[first_layer_height] F2400.0 ; move to just on the bed G1 X110 Y70 E15 F1200.000 ; extrude a line of filament along the right edge of the bed G92 E0 ; set E to 0 again because the slicer's next extrusion is relative to this 0

End G-Code

M73 P100 ; end build progress
G162 X Y F2500; home X and Y axes G0 Z150; lower Z axis to bottom M18; disable all stepper motors M109 S0 T0; set bed temperature to 0 M104 S0 T1; set extruder temperature to 0 M70 P5; We <3 Making Things! M72 P1; Play Ta-Da song

Now click the floppy disk and save printer settings as Single Right.

Paste the following G-code into the boxes, replacing the right nozzle code to create a Single Left nozzle only profile:

Start G-code

; begin
M73 P0 ; tell the firmware we're starting a build G130 X118 Y118 Z40 A118 B118 ; set vref's to default ; ; set temps M140 S[first_layer_bed_temperature] ; set bed temp, don't wait M104 S[first_layer_temperature_1] T1 ; set nozzle temp, don't wait ; ; home and set coordinates

T0 ; home on the right extruder G90 ; set positioning to absolute G28 X Y Z ; home XYZ at default home feedrates ; home Z again slowly to give more consistent first layer height G92 X0 Y0 Z0 A0 B0 ; define this as Z=0, the other coords are technically unnecessary but x3g requires them so gpx will make some up G1 Z5 ; move the platform 5mm down G28 Z F500 ; so we can home z again slowly M132 X Y Z ; Recall stored home offsets T1 ; switch to the left extruder ; ; wait for heat up G1 X112 Y-72 Z30 F3300 ; move to waiting position (front right corner of print bed) M116 ; wait for target temperatures to be reached. GPX only, RepG doesn't understand ; ; purge and wipe G92 E0 ; set current extruder position as 0 so that E15 below makes sense G1 X110 Y-70 Z[first_layer_height] F2400.0 ; move to just on the bed G1 X110 Y70 E15 F1200.000 ; extrude a line of filament along the right edge of the bed G92 E0 ; set E to 0 again because the slicer's next extrusion is relative to this 0

End G-Code

M73 P100 ; end build progress
G162 X Y F2500; home X and Y axes G0 Z150; lower Z axis to bottom M18; disable all stepper motors M109 S0 T0; set bed temperature to 0 M104 S0 T1; set extruder temperature to 0 M70 P5; We <3 Making Things! M72 P1; Play Ta-Da song

Now click the floppy disk and save printer settings as Single Left.



Paste the following G-code into the boxes, replacing the left nozzle code to create a Dual nozzle profile:

Start G-code

; begin
M73 P0 ; tell the firmware we're starting a build G130 X118 Y118 Z40 A118 B118 ; set vref's to default ; ; set temps M140 S[first_layer_bed_temperature] ; set bed temp, don't wait M104 S[first_layer_temperature_0] T0 ; set nozzle temp, don't wait M104 S[first_layer_temperature_1] T1 ; set nozzle temp, don't wait ; ; home and set coordinates

T0 ; home on the right extruder G90 ; set positioning to absolute G28 X Y Z ; home XYZ at default home feedrates ; home Z again slowly to give more consistent first layer height G92 X0 Y0 Z0 A0 B0 ; define this as Z=0, the other coords are technically unnecessary but x3g requires them so gpx will make some up G1 Z5 ; move the platform 5mm down G28 Z F500 ; so we can home z again slowly M132 X Y Z ; Recall stored home offsets ; ; wait for heat up G1 X112 Y-72 Z30 F3300 ; move to waiting position (front right corner of print bed) M116 ; wait for target temperatures to be reached. GPX only, RepG doesn't understand

; purge and wipe left extruder T1; G92 E0 ; set current extruder position as 0 so that E15 below makes sense G1 X110 Y-70 Z[first_layer_height] F2400.0 ; move to just on the bed G1 X110 Y70 E15 F1200.000 ; extrude a line of filament along the right edge of the bed G92 E0 ; set E to 0 again because the slicer's next extrusion is relative to this 0

; purge and wipe right extruder T0; G92 E0 ; set current extruder position as 0 so that E15 below makes sense G1 X105 Y-70 Z[first_layer_height] F2400.0 ; move to just on the bed G1 X105 Y70 E15 F1200.000 ; extrude a line of filament along the right edge of the bed G92 E0 ; set E to 0 again because the slicer's next extrusion is relative to this 0

End G-Code

M73 P100 ; end build progress
G162 X Y F2500; home X and Y axes M109 S0 T0; set bed temperature to 0 M104 S0 T0; set 1st extruder temperature to 0 M104 S0 T1; set 2nd extruder temperature to 0 G0 Z150; lower Z axis to bottom M18; disable all stepper motors M70 P5; We <3 Making Things! M72 P1; Play Ta-Da song

Tool change G-code

T[next_extruder]

Now click the floppy disk and save printer settings as Dual.

Whew.. that was a lot of configuration. Hope you're still with me.
Now that we have 3 printer profile settings created and listed in the dropdown we shall move on to the Filament Settings tab.

STEP 4: Slic4r Filament Settings

For this section I'm just going to create profiles for ABS and PLA since those are the only filaments I use.
This section I mostly leave default and these settings will most likely need to be customized for your printer, filament brand, room temperature, astrological sign, etc... I'm just putting my info as an example.

Just as in the printer profile config, we want to create multiple profiles. I have one for ABS, one for PLA.
Save them individually so you can switch between them later.

Filament

I use these settings for ABS

Filament

Color: I Have blue! :D
Diameter: 1.75
Extrustion multiplier: 1.0


Temperature

Extruder: First layer 230, Other Layers 225
Bed: First Layer 120, Other Layers 110

I use these settings for PLA

Filament
Color: I Have green! :D
Diameter: 1.75 Extrustion multiplier: 1.0

Temperature

Extruder: First layer 230, Other Layers 225
Bed: First Layer 120, Other Layers 110

Cooling

I leave these as default. Slic3r seems to have great defaults for me.

STEP 5: Slic3r Print Settings

There are MANY MANY MANY options on this tab. It is out of the scope of this guide to go into any detail.
Please see the slic3r Manual for lots of info on All of these settings.

http://manual.slic3r.org/

Here is what I change from the default just to get prints sticking for ABS.

STEP 6: Plating and Printing

Now we are ready to plate a model and send it to Octoprint!

Load and Slic3r your model.

  1. Click Add... and browse for an STL file like one of these: http://www.thingiverse.com/thing:2064
  2. Verify that the Print settings, Filament settings, Printer are the ones you want.
  3. If you have your API key installed and working, click "Send to printer" or exprt the gcode and upload to Octoprint.
  4. If not using the API, hit "Export G-code..." and save your .gcode file. Upload it to Octoprint by dragging and dropping it from your file explorer or using the Upload button in Octoprint.

IMPORTANT: If manually uploading the file, and also using gpx on your PC make sure you upload and select the .gcode file, not the .x3g file.

Select the .gcode file in Octoprint and print!

Wow!

21 Comments

I can't get this working yet. I did clear out the rogue HTML tags from the GCODE, but nothing yet.

I generated my files using "Flash Print 5", which I had been using with the SD card method, but uploading and printing results in a print head way off axis and nothing printing. I am double checking all my values and will see if there is anything different after 6 years.
I can't seem to get this to work. I have Flashforge Creator Max and when i connect it USB to the PI, I can see the printer in usb-devices command, but there is nothing in the /etc/tty* that seems to the printer.

I tried the /dev/ttyprintk and /dev/AMA0. I am using the USB cable that came with the printer.

if i type usb-devices on the PI i get this:

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #003322}
span.s1 {font-variant-ligatures: no-common-ligatures}
T:Bus=01 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#=4 Spd=12MxCh= 0

D:Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=1

P:Vendor=2b71 ProdID=00e7 Rev=02.00

S:Manufacturer=Microcenter

S:Product=FlashForge Creator Max 3D Printer

S:SerialNumber=00000000050C

C:#Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=100mA

I:If#=0x0 Alt= 0 #EPs= 4 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)

OctoPrint version : 1.4.0
OctoPi version : 0.17.0


I installed GPX,

Thanks
Chris
I was able to get an answer from Reddit on what i did wrong. It turns out i installed the wrong GPX plugin.

You need to install this GPX plugin:
https://github.com/Mrnt/OctoPrint-FlashForge/archi...

  1. Download the repo from here: https://github.com/Mrnt/OctoPrint-FlashForge
  2. Add the following line to the file /etc/udev/rules.d/99-com.rules
    SUBSYSTEM=="usb", ATTR{idVendor}=="2b71", MODE="0666
  3. Add the following line to the file /etc/udev/rules.d/99-octoprint.rules
    SUBSYSTEM=="usb", ATTR{idVendor}=="2b71", MODE="0666
  4. Reboot your RaspPi
I edited the first file, after a reboot, a message came up on the termnal that i needed to edit the second file. I am not sure if you only need to edit the second one and not the first.

Everything is working fine for me now and I can talk to the printer from Octoprint.

Awesome sorry I wasn't around to help I'm hoping to update this guide in the near future
Recently rebuilt my Pi 3B+ after my SSD was corrupted. This is still mostly accurate, however, an update for Raspberry Pi 3 and newer with Octoprint 1.42+, OctoPi 0.17+, and Python3 upgrade would be worthwhile.

Question: why did you use 0 on the nozzle offset?
Hi thanks my printer has actually been gathering dust for about a year now. Hoping to get it going again soon.

I'm racking my brain trying to think of why I set the offset to zero but not coming up with anything.
Absolutely insane write up mate. Everything worked a treat! Bit of screwing around with GPX but if you read the github issues, you can get though it pretty easy.

Thanks again!
Hey thanks for the kudos! I'm pleasantly surprised that it works so well after not being updated for so long.
Has anyone figured out how to get this running with Simplify 3D?

Do you have an update on the Gcode that does the cancelling job?

Because for me this is not functional... I get octoprint that remain in "Cancelling" status

Hi There, the Gcode section seem to be corrupted by some HTML tags, this would give a best effect if this can be fixed ;-)

I have this working on my RaspberryPi Model B (albeit quite slowly) and everything appears to work fairly well. I have one issue, however, that I am looking for some help with. My prints appear to off of centre. I am using Simplify3D to slice my models and haven't noticed this issue until I started using OctoPi + Simplify3D. I didn't use the pre/post g-code scripts becuase I figured that my Simplify3D code works fine when I run in on the printer directly, so why would anything change when I use OctoPrint to execute it (but maybe I am wrong).

Any ideas!?

Okay, finally I managed to print files from the SD card, they can't be inside folders. I have two others problems :
-When I print something from the SD card, it's not displayed how long time left

-If I disconnect during printing, no pb it continues to print but if I connect again, I can only acces to the temperature, but I can't stop print etc.

Do you have an idea to fix theses problems ?

Hi Vykel,

Thanks for trying this out!

I think you are describing known issues.

1. Octoprint and the GPX plugin has limitations with the SD card:
https://github.com/foosel/OctoPrint/issues/1293
I print with USB from Octoprint and it works fine for me

2. What do you mean disconnect? Do you mean disconnect octoprint from your printer with the "Disconnect" button or close Octoprint in your browser?

If you are disconnecting Octoprint, why you do? Just let it print and leave it connected unless the print has failed.
Can you list the steps you take to see this problem?

Cheers

Charles

Hi there !
Thanks for sharing, it works very well :)
I just want to "optimize" my octoprint. Is it possible to interact directly with the SD card (and files also on it) that is located inside the 3D printer via octopi.local/ ?

Great, good to hear. Thanks for letting me know it's working for you.

There are some limitations with Octoprint using the SD card. Last I looked, there was an issue with transferring files quickly enough and a lack of functionality in the formware. Maybe things have changed, but I haven't checked.

Here's an octoprint issue discussing this:

https://github.com/foosel/OctoPrint/issues/1293

Some people get around this by using a wifi SD card but Octoprint will still not know what the percentage complete is.


I actually print from the SD card when at home, and use octoprint if I want to start something while I'm at work or monitor it if I have to leave the house (great for stopping prints and preventing 4 hours of spaghetti!).

I have yet to see an error caused by printing over USB.

-C

Is it safe to assume we can use this same setup for Qidi Tech 1? Since it's just a clone.

Whoops, didn't get his until now.

Did you get Octoprint working with your printer?

Thanks for all the details, great instructable , can I suggest posting video of your setup and if possible, a sample octoprint timelapse..

Nice first instructable with great details!

More Comments