A tide watch for Budd Inlet

The Watchy is an open-hardware e-paper watch built around an ESP32. Mine runs a face called TideFace: the time, sunrise and sunset, today’s highs and lows, and a 24-hour tide curve for Budd Inlet with the next high or low called out. The curve runs three hours behind now and twenty-one ahead, with a dotted line at the present.

Tides come from NOAA’s station 9446969 and temperatures from the National Weather Service, both free and keyless. Sun times are computed on the watch from the NOAA solar equations, so they work with the radio off and never fail. They agree with published tables to within a minute.

The radio only runs on the charger

The watch only uses Wi-Fi when the battery reads above 4.05 V, which means it’s charging, and when the cached tides are over six hours old. This board has no pin that says USB is plugged in, so voltage is the only clue. The obvious threshold for a full pack, 4.15 V, turned out to be reached only at the tail of a charge and missed most of them. Each sync pulls two weeks of tides, so two weeks off the charger still draws a correct curve.

Where the battery goes

About 85% of the energy goes to waking up. A wake costs about 20 mAs, most of it the ESP32 boot path before my code even runs, so the lever that matters is waking less often. The face redraws every minute normally, every fifteen minutes at night or after ten minutes without movement, and backs off further as the battery drops. Below 3.50 V it goes to hourly wakes with no motor and no radio.

The library also left the accelerometer running at 100 Hz forever, near 150 µA against a deep-sleep floor near 20 µA. It now runs in Bosch’s low-power step-counter mode, which keeps the step count and drops the tilt and double-tap features nothing here used.

Traps worth knowing if you write Watchy firmware

  • WiFi.disconnect(true) doesn’t erase saved credentials, however often that’s repeated online. The first argument is wifioff. WiFi.STA.disconnect(true) is the one that erases.
  • WiFi.SSID() returns the network you’re connected to, not the one configured, so checking it right after WiFi.begin() always reads empty.
  • At −82 dBm my router returns AUTH_FAIL with the correct password, so an auth failure doesn’t prove a wrong key.
  • The library’s Setup WiFi wipes the stored network before asking for a new one and gives you 60 seconds for the whole captive portal. TideFace replaces it with a five-minute version that doesn’t wipe anything first.

The menu also has a countdown timer, the tide predictions as a list, a power screen, and a reader for Psalms, Proverbs and the four Gospels stored in flash.

Keys

j k
next and previous link
Enter
open it
/
search
g h
home
g e
essays
g r
recipes
g i
instructions
g g
top of the page
G
bottom of the page
u
up a level
H L
back and forward
?
this list
Esc
close, or leave a text box