All design files and part lists (BOMs) required to build your own controller are provided in the Downloads section.  The PCB designs were done using KiCAD.  KiCAD design files as well as Gerber files are available in the Downloads section.  For more information on building your own PCB, please see the Arduino RTD Shield – Build Your Own.  Checkout the Resources pages for other useful links.

The information below provides some additional insight into the design and provides project specific instructions (eg. building the enclosures and a custom RTD).  All information below is tailored for the Rancilio Silvia Espresso machine.

The EspressI/O Controller is split into two key components. A 120V enclosure mounted inside of the espresso machine and a 3.3VDC control enclosure mounted outside of the machine.  These enclosures are connected by an 8C RJ45 cable (eg. Ethernet type connectors / cable).  Dividing the components in this way allows the control enclosure (which contains the LCD screen and the user interface) to be electrically isolated from the main line voltage.

A third key component is the RTD temperature sensor which plugs into the control board.  A custom RTD was made for the EspressI/O controller.  Instructions are included below.

The espresso machine does require re-wiring to work with this control setup.  Most of the existing wiring harness is removed and replaced, but no permanent changes are made.  Just hang onto the original wiring in case you want to convert your machine back in the future.  Again, instructions are provided below.

Finally a quick note on the packaging.  Physical packaging was one of the biggest challenges of the design for me.  I stuck with off the shelf enclosures which made it more difficult to find optimum sizes.  The 120V enclosure worked out very well in my opinion, while the control enclosure is a little bigger than it needs to be.

EspressI/O - 120V Enclosure

120VAC Circuit Board

The 120V enclosure contains a PCB with the following major circuits

  1. 120VAC – 3.3VDC Converter
  2. 1x Relay circuit for 3-Way Valve Control
  3. 1x Relay circuit for Pump Control
  4. 3x 120VAC – 3.3VDC control circuits to detect Brew, Hot Water and Steam Toggle Switches
    • Each switch circuit uses an optical logic switch to achieve 120VAC isolation

Board Inputs and Outputs are as follows:

  1. 7x 120VAC Inputs / Outputs via 0.25″ Quick Connectors – consistent with the rest of the Silvia’s wiring connectors
  2. 1x 8P8C RJ45 Connector for 3.3VDC power and logic signals to/from the Control Board
  3. 1x 2P Screw Terminal Connector for SSR 3.3VDC Control Signal Output


120V Enclosure

For the 120V Enclosure I started with a 1411CU Aluminum Enclosure from Hammond Manufacturing.  This worked out to be just about perfect (another 2mm shorter and it would have been perfect).  Here are the modifications I made to the enclosure:

Step 1: Add PCB standoffs to the bottom half of the enclosure with JB Weld Epoxy (or equivalent)

  1. Attach the standoffs to the PCB with the M4 screws; just snug enough so they don’t move.
  2. Test fit to make sure all looks good.
  3. Rough up the bottom of the Standoffs as well as the inside of the enclosure where the standoffs will be epoxied in place to ensure good adhesion; also make sure they are free from dirt and grease.
  4. Apply just a little JB Weld to the bottoms of the standoffs.  Be careful not to get any on the PCB or to apply too much to the standoffs as it may get into the threads and glue your screw in place permanently!
  5. Let the JB Weld fully cure as per the instructions (I can’t remember, but I believe it’s 16 – 24 hrs).
  6. Take the screws out and you should be able to remove the PCB and have 4 standoffs attached!
  7. (Optional) To make sure everything is good and strong, I mixed a bit more JB Weld and applied it like a small fillet weld around the outside of each standoff for a bit of extra insurance.

Step 2: Drill Mounting Hole in Bottom of Enclosure

Unfortunately I didn’t take specific pictures for this step.  The pictures below are of the final product.  I’ve used them here to give a better idea of enclosure placement inside the machine.

  1. First note that there are a number of existing holes in the bottom plate at the back of the machine.
  2. Place the bottom half of the enclosure in it’s final destination at the back of the espresso machine; it will cover some of these holes noted in step one.
  3. Tip the espresso machine over so that you can access the bottom of the machine.
  4. Make sure that your enclosure is still in the proper place, and use a marker from the bottom to mark a center mark through one of the existing holes in the bottom of the machine.
  5. Make sure you choose a hole that does not interfere with the standoffs.
  6. Drill a hole in the bottom of the enclosure as marked; I used a #10 machine screw and nut, but use whatever you have laying around that works and drill the hole accordingly.
  7. Test fit mounting the bottom half of the enclosure; if you’re a bit off you may be able to drill your hole large for some extra tolerance.

Step 3: Cut Openings in the Top Half of the Enclosure to Provide Access to the Connectors

I had taken measurements when laying out my openings; unfortunately I can’t find them now.  When / if I build another one of these I will try to take some more measurements and include them here.  For now, I don’t think it’s a big deal.  You can lay these out easy enough.

  1. Mount your PCB in the bottom half.
  2. Set the top half on top and make the marks for opening widths on both sides.
  3. Set the top half next to the bottom half and make the marks for the opening height on both sides; leave extra room for height and width to allow room for the connectors.
  4. Use a square to “connect the dots” and form your cut lines
  5. You can use snips, a jigsaw or a die grinder to cut out the openings.  I chose the latter; not sure if it’s the best method.  Definitely not the cleanest!  If you do use a die grinder, use cutting oil, or a WD40 liberally to avoid clogging your cutting tool.  By the way, don’t try use a cutting disk on aluminum.
  6. If you go the die grinder route, you end up with something like this.
  7. Use a file to square out any edges as required; again, use cutting oil or WD40 liberally to minimize aluminum gumming up your file.


Step 4: Mount the PCB and Enclosure

  1. All the parts are complete, now we just need to assemble!
  2. Before installing the PCB, mount the bottom half of the enclosure into the back of the espresso machine
  3. Install the PCB into the enclosure with the M4 screws
  4. BEFORE installing the top half, make sure to complete your wiring.  You will need the top off to install your SSR wires into the screw terminals.
  5. Once ready, to install the top half of the enclosure, I removed the pump screws to get better access to the enclosure side screws

NOTE: To ensure continuity, remove the plastic film that is on the enclosure BEFORE you mount the new ground lug that is part of the new wiring.  See more on the new ground wire in the Wiring Section below.


Silvia PID Controller

I did not document the Control PCB and Enclosure builds as thoroughly; so pictures are a bit sparse.  If I do another build, I will aim to supplement with additional pictures in the future.

Controller Circuit Board

The controller circuit board contains the following major components / circuits:

  1. 16 Bit PIC Microcontroller
  2. ADS1220 RTD Circuit
  3. EEPROM to store saved values
  4. Rotary Encoder for user input
  5. ICSP Header for in circuit programming
  6. LCD Screen (Plugs into 2x 6P Female Header Receptacles)
  7. Mosfet to power LCD On/Off

Board Inputs and Outputs are as follows:

  1. RJ45 Connector to connect to 120V PCB
  2. SATA Right Angle Connector for RTD


Note: When building the control board, on the SATA receptacle make sure you solder down the signal pins and the thru board metal mounts to ensure a sturdy installation.


Controller Enclosure

For the Controller enclosure I started with a 032C Enclosure from Serpac.  The enclosure is a bit larger than required, but still worked out decent.  The materials required can be found as part of the Controller PCB BOM in the Downloads section.  Here are the modifications I made to the enclosure:

Step 1: Add Standoff (Similar to the 120V Enclosure instructions, but we are only adding one)

I used 3 of the 4 provided PCB mounts that come as part of the enclosure, but for the 4th (bottom right) I had to add a new one.  This fourth one could be omitted altogether, but it adds rigidity for when the cables are connected / disconnected to the board.

For the 4th mount, the spacer we add needs to be slightly longer since the other 3 mounts are built up slightly at the base (see enclosure datasheet for details).

  1. Loosely screw the PCB onto the enclosure base using 3 of the 4 factory mounts and the #4 Spacers.  Use the #4 screws listed in the BOM.  Do not snug the screws down at this point.
  2. Take the longer #2 Nylon spacer and sand it down ~1/16″.
  3. Snug down the 3 screws and test fit the #2 spacer; sand until it fits snugly under the board and the PCB.Silvia Controller PCB
  4. Once you have the #2 spacer sized properly, rough up the sides with sand paper as well as the base of the enclosure where the new standoff will be epoxied.  Make sure this is done well as Nylon is very slippery and I had mine come loose the first time.
  5. Separate the PCB from the enclosure base and loosely attach the #2 spacer to the PCB board with a screw; use a #4 as called for in the BOM, it will self thread into the nylon with some medium effort.
  6. Mix up JB weld epoxy (or equivalent) and apply to the bottom and sides of the #2 spacer.  Not too much as we don’t want to fill the inside of the standoff with epoxy.
  7. Screw the PCB onto the enclosure base again using the other 3 mounts; snug it down so that the #2 spacer is held snugly against the base. We can add an epoxy “fillet” around the standoff now for extra strength as well.
  8. Allow epoxy to cure fully as we don’t want the new standoff to come loose.
  9. Once the epoxy has cured, screw the 4th screw down completely.  Important: If the 3/8″ long #4 screws from the BOM are used, the 4th screw either needs to be trimmed shorter, or a couple washers need to be used as it’s just a little too long and will damage the standoff or base if screwed down all the way.  The full length screws can be used for the other 3 positions.

Step 2: Modify the Enclosure for the Encoder and Connectors

  1. Screw the controller PCB into place on the bottom half of the enclosure (if not already in place from the steps above).
  2. Here we will mark where to drill the hole for the encoder shaft.  Place the clear top half over the board.  It will not seat because the encoder shaft is too long, but try to line the top up with the bottom half as best you can by eye.  Then use a marker to place a mark on the plastic right in the center of the encoder shaft.
  3. Drill a 3/8″ hole at your center mark; this will allow some tolerance for your 0.25″ encoder shaft.  Test fit and if it’s a bit off, drill it bigger.  The knob you put on will hide the hole unless you end up having to drill a really big hole!
  4. Once the hole is drilled and you can mate the top with the bottom, mark the cut out for the RJ45 and SATA connectors using a marker. Silvia Controller Enclosure
  5. I used a jig saw to cut out the opening (ignore the utility knife in the picture; I tried scoring the final line like you can with acrylic, but it did not work here).  (Send me any other solutions you have for cutting the opening).  I clamped my jig saw upside down into my wood vice, and used it like a scroll saw.  I used a jig saw blade for acrylic and it worked quite well.  Another benefit of the jig saw is that it’s open ended and does not interfere with the other end of the enclosure (assuming your blade isn’t too long and doesn’t impact it).  I took multiple cuts to remove material and eventually got a pretty square opening.

Step 3: Finishing Touches

  1. Sticking with my criteria to avoid permanent modifications, my solution to attach the controller is via magnets.  I used JB weld once again to adhere the magnets to the back of the enclosure.  I placed one directly under the rotary encoder to ensure no wobbles when applying pressure to the encoder button.  One other thing to note, keep an open path for the Ethernet and SATA cable in case you want to install this in the alternate position down the road.  Finally, don’t worry, the magnets don’t interfere with the electronics.  Before using them, I did some testing.  The only effect I could find was that if I moved them around in relation to the SATA cable I could get a 0.1C variation in temperature readings. In the permanent install, the magnets are static. 
    EspressI/O - Alternate Mount
    EspressI/O – Alternate Mount
  2. Once you have the magnets attached and cured, you can put everything together and put on a knob of your choice onto the rotary encoder.  When installing the knob, make sure there is room for the push button action.
To ensure accurate temperature readings with minimal lag, I decided to make a fit for purpose RTD sensor for the Silvia Boiler.  The RTD sensor design I came up with screws into one of the mounting holes and uses commonly available components.  Essentially I’ve mounted a small PT100 probe inside of a brass PCB standoff that can then be screwed into the boiler.

My choice of a SATA cable for the RTD may seem odd, but it was the best I could come up with that met the following criteria:

  • Low Profile 90degree or very short connector dimensions (for plugging into the control board and to keep overall install streamlined)
  • Shielded Cable
  • Minimum of 3 conductors (not including shield grounds)
  • Readily available
  • Thin – ideally flat – cable type to fit between small gap in Silvia body panels to avoid drilling any holes

RJ10 cable was my first choice, but I had trouble finding shielded versions and if the shielded RJ45 connectors and cable are any indicator, the connector dimensions and cables become quite bulky.

Before getting to the step by step instructions, here are the materials you will need; note that the components are listed in the control board BOM as well along with Part # references where applicable:


  1. 1x M3 Brass Male x Female PCB Stand-off, Overall Length = 16mm, Board – Board Height = 10mm
  2. 1x PT100 RTD Sensor
  3. 1x SATA Cable, Right Angle Connector, 24″ Length
  4. 1′ Heat Shrink, Flexible, 0.236″ Inner Dia, 3:1 Shrinkag
  5. 1′ Heat Shrink, Flexible, 0.092″ Innder Dia, 2:1 Shrinkage


  1. Thermal Grease
  2. Silicon (Rated for 200°C or higher)


Step 1: RTD Probe

  1. Secure PT100 sensor in a slit of cardboard or similar; careful not to damage it.PT100 Sensor
  2. Separate the leads enough to ensure we can get silicone in between and achieve isolation but keep them within the width of the sensor head so that we can fit everything into the standoff.
  3. Using a toothpick or other small applicator, apply silicon (I used high temp silicone) to the bottom 3/4 of both leads.  A good check to perform before applying silicon is to insert the probe into the standoff; the length of the leads that extend out of the standoff should be left uncovered as we will need to solder to them later.  DO NOT apply silicone to the sensor head!PT100 RTD Sensor
  4. Allow the silicone to fully cure ( 8 – 24 hrs) before proceeding.
  5. Take the brass standoff and inject some of the thermal grease inside.  Ideally with a small syringe to avoid mixing with silicone in the coming steps.  If all else fails, after injecting the thermal grease, try to wipe the inside of the stand off as best as possible near the top with a toothpick and some cloth.
  6. Insert the PT100 probe into the brass standoff.
  7. Apply silicone into the standoff to secure the RTD sensor; remember to leave the exposed leads clean and bare so we can solder to them.
  8. Allow silicone to full cure (8 – 24hrs)
  9. The final two steps here confirm that the installation went as planned.  Take a multi meter and check the resistance between the two leads.  You should see 100 – 110 ohms.  If you have zero, unfortunately you have a short and likely need to start over.
  10. Take a multi meter and hold one of the meter leads so it’s touching both RTD leads, and the touch the other multi meter lead to the brass standoff.  You should not have any continuity if everything is insulated properly.


Step 2: Cable Preparation


  1. Cut off one end of the cable; make sure you leave the Right Angle 90deg connector intact.
  2. Cut a ~6″ or longer piece of the larger heat shrink and slide it onto the SATA cable; slide it up and out of the way for now.
  3. Using Quick Strippers, or a utility knife, strip back the SATA cable outer insulation 2 – 3″ to reveal the shielding.
  4. Unwind the shielding around all 4 wires; leave the shielding and the bare ground wires intact.
  5. You will know have 4 white conductor wires, cut about 1/4″ off each conductor (we’ll see why during assembly), and then strip a small amount off each end of each conductor.  Do not cut the 4 bare wires – ground wires – shorter; leave them as is.
  6. Using a multi meter, identify and mark the two -RTD and one +RTD wires as per the PCB connector diagram below.  Remember, the layout below is of the connector on the PCB and is what you will plug into. 
  7. Triple check you have your wiring identified correctly, you don’t want to mess this part up.
  8. Cut two pieces of the smaller heat shrink; about 1″.  Enough to cover the bare RTD leads, but short enough that you can still physically assemble everything.
  9. Cut the unused white conductor short to get it out of the way.

Step 3: Assemble the RTD Probe and Cable

  1. We now need to solder the RTD leads to the cable leads; use some rigging to minimize strain on the RTD leads as they are delicate.  The RTD leads are interchangeable, but we need to make sure the cable conductors are properly identified as per the steps above.
  2. Solder both -RTD conductors to one of the RTD leads using some liquid flux and solder.  Be careful not to hold your solder iron on the lead for too long as you could overheat the RTD and damage the probe. 
  3. Solder the +RTD conductor to the other RTD lead.
  4. Slide the small heat shrink sleeves over both solder joints and use a heat gun to shrink them.
  5. Re-wrap the shielding foil that we had pull back previously, and position the 4 ground wires over top of the brass standoff (this is why we cut the conductors 1/4″ shorter when prepping the cable).  Having the shield ground wires grounded to the machine will ensure the shielding is effective.
  6. Making sure the foil shielding is in place, and the 4 ground wires are over top the brass standoff, slide the large sleeve into place and heat shrink to complete the cable.
  7. As a final check, take a multi meter again and check continuity is as expected at the connector end:
    1. -RTD to -RTD should be close to zero
    2. -RTD (either wire) to +RTD should be 100 – 130 ohm
    3. Any of the 4 ground contacts to the brass standoff should be close to zero
  8. One final step that I did was that I did add a small tie-wrap around the heat shrink and brass standoff as seen in the picture below.  Although the heat shrink is rated for 135C, it becomes soft at 100C and the small ground wires loose contact with the brass.  The tie wrap keeps everything in place during operation.



Silvia Wiring

In order to tie everything together, the espresso machine will need to be re-wired.  The updated schematic for the Rancilio Silvia is provided below and is available in the Downloads section.  I provide some notes and pointers below, but this is not an exhaustive set of instructions.  I believe this part can be tackled by most people taking a project like this on, but feel free to send me any questions.

Silvia PID Schematic

Please note that this schematic is not a point to point wiring diagram.  It also does not accurately represent the 120V Board Connectors; I’ve provided a call out below for the 120V connectors.

Mounting the SSR

The SSR is mounted on the black back plate that separates the boiler from the reservoir area.  The SSR is to be mounted on the front side of the plate so that it will not interfere with the water reservoir.  This back plate provides a secure mount and doubles as a heat sink for the SSR.  To position the SSR, with the back plate still installed set the SSR in place and mark its position using a pencil or marker.

Remove the back plate, re-position the SSR using the markings from before and mark where the holes need to be drilled.  Note that I tapped my holes so I would not need nuts.  This is optional.

Once we have the holes drilled (and tapped if desired), we apply thermal grease to the back of the SSR and mount it to the front face of the plate.


Wiring Notes

If enough people are interested, I can provide a point to point wiring diagram in the future.  For now you can use my pictures as a starting point; albeit my lengths didn’t end up being perfect and my wire management could be better.

To start I removed all of the factory wiring harnesses and I removed the black back panel that separates the boiler from the reservoir and pump area (the same panel that we removed to mount the SSR per above).  I made the live and neutral harnesses first as they are the largest wiring assemblies.  All wiring gauge should be 18AWG TEW minimum as per the original wiring harness.  The only exceptions are the RTD cable, the 8C Ethernet cable and the 2x 3.3VDC SSR control wires.

For the wiring connectors, I used similar connectors to the factory harness as they are nice to work with and they maintain a factory look.  Exceptions were made for the 120V PCB connectors as the spacing is too tight.  For these I used quick connects with slim insulation.  For the back 3 connectors on the 120V PCB, 90deg connectors were used due to space constraints.  Note that I did re-use the original orange 3-way valve wire as is; therefore it still has the factory connector on it.

As mentioned in another section, to wire up the 120V connectors, it’s much easier to unbolt the pump.  The pump plumbing can be left in place, but undoing the mounts allows for you to move it out of the way as well as access the pump contacts more easily.

Run two small (20 – 26 AWG) wires from the 2 position screw terminals to the VDC control pins of the SSR.  Install the top of the 120V Enclose and screw it in place after the SSR wires are fitted.  When installing the top, make a new ground wire and attach it to one of the enclosure screws and connect it to the espresso machine frame (use an ohm meter to confirm continuity). 

Once you are complete the wiring terminations, install tie wraps as needed to keep all wiring away from the boiler, steam line, and anything else that will get hot.

120V PCB Connection Call Out

Reference picture for 120V PCB Enclosure Connections

RTD Cable

Before installing the RTD cable in the boiler even, it’s a good idea to perform the RTD calibration / offset.  See the User Manual section for details.

Install the RTD cable after all other wiring is complete.  To install the RTD, you will need to rotate the whole cable assembly.  Therefore, screw in the standoff into the boiler before routing the cable to it’s final position.  Once the standoff is screwed into the boiler you can route the cable between the gap in the front face plate and up to the control panel.  Any excess cable should be bundled and tie wrapped together inside the machine.  

Note: If you are unplugging the SATA cable from the board, it’s best to use a flat screw driver to get in there and twist against the receptacle and pry it away.  SATA cables aren’t designed to be unplugged / plugged frequently and they don’t come out easily.

8C Ethernet Cable

Install the Ethernet cable to connect the 120V PCB and Control PCB after the main wiring is complete.  Run the Ethernet cable to the front similar to the RTD cable; route through the gap in the front face plate.  Note that the Ethernet cable should be unshielded; this allows for a shorter connector and a flat cable type that will fit through the available gap.  A shielded cable will not provide any benefit as no means to ground the shield have been provided in this design.