Enable Javascript

Ster inactiefSter inactiefSter inactiefSter inactiefSter inactief


My Proofing and Holding (Cabinet) Base
Includes a bread baking example with my 'my way' hints!
Also usable as Yogurt Maker and Chocolate Melter
ESP32 with PID-controller
-thermistor, Touch Screen
Over The Air firmware-update
Included a HTML WebSocket Client

(click thumbnail)

What kind of thing is this?
Simply said, a warming plate, for in a cabinet, with ProportioneelIntegrerend, Differentiërend temperature control and a countdown timer.
Temperature: selectable 20-50°C (optional up to 80°C).
Countdown timer: selectable 00:05-12:55 (hh:mm), in steps of 1 hour and/or 5 minutes.
Two bread rise presets: 1st rise 27°C and 2nd rise 29°C (or at your own choice in the code).
2.8" Touch Screen, 320x240px (6x4.5cm).
START: here in use with Radio button 'Preset 27', minutes to go 26, thermistor measure 26.8°C (red: PID=ON), heat plates 1-OFF and 2-ON, circulation fans ON.
STOP: pause and press START to go on, or 'if time has run out' STOP is RED and the buzzer Beeps, press STOP to stop the Beeps.
RESET: back to initial settings. Easy after pre-heating.
Also included a HTML WebSocket Client, with temperature and time information.

ESP32 Proofing and Holding Base:
My easy to bult and use 'Proofing and Holding Base' let your bread dough rise perfectly and can also be used well as a 'Yogurt Maker' and/or 'Chocolate Melter'. Design and build your own (foldable) cabinet for this project. I use a flat foldable cardboard box, without bottom, that fits in a kitchen drawer. I cut the folds and then made it foldable with tape. But panels and lid with Velcro might also be a good idea. Mounting in an existing and suitable cabinet is of course also a good option.
NOTE: If higher temperatures are used, thermally insulate the plastic parts and install a reflective base plate between the/or additional M8 spacers. The maximum temperature to be reached can be changed in the software, limited by the PTC thermistor Heating plates 50W/80°C.
in code:    const uint8_t tempMax = 50;  // max 80*C
But be aware that mains voltage is life-threatening.

Three external libraries are used:
Download and install:
   Dlloydev: QuickPID
   Links2004: WebSockets
   Bodmer: TFT_eSPI
Copy these two header files
Do not forget this, otherwise you will not see anything on the display!
If on compile time: "sha.h" compiler warning change these line in WebSockets.cpp
    #include <sha/sha_parallel_engine.h> //<esp32/sha.h>
    #include <hwcrypto/sha.h>

Connection diagram in Fritzing:
Open  ...\Proofer\more\Proofer.fzz or ...\Proofer\more\Proofer.png
    (click thumbnail)
Attention: An ESP32 cannot work simultaneously with USB and an external power supply, the ESP32 will be broken. Don't forget to use the power jumper.
Hint: Place the power jumper, with a striking color, directly under the ESP32 USB connector.

Method of heating:
Up to 8°C below the target temperature both elements are ON, then the PID controller switches them ON/OFF alternately as required.
in code:    const uint8_t threshold = 8; // 2 or 1 plate(s) on heat ON

OTA firmware-update:
Firmware-update? It's not necessary to open the controller box, upload the new firmware via OTA.
The OTA-Hostname is 'proofer'.
Don't forget to set your SSID and PASSWORD in the software before the first USB upload.

Touch Screen Calibration:
The X/Y start and end values are different for each Touch Screen.The attached file Touch_calibrate.ino is a sketch to generate the calibration values used for this project.
Connect the display to the ESP32 and run the sketch. On display Touch corners as indicated and update the five values from monitor in...
proofer.ino in code:    uint16_t calData[5] = {380, 3543, 276, 3472, 7};

NTC3955 Thermistor Calibration (Or any other type of NTC and resistor):
Doe NOT use a OneWire (Dallas) temperature sensor, for recovery it needs 800ms and that affects the responsiveness of the touch screen.
First to do:
Before soldering, measure the 10KΩ serial resistor resistance with a multi meter and update the value in ...
in code:    const uint16_t ntcS = 10080// ... the 10KOhm resistor (use a multi meter)
After that:
Connect the resistor and NTC with the ESP32
The function float getTemp() calculates the ABC resistance curve values of Steinhart–Hart equation at startup.
Theoretical: We can use the NTC 3950 list resistances (data sheet in folder ...\Proofer\more\).
Practical : The NTC-wiring and connections affect the resistance. So we need to know the resistance of the water temperatures at 25/45/65*C for this project.
Use a USB connection and the monitor,UNcommend in code:   #define PRINT_RESISTANCE
Use an accurate thermometer. NTC in 25/45/65*C warm water and get the values from monitor and update the three values in ...
in code:    const uint16_t ntcR[3] = {11970, 5414, 2660}, // ... measured resistances...
Done? REcommend in code:  //#define PRINT_RESISTANCE

WebSocket Server/Client:
Proofer.ino has a WebSocket Server and there is also an HTML WebSocket Client in the project folder.

PID tuning:
In ESP32 ino-sketch: Kp, Ki and Kd are the PID tuning values and are simple saved in EEPROM after the first run.
You can easily change the PID values using a web browser. Changes are saved in EEPROM and therefore also used next time.
Web browser: Proofer.html
On startup, the current values are displayed in the text boxes.

Required components:

  • ESP32 evkitc v4
  • 2.8" or 2.4" SPI Touch Screen 320x240 pixels
  • a 2 Solid State Relay module 2A at 100 to 240VAC
  • 2x PTC thermostat Heater plates 50W/80°C
  • NTC3950 10K, Waterproof (and a 10KΩ resistor)
  • Piezo Buzzer
  • Pentole Agnelli COAL49 / 335 Low rectangular baking tray, aluminium, grey, 35 x 28 cm
  • 4x M8x40mm carriage bolts
  • 8x M8x26mm spacers (as baking tray legs)
    if required: a insulation plate can be mounted between two spacers
  • 2x DC 5V, 0.2A PI fan 30x30x7mm
  • Hi-Link HLK-5M05, AC to DC 5V, 1A power module
  • Speaker cable 2x0.75 (has marked wires)
  • wired Slow-Blow Fuse 2A 250V
  • ABS UTILIBOX, 135x75x50mm
  • the materials listed above
  • A few more installation materials from your stock: wires, terminal blocks, cable ties and so on....
  • Design and build a (foldable) cabinet to your own idea

How to use it as Proofer:
This is how i make a classic healthy brown bread.

First my own hints to make it a little easier:
a) Use a thick Silicone baking mat as a surface to knead and fold the dough.
b) Line the baking pan with two strips of Teflon baking foil that hang over the edges. A narrow longitudinal strip and a wide transverse strip.
c) With the overhanging wide strip you can, with bare hands, easily lift the hot bread out of the baking pan and place it on the grid.
      (see below at point 12)
d) Use a Infrared Body Thermometer to contactless measuring the temperatures of flour, water, ambient and dough.
(using the surface mode!)
e) We cannot use a kitchen scale for weighing small quantities! Up to 20 grams we need an accuracy of at least 0.1g, but preferably 0.01g.
    (centigram balance with calibration weights)
f) Using ascorbic acid (vitamin C/E300)?
Flour no longer ripens long enough before being marketed. With the result the dough does not rise as high as it did in earlier times. With ascorbic acid you can improve the proofing and at 60°C the ascorbic acid is completely lost.
But if you use way too much of it, your bread will
You don't have a centigram (0.00g) balance? No problem:
    per 500 grams of flour: You will use about 0.03g of ascorbic acid.
     Press a third of the convex side of the teaspoon into the ascorbic acid and shake off the excess.
Alternative: Use the wheat flour only two to three weeks after purchase so it can ripen further.


  • 300g wheatmeal
  • 200g patent flour
        or only 500g wheatmeal (rice less high)
  • 7g instant yeast
        (easier and no worse than fresh yeast)
  • 0.03g ascorbic acid (vitamin C/E300, optional)
    Helps brown bread to rise, but is completely lost during baking.
  • - mix this well
  • 10g salt
  • 10g fine or brown sugar
  • 20g butter (room temperature, or melted)
  • 260g/ml water (30°C at temperatures flour 18°C and room 21°C)
    How to calculate water temperature:
        target T = 27, knead heat  K = 4, flour F = 18, room R = 21, water W = ?
        K ?: the temperature rises during kneading and depends on the kneading method used. Measure it once.
        formula: W = (T - K)3 - (F + R)
    Or simple for 1st rise at 27°C and K = 4: W = 69 - (F + R)
    (see hints for info about Thermometer)
  • - I stir the salt, sugar and the butter into the lukewarm water
  • 1 egg (optional)

Ready to mix, knead, rise and bake? Then we go for it!

  1. Proofer pre heat ONE 27°C
        After power ON the time is set correctly
        Otherwise first set hours to 01 and minutes to 00
        select radio button: 27 (01:00-27°C)
        press button: START
  2. Mix and knead the dough until it has become 'elastic'
        Knead it by hand or use a very strong kitchen machine
        (only a strong motor and metal gears will last a long time with this very tough dough)
  3. 1st rise dough in a high bowl with a warm damp cloth over it
        (i use the bowl from my kitchen machine)
        press button: RESET (01:00-27°C)
        press button: START
  4. Proofer beeps?
        press button: STOP
        remove the dough
  5. Proofer pre heat TWO 29°C
        Place a flat dish with lukewarm water on the base plate under the Proofer carrier
        (I use a soaking warm cloth in the flat dish, that doesn't spill)
        select radio button: 29 (01:00-29°C)
        press button: START
  6. Flatten the dough and fold it several times and form it into a roll
        Place, seam side down, in a bread pan (28cm)
  7. 2nd rise with the bread pan on the Proofer carrier
        press button: RESET (01:00-29°C)
        press button: START
  8. Proofer beeps?
        press button: STOP
        power OFF

        remove the bread pan and the water dish
  9. Place the bread pan on the oven bottom
        Use a preheated steam oven, or alternative my own method:
            Place it in a non preheated oven with 200g/ml hot water at the bottom
            (I use two small gourmet grill-pans, plastic handles have been removed)
  10. 3rd rise oven at 180°C bottom and top heat, 45 minutes
        (temperature and time depending on oven - don't use hot air circulation)
  11. Oven beeps?
        Spray or brush the top of the bread with cold water and then
        1 minute back in the oven at 180°C for a crispy crust
        (I prefer to use a silicone brush, because bacteria can develop in a sprayer)
  12. Take the bread out of the bread pan and let the it cool on a wire rack
        (see hints for info about the foil)
  13. Slice the bread and make portions for the freezer
        It will then remain deliciously crunchy
  14. Enjoy your bread meal!