ESP8266 IoT Button
Battery-friendly Wi-Fi button that fires an HTTP request the moment you press it, then deep-sleeps.
Difficulty: Through-hole. Estimated build time: about 60 minutes. Estimated parts cost: about US$6.00. 8-line bill of materials. Compare supplier offers when available. A single-purpose Wi-Fi button: press it, the ESP8266 wakes from deep sleep, joins the configured Wi-Fi network, fires one HTTP POST to a webhook URL, and goes back to sleep.
Solder the ESP-12F header
Use a generic ESP-12F breakout that brings out RST, EN, GPIO0, GPIO16 (XPD), and the UART pins. Solder a 6-pin row of female headers along one side so you can wire to a breadboard, and break-out RST and GND to a 2-pin header on the other side for the wake button.
Wire the strap pins
Pull EN to 3.3 V through 10 kΩ. Pull GPIO0 high through 10 kΩ (it must be HIGH to boot from flash). Pull GPIO15 low through 10 kΩ (it must be LOW to boot). These three resistors are not optional — the chip won't boot without them.
Bridge GPIO16 and RST for deep sleep
Solder a small Schottky diode (1N5819) between GPIO16 (anode) and RST (cathode). When the firmware calls deepSleep() it pulls GPIO16 low, which through the diode pulls RST low and triggers a reset on wake. The diode prevents the manual wake button from interfering with the firmware's deep-sleep timer.
Add the wake button
Wire a tactile switch between RST and GND. Press the switch, the chip resets out of deep sleep — that's all the user-visible action of the device.
Power and test
Connect 3.3 V (from a 2×AA pack via an MCP1700-3302 LDO, or a Li-ion cell via the same LDO) to the EN/Vcc rail. In your firmware: connect to Wi-Fi, fire one fetch() to your webhook, then call ESP.deepSleep(0) to sleep until the next button press. Measure idle current with a microammeter — you should see roughly 20 µA, low enough to ignore for the battery's life.