3.8. Why you don’t want to use a Raspberry Pi Zero with OctoPrint on the Prusa i3 Mk3
These notes were written before the release of the Raspberry Pi Zero 2 W. The Zero 2 W is now supported by OctoPrint, although a dedicated power supply is recommended due to increased power requirements.
There is a lot of confusion on whether or not a Raspberry Pi Zero W is suited for using OctoPrint when installed in a Prusa i3 Mk3. Unfortunately, there is a lot of old information floating around out there and Prusa is partially responsible for this by maintaining their PrusaPrint (Rpi Zero and Octoprint) page that describes installation of a RPi Zero inside the EINSY controller case on the Mk3. They have at least added a disclaimer to that page.
Raspberry Pi Zero W has no 5GHz Wi-Fi (only 2.4GHz), and a somewhat weak processor. It does not support using a large amount of Octoprint-plugins or streaming of video and is not officially recommended by the OctoPrint project. Use more powerful models like the 3B+ or the latest RPI 4 to take full advantage of Octoprint. However, they do need to be connected by USB, plus they need a separate PSU, which results in a less clean setup.
The OctoPrint homepage is more direct:
Please note that the Raspberry Pi Zero W is not recommended explicitly since severe performance issues were observed, caused by the WiFi interface when bandwidth is utilized (e.g. the webcam is streamed), negatively impacting printing quality.
This leads to a lot of false hope among RPi entusiasts. How bad can it be? I won’t use it that heavily. Unfortunately, as much as I love my Raspberry Pis, it’s still not a good idea. Here’s why:
The Raspberry Pi Foundation has an article that contains detailed information on how USB is implemented on the various models of RPi The important parts for this discussion are:
Overview for devices prior to Pi 4
[…] In all models prior to the Pi 4, the USB ports connect to a combo hub/Ethernet chip, which is itself a USB device connected to the single upstream USB port on BCM2835. […] On the Model A and Zero range, the single USB 2.0 port is directly wired to the SoC. […] The USB host port inside the Pi is an On-The-Go (OTG) host as the application processor powering the Pi, BCM2835, was originally intended to be used in the mobile market: i.e. as the single USB port on a phone for connection to a PC, or to a single device. In essence, the OTG hardware is simpler than the equivalent hardware on a PC. […] The OTG hardware on Raspberry Pi has a simpler level of support for certain devices, which may present a higher software processing overhead.
This means our beloved Raspberry Pi Zero W is triply cursed:
The hardware USB configuration couples USB throughput to the CPU.
WiFi connectivity shares the USB bus.
The Zero only has a single CPU core to do processing with.
Higher software processing overhead really matters when you’re limited to a single-core CPU and throw wifi into the mix. Even without video, you’re pushing it.
The Raspberry Pi Foundation USB article goes on to describe changes to USB on the RPi 4:
Overview for the Pi 4
For the Pi 4, a fully-featured host controller drives the downstream USB ports. Downstream USB is provided by a Via Labs VL805 chip - that supports two USB 2.0 ports and two USB 3.0 ports.
As 4Bs get cheaper, there’s little reason not to use one, especially now that they’ve defeated the heat demons. A 3B would be the minimum I’d use. The multiple cores can at least handle the IO better.
I love Linux and I love using RPis for all sorts of odd little jobs. The Zero is very cool. I get it. It is simply not the right tool for this job. This isn’t meant to piss in anybody’s Cheerios. The developer of OctoPrint should know and has stated so unambiguously and without conditions.
Contact and feedback
You can find me on the Prusa support forums or Reddit where I lurk in many of the 3D printing-related subreddits. I occasionally drop into the Official Prusa 3D discord server where I can be reached as bobstro (bobstro#9830). You can email me directly at firstname.lastname@example.org.
Last modified 22 Apr 2022. Last build on Apr 22, 2022.