top of page


I feel like most people like things to be simple. Maybe I'm wrong, maybe I'm the only one. Maybe everyone else enjoys "rolling around" the poorly translated menus of their 3D printer using a single knob. Maybe that's why they build em' that way, cause you like it, your weird like that. For those of you who don't have time for that... meet the OctoBuddy:


OctoBuddy is a human buildable button panel that interfaces with your 3D printer via OctoPi to perform common actions at the push of a button.  Letting you speed up things like maintenance, troubleshooting, and filament changes much quicker and easier by bypassing the need to access OctoPrint interface or cumbersome printer menus.

Below is everything you need to build your own OctoBuddy.  I build this stuff because I enjoy it, I make it available to you because, well why not.


If you like my work and want to contribute, click this button:

 OctoBuddy Flavors 


There are currently two panels available for the OctoBuddy:

OctoBuddy Flavors

Table Top 

Sits on a table, cool.

Ikea Shelf Mountable

 This one attaches to the Ikea BROR shelving unit or any hard surface that will take a screw

If these don't fit your needs you can always make your own. The OctoBuddy plugin was designed to allow any push buttons to work with any usable GPIO ports on your Raspberry Pi to perform common printer actions. Simply add the plugin to OctoPrint, connect a button to a GPIO pin, then associate a printer action with the port in the OctoBuddy settings. For more information see the "Configure OctoBuddy" section below.  Note I have not fully tested the plugin on Pi 4 yet.  It should theorhetically work however there may be issues until I have time to test it.


 What You Need 


Print Files: Get them here

Raspberry Pi with OctoPi installed: OctoPi is supported on many Pi models however I have only built a mounts for 3 B+ and 4.  Go here for instructions on how to install and use OctoPi.

Buttons: The mounting holes should fit most square push buttons. I used these ones from Amazon.  Note that you can use other push buttons, particularly if you build your own base.  This tutorial however, assumes you are using these square type push buttons.


Screws: Used to attach the Pi and put the pieces together


Wire: Will need this to wire the buttons up. I used 24 guage as it sturdy but flexible enough to be ties together in clusters. You can get the wire I used here.


Connectors or Solder: I soldered the wires to the button terminals however if you don't want to get into that you can always buy crimp able connectors like these.


Pin Connectors: I used these to attach the wires to the GPIO header on the Pi. A kit like this comes with what you need.



 Task 1 | Printy Printy   
Start by printing the OctoBuddy you want to build.  In the print files you will find the following elements.

Table Top Version


  • Table Top Base: This can be printed with the top side down on the build plate. The longest axis should be 244mm at proper scale.

  • Table Top Front Panel: This is the panel the buttons attach to. It attaches to the base using some screws. I print it with the back down. The longest axis should be 242mm at proper scale.

  • Pi 3 Mount: This attaches to base and holds your Raspberry Pi 3 Model B+. The longest axis should be 90.6mm at proper scale.

  • Labels: These are some labels that are only a few mm tall and fit inside the face of the square push buttons

Shelf Mountable Version

  • Surface Mount Base (One Piece): For printers with build volume of 380mm+. Print standing up with the points on the shelf mounting holes facing up. The longest axis should be 380mm at proper scale.

  • Surface Mount Base (Two Piece): Same as above just in two pieces so you can print in a smaller build volume and glue together.

  • Pi 3 Mount: This attaches to base and holds your Raspberry Pi 3 Model B+. The longest axis should be 90.6mm at proper scale.

  • Button Labels: These are labels that you can glue into the slots to the left of the buttons. I've included 12 here, 6 translation controls plus home, pause, and resume, set bed temperature, and set nozzle temperature. I kept them as separate elements so you can arrange your buttons based on your preference.  I included one piece and two piece variants so you can either do a solid color (one piece) or multi color (two piece) by printing the pieces separate with different color filaments.  



 Task 2 | Assembly  

Table Top Version

  • Attach the front panel to the base using (4) small screws

  • Attach the Pi mount using the mounting holes on the rear right of the base

  • Attach the Pi to the mount using (4) small screws. I recommend mounting the Pi after you have completed wiring

  • Insert push buttons into each mounting hole and tighten nut on push buttons

Shelf Mountable Version

  • Attach the Pi mount to the base using (3) small screws.

  • Attach the Pi to the mount using (4) small screws. I recommend mounting the Pi after you have completed wiring

  • Insert push buttons into each mounting hole and tighten nut on push buttons

Once you have assembled the printable pieces and installed the buttons its time to wire everything up.

 Task 3 | Wiring

What You Need
Printy Printy

On the bottom of each push button you should find a microswitch (technically called a snap action switch), highlighted here:


Yours may not look exactly like this if you are not using the buttons I linked above.  Some even have this switch integrated.  Thats OK, the wiring principles will remains the same.  

Each microswitch has 2 or 3 pins depending on the type of button you are using:


  • Pin 1, Common (COM). This is your common pin. It connects to one of the other pins depending on what state the button is in (pushed or not pushed)

  • Pin 2, Normally open (NO). "Normally Open" means that when the button is not pushed then the pin does not make contact with the common pin, i.e. it is normally in an open state. When the button is pushed the internal mechanics connect the NO pin to the COM pin which puts it into a closed state with the COM pin.

  • Pin 3, Normally Close (NC). The NC button is the opposite of the NO button. When the button is un-pushed the NC pin is in a closed (connected) state with the COM pin. When the button is pushed the connection becomes opened as the common pin is physically switched away from the NC pin to the NO pin. Not all microswitches have an NC pin, that's OK, it's not required and we won't be using it for our purposes.


If you have a lighted button you will see two other pins coming out of the side of the button, not connected to the microswitch. These are for the internal LED light, we will get into that in a minute.


In order for your button's to control you printer each needs to be connected to your Raspberry Pi's GPIO interface. The GPIO interface consists of 40 pins found opposite the HDMI and power connector on the Pi.  It looks something like this:


Note the pin numbering.  This numbering is called BOARD numbering as it corresponds to the physical pin locations on the board.  This is opposed to BCM (Broadcom SOC Channel) numbering that you may see elsewhere when dealing with GPIO.  To keep it simple OctoBuddy uses BOARD numbering as seen in the diagram above.

The color on each pin to help us understand what they do. 


The yellow pins represent usable GPIO pins.  These are pins that can be configured to be used as either an input or an output.  The OctoBuddy plugin uses and automatically configures these pin as inputs and the plugin handles the configuration of them.  The NO pin on each of your buttons will connect to one of these pins.  One pin, per button.  So if you have 5 buttons you will use 5 yellow pins.  It doesn't really matter which of these pins you use as long as you use the yellow ones.  Pick one for each of your buttons, grouping them as much as possible and write them down, you will use this later when setting up the OctoBuddy plugin.

The orange pins are the 3v3 pins.  This pin puts out 3.3 volts when you Pi is powered on.  This is the pin we will connect to the COM pin on all of our buttons.  Connecting one button should look like this:


When the button is pressed the 3.3v coming from the orange pin will pass through the microswitch and into the yellow GPIO pin that the button is connected to thereby pulling the pin HIGH and registering an input.  

To connect additional buttons simple connect each buttons NC pin its own yellow GPIO pins and daisy chain the 3.3v wire to the COM pin on each button, as seen in these examples:

The final thing we need to wire is the button lighting.  If you are not using illuminated buttons you can skip to the next section. 


If you are using illuminated buttons you should see one pin coming out of each side of the buttons body, as seen here.

You will provide power to them power using (1) 5v and (1) ground pin from the GPIO.  The 5v pins are the ones colored in red above while the ground are colored in green.  Simply daisy chain each pin together and connect one side to a red 5V pin and the other to a green ground pin, like this:



Note that the illuminated buttons I used didn't have any markings to indicate polarity.  If yours do have markings then the "+" goes to 5v and other goes to ground.  If you don't have markings you can take a guess.  Once you power it up if any of the LEDs don't light just pop out the LED component and reverse the LED in its socket.

Once your done you will have something that looks like this:


 Task 4 | Install OctoBuddy

Follow the steps below to install OctoBuddy:

  • Login to your OctoPrint

  • Go to Settings -> Plugin Manager -> Get More (Scroll all the way down)

  • Once OctoBuddy has installed restart your Pi when prompted and continue to the next step.

 Task 6 | Configure OctoBuddy

The final step is to tell OctoBuddy what you want your buttons to do by tying the connected pin to an action.  You can currently perform the following actions with OctoBuddy:

  • Jog any Axis

  • Home the print head

  • Toggle the Bed Temp to a defined temperature and 0

  • Toggle the Nozzle Temp between a defined temperature and 0

  • Pause a Print

  • Resume a Print

To setup the configuration boot up OctoPrint and go to Settings -> OctoBuddy.  The settings screen should look something like this:

Insall OctoBuddy Plugin

To configure an action set it to the yellow pin # for the button that you would like to perform the action.  If you don't want to use an action simply set it to Disabled.

You can also customize a few other settings such as:

  • Bed Temperature: The temp that the bed will heat to when "Set Bed Temperature Action" is activated

  • Nozzle Temperature: The temp that the nozzle will heat to when "Set Nozzle Temperature Action" is activated

  • Debounce Time: This has to do with preventing multiple button presses from registering due to fluxuations in voltage when a button is pressed.  If you find that commands are happening more than once (i.e. printer homes twice) then try increasing this numbers a bit.

  • Job Increment: The distance in millimeters that the print head will move when you press one of the job axis buttons.

Testing your OctoBuddy



Once you have finished configuring everything hit the save button, connect your printer via OctoPrint, and try pressing something.  Your printer should perform the cooresponding action.

If you are having issues double check your settings and wiring.  If you have any wires touching or crossed then it may fail.  The OctoPrint log may also give you some insight into what's going on.  

Congtratulations!  Assuming all went as planned you should now have a functioning OctoBuddy!  

Testing Your OctoBuddy
bottom of page