Introduction: 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!