First Power-On Checklist
Before writing the full firmware, verify each component is wired correctly using simple test sketches. Work through this list in order — each step confirms one subsystem before you build on it.
Visual Inspection (Do This Before Every Power-On)
- No bare wire ends touching adjacent pins or exposed metal
- VCC wires connected to the correct voltage rail (3.3 V or 5 V)
- GND wires connected (every component needs GND)
- No component is mounted backwards (check any IC with a direction marker)
- LittleFS partition image has been flashed (no physical SD card needed)
Step 1: ESP32 Standalone
Connect only the ESP32 to USB. Confirm the serial monitor outputs something and the blink example works. No other components connected.
Expected: LED blinks, serial prints Turning on LED / Turning off LED.
Step 2: DS3231 RTC
Wire the DS3231 (VCC, GND, SDA, SCL). Run the I2C scanner.
Expected:
Found device at 0x68
If nothing appears: measure VCC with a multimeter (should read ~3.3 V). Confirm SDA → GPIO21 and SCL → GPIO18. Check that pull-up resistors are on the breakout board.
Step 3: Buttons
Wire all 6 buttons (one pin to GPIO, other pin to GND). Run the polling test from the buttons wiring doc.
Expected: pressing each button prints its name.
If a button does not respond: check that both terminals of the button are wired (one to GPIO, one to GND). Measure GPIO voltage with a multimeter — should be ~3.3 V when not pressed and ~0 V when pressed.
Step 4: LittleFS Flash Partition
Flash the LittleFS image with esptool.py write_flash (see the
Audio Storage page).
Call lfs_init() and verify alarm.wav is accessible.
Expected: I (xxx) lfs: alarm.wav found, size N bytes in serial output.
If mount fails: confirm the lfs partition label matches the driver config.
Confirm the image was flashed to the correct offset from partitions.csv.
Step 5: E-ink Display
Wire the display adapter (VCC, GND, MOSI, MISO, SCLK, CS, DC, RST, BUSY, FL_PWM). Run the RST + BUSY check from the display wiring doc.
Expected: Display ready printed to serial. Display shows a full white refresh.
If BUSY never goes LOW: check RST is connected to GPIO4. Check BUSY is connected to GPIO3. Verify VCC on the adapter board.
Step 6: MAX98357A + Speaker
Wire the amp (VIN=5V, GND, BCLK, LRCLK, DIN). Ensure alarm.wav is in the LittleFS
partition at /lfs/alarms/alarm.wav. Run the audio playback test from the
audio wiring doc.
Expected: alarm audio plays from the speaker.
If silent: check DIN → GPIO17 (not DOUT). Verify VIN is 5 V, not 3.3 V.
All Systems Go
If all six steps pass, every component is wired and communicating correctly. Proceed to the Firmware section to build the full application.
Moving to Perfboard
Once the breadboard prototype is working:
- Sketch the component layout — keep the display adapter close to the display ribbon cable; keep the amp close to the speaker terminals
- Solder components one at a time, re-testing at each step
- Use stranded silicone wire for speaker connections (it handles vibration better than solid-core wire)
- Apply a small amount of hot glue or strain relief to the display ribbon cable where it meets the adapter — the FPC connector is fragile and can crack with repeated bending