One Arduino sketch, about 900 commented lines, no configuration files and no cloud. This page covers getting the tools installed, flashing the board, calibrating it once, and changing the presets to your own taste.
https://espressif.github.io/arduino-esp32/package_esp32_index.json
Then open Tools → Board → Boards Manager, search for esp32 and install the Espressif package. It is a large download and takes a few minutes.OneWire
DallasTemperature
Adafruit GFX Library
Adafruit SSD1306
Adafruit BMP280 Library
The Adafruit libraries will offer to pull in their own dependencies — accept. Wire and Preferences are already part of the ESP32 core and need nothing.potwatch, so the path ends in potwatch/potwatch.ino. The Arduino IDE requires the folder and the file to share a name and will offer to fix it for you if they do not.Two things account for almost every failure. First, some USB-C cables are charge-only and carry no data — try a different cable before anything else. Second, if the board never appears as a port, the BOOT-button trick above is the reliable way in.
The defaults are 97.6 °C at 1013.25 hPa. Calibration is where you replace that with a number of your own — and the number does not have to be the boiling point. It is simply the temperature at which the countdown starts, anywhere from 85 to 102 °C.
Water does not go from still to rolling in one step. Long before a full boil it starts working hard: bubbles streaming off the bottom of the pan, the surface moving, plenty of heat going into the food. On the author's hob that point arrives around 88 °C — and it is a perfectly good moment to start cooking and turn the hob down.
So the trigger is set to 88 rather than to the true boiling point, and the countdown begins there. That is not a workaround; it is the more useful behaviour for gentle cooking, and it avoids the rolling, spitting boil you rarely actually want.
Think of the calibration screen as "start the timer when the water reaches this temperature". Setting it to your genuine boiling point is the obvious default. Setting it a few degrees lower, where the pan is lively but not violent, is a deliberate and often better choice.
Settings live in the ESP32's non-volatile storage under the namespace clipegg — the project's original name, deliberately left unchanged so that saved calibration is not lost when you upgrade the firmware. If you rename it, calibration resets to the defaults.
SET moves, OK chooses. Everything else is a variation on those two.
Pressing two buttons "at the same time" never is — one always lands a few milliseconds before the other. Earlier versions therefore applied a stray ±1 minute before recognising the chord, and the timer started one minute off. Version 4.0 holds a single-button press for 80 ms before acting on it: long enough to tell a deliberate chord from a lone tap, short enough that nobody notices the delay.
All of these are constants at the top of the sketch. Change, save, reflash — that is the whole workflow.
{ 1, 3, 5 }. The menu labels are generated from this array, so they can never disagree with itThe firmware is GPL v3: modify it freely, and if you distribute a device or a fork, keep the source open. If you fix something or add a preset worth having, I would genuinely like to hear about it.