I started developing a plugin for Octoprint (more specifically Octoprint-on-RPi aka Octopi). It allows you to control relays on a Pi-Plates RELAYplate hat. See here (with instructions) if you are interested in the plugin.
The plugin works by sub-classing Octroprint’s
EventHandlerPlugin mixin to listen for and react to certain Octoprint events:
PRINT_DONE. Fans on for the first two & fans off for the second.
My old RepRap has a RAMPS1.4 control board. Unmodified this allows control of a fan intended for cooling the print object (Gcode
M109) , but no other fans. I have a fan cooling my stepper drivers and one on the hot end.
There is a 12V output on the RAMPS1.4 for such fans but it is always on, and my fans are loud. To date, I have just powered fans directly off the power transformer, with a manual switch for control. I switch it on when printing, off when I want some quiet. Sometimes I forget to switch them on though. Tthis results in a blocked hot end and/or missed steps on overheating drivers.
I wanted fans to turn on automatically only when printing and cooling is needed.
I suppose one could use it to turn off power to non-RPi printer components. Or (in similar vein) an E-Stop.
I had this leftover from a previous project which went in another direction. It’s an RPi hat with 7 relays on it. It mounts as an SPI device. This essentially means it uses up no (? not 100% sure on that) RPi GPIO pins – there are similarities with USB I suppose in this respect, and that you can daisy chain a number SPI devices.
An alternative way to control servos would be via the GPIO pins, with one pin per servo. I have not implemented this. One could, and would probably be more useful to more people.
There is an official Pi-Plates library on pyPi,
pip install pi-plates,
Octoprint runs in a Python virtual environment, and in this environment you’ll probably get the following error if you try and import RELAYplate from the official library:
AttributeError: 'module' object has no attribute 'getsitepackages'
This is caused by the following lines in
import site ... localPath=site.getsitepackages() helpPath=localPath+'/piplates/RELAYhelp.txt'
This issue is not specific to Pi-Plates, and I found more general explanation here. I get the impression it might work on some
virtualenv Python versions, but not others (like the one my octopi is using).
I ended up just taking the
RELAYplate.py code from the official Pi-Plates repo and copying it as a standalone file in my project with the following modifications:
try: localPath=site.getsitepackages() helpPath=localPath+'/piplates/RELAYhelp.txt' except AttributeError: print ("Help disabled in venv mode")