DIY Connected Espresso Machine: Archeology (Part 1)

Danila Loginov
6 min readMay 30, 2021



Years ago, back in 2015, when I started to learn Arduino, one of the first projects was a connected coffeepot. It got own web server serving a “rich” HTML page controlling the coffeepot from the Internet via REST API. Back in that time, it had a simple Ethernet connection and frightening breadboard installation.


Since then I had a gestalt (this article was started in 2018) to connect it to the Wi-Fi and to share my experience that can help others to enjoy making old things smarter and, eventually, to show how it’s simple to turn almost anything into the “IoT” device.

There is nothing really special in the expensive “smart” home appliances, so I hope with this series of articles you’ll get fun from connecting your “dumb” old coffeemaker/teapot/anything to the Internet.

I decided to split this material into a number of parts to be able to eventually finish the whole tutorial since it’ll have a lot of information. We’ll come to the HTTP REST API implementation, and also I would like to control this one with the help of Google Assistant.

However, this is an introductory part and it’s mostly about the coffeemaker hardware components. Let’s get it started!


What I have is 10 years (= I don’t know) old De’Longhi espresso machine inherited from my parents’ lumber-room. I even managed to find it on the De’Longhi website: EC 190.CD!

The Hero (or a guinea pig)

I suppose all machines of this kind type have similar hardware and the bad thing about it is that it’s not automatic. On the other side, knowing how to make this type connected you can make smarter any kind of espresso machine. Maybe someday I’ll steal an automatic coffeemaker from the office and continue my tutorial (kidding).

So, my machine can heat water for espresso and make steam to froth milk for cappuccino. It also has a red light to determine when the boiler is working and a green light saying when you can start making your cup of delicious espresso. Aaand… that’s it. Not much, but however, this can’t stop me from connecting it to the Internet.


Head Explosion

After the removal of a couple of proprietary screws here and there, we see no electronics, just a web of colorful AC wires between components, toggle, and lights.

Water Pump

The first important component is a water pump connected with two blue wires and obviously has only two states: on and off. A water pump can be considered as the heart of the espresso machine because it creates pressure from the water tank to the portafilter and impacts most of the coffee parameters.

Water Pump

The blue pipe is connected to the water tank and is a source, while the thin half-white/half-transparent pipe is a destination and connected to the boiler. The big transparent pipe is a back-haul for oversupplied water.

This is a vibratory pump made by ULKA and of a typical implementation for espresso machines. Please check this great video by billcrossland to see how it works:


The next point of our decomposition is a boiler. It’s connected with red wires, one of which has a thermal fuse incut to protect the boiler from overheating. Clearly, we better leave it in place.

On top is a steam valve to relieve pressure down to the milk frother. The valve is pretty tough, and I don’t know yet how to automate it.


On the side, there is a port for water pipe and a holder for thermistors. The only thing it tells about itself is a mysterious “9090”… or “0606”.


Two thermal resistors are pinned to the boiler via some kind of thermal grease to improve heat transfer. I used a multimeter to determine how they work and found that thermistors are closed by default and open when the required temperature is achieved.

Turns out these thermistors are bi-metal, similar to that applied in teapots. Experiments showed the first of them has an operating temperature of 115 degrees C and the second has 125 degrees C — for espresso and frother respectively.


What else? Red and green lamps to indicate work modes have a cross-connection with other parts of the machine. I don’t think we will use them, because we don’t know their specifications, so it’s easier to replace them with LEDs to control right from a microcontroller.


Well, the only part left is a toggle on the front panel. It’s also wired with other parts, but if we want to control everything programmatically, we need to connect it directly to the microcontroller as well. The toggle has four states:

  • off (neutral)
  • make steam (left)
  • boil (right)
  • pour water (far right)

I’m not sure if the far-right position keeps the boiler working while pouring water, but, after all, we can make it as we want. It has a couple of pins, so I armed myself with a multimeter to find out what’s going on inside.

Toggle Schematic View

Different states of the toggle close connection between different pins, and we can connect each of them to the microcontroller, but I had a slightly better idea.

We can solder them with resistors of different resistance and left only two wires with resistance depending on the toggle state, something like a rheostat.

Having such kind of potentiometer will allow us to use a single analog input to determine the toggle state. It took me a while to get things working properly, but here is the final scheme:

Toggle Resistance Scheme


Now, what about the microcontroller? Initially, I built this project with Arduino Uno, but as mentioned earlier needed to connect it to the Internet over Wi-Fi. This is achievable by simply adding a Wi-Fi module, but a better idea is to use a Wi-Fi board as a self-sufficient controller.

A good candidate for that is NodeMCU — a five-dollar open-source IoT platform based on the ESP8266 Wi-Fi system on a chip. I already covered how to quickly start with NodeMCU, Arduino ecosystem, and PlatformIO IDE — actually, this was written when I switched the project to NodeMCU.

Assembled Controller Board

Next Steps

The nearest plan is to show how to:

  1. Wire all the hardware components to the controller.
  2. Switch modes with the hardware toggle.
  3. Switch modes programmatically.

Those are fundamental items to continue with further improvements.

The project code is available here: — it’s not finished by the moment I write this article so I will work on this during the next episodes.

That’s all for today, see you next time!

Next part: