Bad print quality when printing through USB / SimplyPrint / OctoPrint
Are you getting worse print quality when you print via. SimplyPrint or OctoPrint, than when you printed through SD card? There are luckily a few things you can try!
Not all printers are built the same and this means that you can experience different print quality from printer to printer, not just because of the mechanics of the printer but also the printer's way of receiving information. Some printer motherboards are not built to receive printer commands through the USB port very well. They can easily print from this port but it can be limited, how many GCODE-commands it can handle at a time, and thus how fast you can print. The printer will often start showing irregularities like patches of plastic all over the model. These patches occur because the printer's memory becomes full and therefore cannot take in any more information and the print head will momentarily stop. It is still unknown exactly what the solution to this problem is but there are some suggestions to try out.
If you're using a Raspberry Pi Zero, Pi 2 or other less-powerful versions of the tiny computer, chances are your Pi simply can't keep up. See this guide to see pro's and con's for the different models, and let us help you pick the right one; Pick the right Raspberry Pi for running SimplyPrint / OctoPrint
There are several types of USB cables and sadly not every cable is super great. Many Micro USB cables are made solely to charge gadgets like phones and headsets. This prevents the cable from transmitting data that the printer needs. If the cable is very thin, it is a good sign that it does not have all the conductors needed to transfer data.
The Raspberry Pi 4 has 2 types of USB ports you can connect your printer to. There are 2 blue and 2 black ports. The blue ports are USB 3.0 and are a newer standard than the old USB 2.0 as the black ports would be. Some older printers have trouble talking to the USB 3.0 standard.
Try plugging the USB connector into one of the black USB ports and see if that solves the problem. Luckily the blue ports are good for something else; attaching cameras!
When the printer and your Raspberry Pi has to communicate, they need to agree on the speeds of which they will do that. This is called the "Baud rate" and is set when connections are established. It will typically be the motherboard in your 3D printer that sets the limit on how fast they can communicate, but if you have the option to set the baud rate higher then give it a try. To set the baud rate, go to your SimplyPrint printer settings and turn off “Automatic printer connection”. (if you do not do this you will not be able to adjust the baud rate before OctoPrint connects to the printer again). Go into OctoPrint and the "Connection tab" on the left. Press the "Disconnect" button and under "Baud rate", up the value one step at a time, and see if it will connect like this.
It's important that your Raspberry Pi gets the power it needs to run. The Raspberry Pi needs 5 volts to function, and 2 amps. Make sure your Raspberry Pi power supply provides this.
To check if the Raspberry Pi reports that it has undervoltage or power issues, go to OctoPrint and see if you can spot a power-icon with a lightning, possibly red, possibly blinking, in the top-bar. If you click on this, it will tell you what the Raspberry Pi thinks the issue is, meaning you should use another power supply.
A lot more on this issue can be found here.
If your Raspberry Pi it is running too many things at once, it may have a hard time keeping the printer fed with the GCODE commands it needs to print. If you have some bigger, more heavy OctoPrint plugins, you can try to disable them one at a time, start a test-print and check if the performance is better. You can disable plugins by opening OctoPrint and finding the settings (wrench-icon) at the top of the page. Find the “Plugin Manager” tab on the list in the left side. Here you can turn off plugins by clicking on the small icon on the right which looks like a small slider.
Heavy plugins could be; OctoLapse, old abandoned filament-sensor plugins, other cloud platforms (AstroPrint, The Spaghetti Detective etc.)
To test if it's any of your OctoPrint plugins that are halting the Raspberry Pi, causing the issue, try starting OctoPrint up in "Safe mode" which deactivates everything but the pure OctoPrint install.
Open OctoPrint and find the power / "On / off" button at the top of the page and press "Restart OctoPrint in safe mode". Run a test print directly through OctoPrint as SimplyPrint cannot talk to OctoPrint with safe mode enabled. If this does not provide any improvement, the issue may not be OctoPrint related.
However, if the print quality has improved, the problem could lie with one, or multiple OctoPrint plugins. The SimplyPrint plugin could contribute to the issue, but only if the Raspberry Pi is has other issues.
Arc Welder is designed for anti-stutter and GCODE compression - this could help minimize the GCODE commands the Raspberry Pi needs to send to your printer, which could fix the issue.
For this plugin to work, your printer's firmware must support "Arc" GCODE-commands (G2/G3 commands). Additionally, arc support must be enabled and properly configured. Firmware support varies, and many older versions produce arcs less accurately and more slowly than expected. Read much more on the plugin here.
The firmware may limit the amount of data that can be stored on the printer at one time. If everything else fails, firmware can be updated on the machine, allowing the so-called "buffer" to be bigger, and thus keep the printer fed with commands. This will only work for Marlin firmware which is fortunately very common.
Find the firmware you need, if you do not know which firmware you have on your printer, you can usually search for the name of your printer, followed by "firmware". Once you have found the version you want, you can open the file called Configuration_adv.h in a program like Arduino IDE and search for BLOCK_BUFFER_SIZE and set the value that comes right after to 128. Now search for BUFSIZE 32 and set the value that comes after it to 32. Save the file and transfer the firmware to your printer. A guide on how to flash new firmware on your printer will come in the near future.
Why does it happen?
Not all printers are built the same and this means that you can experience different print quality from printer to printer, not just because of the mechanics of the printer but also the printer's way of receiving information. Some printer motherboards are not built to receive printer commands through the USB port very well. They can easily print from this port but it can be limited, how many GCODE-commands it can handle at a time, and thus how fast you can print. The printer will often start showing irregularities like patches of plastic all over the model. These patches occur because the printer's memory becomes full and therefore cannot take in any more information and the print head will momentarily stop. It is still unknown exactly what the solution to this problem is but there are some suggestions to try out.
Solutions
Use a Raspberry Pi with enough power
If you're using a Raspberry Pi Zero, Pi 2 or other less-powerful versions of the tiny computer, chances are your Pi simply can't keep up. See this guide to see pro's and con's for the different models, and let us help you pick the right one; Pick the right Raspberry Pi for running SimplyPrint / OctoPrint
Bad cable - try another
There are several types of USB cables and sadly not every cable is super great. Many Micro USB cables are made solely to charge gadgets like phones and headsets. This prevents the cable from transmitting data that the printer needs. If the cable is very thin, it is a good sign that it does not have all the conductors needed to transfer data.
Incorrect USB port (Raspberry Pi Model 4)
The Raspberry Pi 4 has 2 types of USB ports you can connect your printer to. There are 2 blue and 2 black ports. The blue ports are USB 3.0 and are a newer standard than the old USB 2.0 as the black ports would be. Some older printers have trouble talking to the USB 3.0 standard.
Try plugging the USB connector into one of the black USB ports and see if that solves the problem. Luckily the blue ports are good for something else; attaching cameras!
Try a higher "Baud rate"
When the printer and your Raspberry Pi has to communicate, they need to agree on the speeds of which they will do that. This is called the "Baud rate" and is set when connections are established. It will typically be the motherboard in your 3D printer that sets the limit on how fast they can communicate, but if you have the option to set the baud rate higher then give it a try. To set the baud rate, go to your SimplyPrint printer settings and turn off “Automatic printer connection”. (if you do not do this you will not be able to adjust the baud rate before OctoPrint connects to the printer again). Go into OctoPrint and the "Connection tab" on the left. Press the "Disconnect" button and under "Baud rate", up the value one step at a time, and see if it will connect like this.
Check that your Raspberry Pi gets enough power
It's important that your Raspberry Pi gets the power it needs to run. The Raspberry Pi needs 5 volts to function, and 2 amps. Make sure your Raspberry Pi power supply provides this.
To check if the Raspberry Pi reports that it has undervoltage or power issues, go to OctoPrint and see if you can spot a power-icon with a lightning, possibly red, possibly blinking, in the top-bar. If you click on this, it will tell you what the Raspberry Pi thinks the issue is, meaning you should use another power supply.
A lot more on this issue can be found here.
Disable heavy OctoPrint plugins
If your Raspberry Pi it is running too many things at once, it may have a hard time keeping the printer fed with the GCODE commands it needs to print. If you have some bigger, more heavy OctoPrint plugins, you can try to disable them one at a time, start a test-print and check if the performance is better. You can disable plugins by opening OctoPrint and finding the settings (wrench-icon) at the top of the page. Find the “Plugin Manager” tab on the list in the left side. Here you can turn off plugins by clicking on the small icon on the right which looks like a small slider.
Heavy plugins could be; OctoLapse, old abandoned filament-sensor plugins, other cloud platforms (AstroPrint, The Spaghetti Detective etc.)
Start OctoPrint in safe mode
To test if it's any of your OctoPrint plugins that are halting the Raspberry Pi, causing the issue, try starting OctoPrint up in "Safe mode" which deactivates everything but the pure OctoPrint install.
Open OctoPrint and find the power / "On / off" button at the top of the page and press "Restart OctoPrint in safe mode". Run a test print directly through OctoPrint as SimplyPrint cannot talk to OctoPrint with safe mode enabled. If this does not provide any improvement, the issue may not be OctoPrint related.
However, if the print quality has improved, the problem could lie with one, or multiple OctoPrint plugins. The SimplyPrint plugin could contribute to the issue, but only if the Raspberry Pi is has other issues.
Install the "Arc Welder" OctoPrint plugin
Arc Welder is designed for anti-stutter and GCODE compression - this could help minimize the GCODE commands the Raspberry Pi needs to send to your printer, which could fix the issue.
For this plugin to work, your printer's firmware must support "Arc" GCODE-commands (G2/G3 commands). Additionally, arc support must be enabled and properly configured. Firmware support varies, and many older versions produce arcs less accurately and more slowly than expected. Read much more on the plugin here.
Edit your firmware
The firmware may limit the amount of data that can be stored on the printer at one time. If everything else fails, firmware can be updated on the machine, allowing the so-called "buffer" to be bigger, and thus keep the printer fed with commands. This will only work for Marlin firmware which is fortunately very common.
Find the firmware you need, if you do not know which firmware you have on your printer, you can usually search for the name of your printer, followed by "firmware". Once you have found the version you want, you can open the file called Configuration_adv.h in a program like Arduino IDE and search for BLOCK_BUFFER_SIZE and set the value that comes right after to 128. Now search for BUFSIZE 32 and set the value that comes after it to 32. Save the file and transfer the firmware to your printer. A guide on how to flash new firmware on your printer will come in the near future.
Updated on: 31/07/2021
Thank you!