HOW IT TALKS

ONE BRAIN, FIVE VOICES

The base on the pole makes every decision. The phone, the remote, the voice box and the heading puck only tell it things - over three kinds of link: wires, its own radio (ESP-NOW) and Wi-Fi.

THE WHOLE SYSTEM · TAP A BOX
THE GOLDEN RULE

Everything from the remote, phone or voice box is a one-shot request: "start SCAN", "move 10° left", "speed 60". The base applies it and then carries on by itself on its own compass, GPS and clock. If a message arrives late, twice, or never, the pole still does the right thing - and losing the phone or remote never stops it.

THREE KINDS OF LINK

WIRES

Inside the base: the compass and GPS on the I²C bus (STEMMA QT cables), the motor driver on two pins. Fast and never drops.

ESP-NOW RADIO

Remote and puck talk straight to the base, no router, about 11 bytes a message. Works on home Wi-Fi and on the water.

WI-FI (HTTP)

The phone and the voice box reach the base's little web server - through the home router, or the base's own ScottsPole hotspot on the water.

WHO SENDS WHAT

FROMTOWHATHOW
PhoneBaseCommands (mode, nudge, drag, settings)WI-FI
BasePhoneLive status ~25×/s, flight log, settingsWI-FI
Voice boxBaseCommands, then a status check, then a log noteWI-FI
RemoteBaseButton presses, wheel turns, its batteryESP-NOW
BaseRemoteHeading 20×/s, pole state, GPS, batteryESP-NOW
PuckBaseBoat heading 10×/s, battery, versionESP-NOW
PhoneInternetLive log, weather, shared spotsCELLULAR

ESP-NOW: THE PRIVATE RADIO

ESP-NOW is a feature of the ESP32 chip: short messages straight from one board to another on a Wi-Fi channel, with no router and no connection to set up. It is how the remote and the heading puck talk to the base - at home and on the water.

  • Every message is the same 11-byte packet (below). The first 4 bytes are a magic number, so any other ESP-NOW gadget nearby is ignored.
  • After pairing each unit only sends to and listens to its partner's address.
  • The base keeps two partner slots: one remote and one puck.
  • Quiet radio: if a partner hasn't been heard for 5 s (switched off), the base sends to it at most once a second - so unanswered retries don't jam the air.
Range: the base has an external w.FL antenna; keep it away from the motor and its wires.

ONE PACKET, BYTE BY BYTE

Example: the puck saying "boat heading 123.4°, accuracy 3". Numbers are sent low byte first.

THE MESSAGES

NAMETYPEDIRECTIONCARRIESHOW OFTEN
HEADING3base → remotePole heading ×10 + accuracy 0-320×/s
POLE11base → remoteMode + flags, pole angle and target (from the bow)steady
POLESET12base → remoteSpeed, arc, pause, held directionsteady
SPOT20base → remoteSPOT distance, range, GPS oksteady
GPS / GPSPOS18 / 19base → remoteSatellites, fix, latitude / longitude~1×/s
HOLD / LOG14 / 15base → remoteMotor power, flight-log statesteady
BUTTON / ACK1 / 2bothA press and its receipton press
WHEEL7remote → baseWheel position, spin, buttons heldon turn
POLECMD13remote → baseA pole command (mode, nudge, speed...)on press
NAV16remote → baseWhich screen the remote is onon change
BOATHDG21puck → baseBoat heading ×10 + accuracy (65535 = no compass)10×/s
BATT / RATE / TEMP4 / 5 / 6allBattery % + volts, charge rate, chip temperatureevery few s
VER8allFirmware version (puck adds its up-time)every 10 s
PING0all"Still here" (base → puck 1×/s)1×/s
PAIR9allPairing steps (see Pairing)while pairing
CMD10allSave calibration, switch link, turn the puck offon request

CHANNELS

ESP-NOW has to share the channel the base's Wi-Fi is on.
  • On the water (DIRECT) the base's hotspot sits on channel 1.
  • At home (WI-FI) the base is on whatever channel the router uses. The remote follows the base's link setting (switching it restarts both units), so it lands on the same channel.
  • The puck hunts: when it hasn't heard its base for 6 s it tries channels 1 to 13, about 1.2 s each, until the base answers.

TWO WAYS TO REACH THE BASE

The pole works exactly the same both ways - only the road the phone takes to the base changes. The remote and puck use their own radio either way.

WI-FI · AT HOME / THE DOCK
Base and phone both join the home router. The phone keeps normal internet. Use this for wireless updates.
DIRECT · ON THE WATER
The base makes its own Wi-Fi called ScottsPole. The phone joins it and uses cellular for internet at the same time.

WHAT HAPPENS AT POWER-UP

ONE ADDRESS FOR BOTH

Once the base has been on home Wi-Fi it remembers its address (192.168.1.46) and uses the same one on DIRECT, so one home-screen icon works everywhere. Hold D2 on the base for 3 s to see it.

STOP DNS ROUTERING

The hotspot tells the phone "there's no internet here", so the iPhone keeps using cellular for the internet while it talks to the base over Wi-Fi.

SWITCHING

SETUP › LINK: pick WI-FI or DIRECT. Both base and remote restart into the new mode; the app tells you what to join and finds the base again.

WHICH ONE AM I ON?

The pill in the app's header: bars = DIRECT, fan = WI-FI.

A TAP, START TO FINISH

  • Commands are one-shot. The phone sends /a?c=scanon once. There's no stream of "keep going" messages - the base keeps scanning on its own.
  • The phone never guesses. What you tapped is shown until the base's status has said the same thing for 0.6 s (or 3 s pass), so a stale update in flight can't make buttons flicker.
  • Status is pushed. One long connection (/stream) carries a small JSON status about 25 times a second: mode, angle, target, GPS, batteries, warnings.
  • The base serves the whole app. The page, its fonts and icon come from the base's own flash (gzipped), so it works with no internet at all.

THE BASE'S WEB ADDRESSES

ADDRESSWHAT IT DOESUSED BY
/The phone app itself (gzipped page)Phone
/streamLive status pushed ~25×/sPhone
/stStatus once, as JSONPhone, voice box
/iSettings and info (versions, battery, voice settings, weather kept on the base)Phone, voice box
/a?c=&v=Do something: a pole command or a settingPhone, voice box
/lg · /lgackCopy the flight log · "got it, free that space"Phone
/cfgSetup the app needs (log key, names)Phone
/wxWeather handed to the base (logged, and for voice "wind")Phone
/vnA voice-box note for the flight logVoice box
/parts · /perfFlash layout + last update error · timingDebugging

WHERE THE DATA GOES

FLIGHT LOG (BASE)

20-byte rows in the base's own 896 KB of flash: 10 rows a second while the pole is busy, 1 a second when idle - about 1.2 h busy or 12 h idle. Events (mode changes, notes, GPS positions, weather, boat heading) go in between.

THE PHONE COPIES IT

While the app is open it copies new rows (/lg), then says "got it" (/lgack) so the base can free the space. A full base just stops recording until a phone copies it.

LIVE LOG

The phone pushes new pieces to log.scottspole.com every 30 s (cellular on the water). Kept for 7 days, so a problem on the boat can be looked at almost live.

TRIPS

Each power-up of the base is a trip, summarised on the phone (TRIPS tab: playback, charts, fish, weather). PUSH TO CLOUD on a trip, or PUSH EVERYTHING NOW on LOGS, sends it to the live log right away. Spots you SHARE go to trips.scottspole.com.

WHY THE PHONE CAN'T SLOW THE MOTOR

POLE TASK · 100×/s

Reads the pole heading, works out what the motor should do for the current mode, and sets the motor. It runs in its own task, so nothing the network does can hold it up.

MAIN LOOP

Everything else: web pages, the status stream, radio messages, the screen, the flight log, Wi-Fi. A slow phone or weak Wi-Fi only slows this side.

ONE SHARED LOCK

The two share the pole's settings through one lock. The loop lets go of it for every network call and for drawing the screen, so the pole task never waits on a phone.

WATCHDOGS

Motor: no fresh drive command in time = motor off. Loop stuck for 30 s = the base restarts (the motor is always off at start-up) and logs where it was stuck as a HANG note.