A wall clock that never forgets bin night. An ESP32 keeps NTP time, and every Tuesday it shows the
right-coloured wheelie bins on the little TFT and beeps through a PAM8302 amp from 6 pm — until you hold
the button to say the bins are out. Tap a row to tick it off; pick the colour of the wire you actually used
from the middle dropdown and the link recolours to match (saved in this browser).
ESP32-WROOM-32U
Wi-Fi + NTP clock
⇄
ST7735S
1.8″ 128×160 SPI
Button
hold-to-clear
PAM8302
amp → 8Ω speaker
What it does (from the firmware · v4.1)
Boots, joins Wi-Fi and syncs the clock over NTP (Sydney time, auto DST).
Works out the collection arithmetically from an anchor of Tuesday 9 Jun 2026 — RED goes out every Tuesday; YELLOW and GREEN alternate fortnightly.
Bin night (every Tuesday): draws the due bins in colour on the screen and, from 6 pm, beeps a 3-second burst every 10 minutes until cleared. (The bin colours are shown on the TFT — there are no separate indicator LEDs.)
Clear it by HOLDING the button for 4 seconds — a green countdown meter fills as you hold; a quick accidental tap does nothing. When cleared the screen keeps the coloured bins, adds a tick in each, and shows "ALL DONE / Bins have been placed".
Other days: shows the clock, date and a preview of the next collection's bins.
Hold the button 10 s on a non-bin day → self-test: speaker beep + display check.
Week A — Red + Yellow even fortnight from anchor
Week B — Red + Green odd fortnight from anchor
Connections verified0 / 0
Tap a row to toggle · pick each wire's colour in the middle · saved in this browser
Display · 1.8″ ST7735S · hardware SPI (VSPI)
SCK SCL / CLKGPIO 18
SDA MOSI / DINGPIO 23
CSGPIO 5
DC A0 / RSGPIO 16
RST RESETGPIO 17
VCC3V3
LED backlight3V3
GNDGND
SCK 18 & MOSI 23 are the ESP32's default hardware-SPI pins. MISO isn't used — the display is
write-only. The sketch uses INITR_BLACKTAB; if colours/offset look wrong, try GREENTAB.
The bin colours you see are drawn on this screen — the earlier hardware indicator LEDs were removed.
Wired straight GPIO 33 → button → GND. The firmware uses the chip's
INPUT_PULLUP so it reads HIGH at rest and LOW when pressed — no external resistor needed.
Hold 4 s on bin night = clear; hold 10 s on other days = self-test.
Audio · PAM8302 Class-D amp · drives the 8Ω speaker
A+ audio in +GPIO 32
A− audio in −GND
SD enable (tie high)3V3 / Vin
Vin5V
GNDGND
Speaker OUT+ / OUT−amp out
The firmware makes the beep with tone() on GPIO 32, which feeds the
PAM8302's A+ input (A− → GND). Power the amp from Vin → 5V, GND → GND,
keep it enabled by tying SD high, and wire the 8Ω speaker across OUT+ / OUT−.
⚙️ Optional: a small series resistor + cap on A+ softens the square-wave beep — confirm against how you built the input side.
Ground & power · the commons
Common GNDGND
Tie every ground together — display GND, the button, and the PAM8302's GND / A− all share the ESP32's GND.
USB powers the board; 3V3 feeds the display, 5V (Vin) feeds the amp.
Firmware · bin_night_reminder.ino (v4.1)
The Arduino sketch that runs the device. Enter your own Wi-Fi SSID + password at the top before
flashing — they're shown here as placeholders. Board: ESP32 Dev Module · Libraries:
Adafruit GFX + Adafruit ST7735 and ST7789.
Bin Night Reminder — visual wiring mock-up (every connection)