How to build one probe's complete electrical assembly without
a custom circuit board: the FireBeetle on a terminal shield, everything else on a
solderable breadboard, and every connection drawn, done and checked one at a time.
It is written for a builder who can hold an iron but has wired very little — nothing
is assumed, and where this project does not know something, the page says so instead
of guessing.
Companion to buoy-parts-book.html,
carrier-pcb-brief.html, battery-pack-wiring.html
and thermal-probe-wiring.html. Every net — every point that is the
same piece of copper, one wire's worth of connections whatever its shape — and every pin comes from
device/hardware/carrier/connection-table.csv, the electrical
contract — the table the fabbed carrier's netlist is checked against, row for row
(ADR 0017). The route — shield plus daughter board — was decided on
2026-09-30. Numbers carry [M] measured, [D] datasheet, [S] sliced
or [C] computed. The text was brought up to date on 2026-11-04; the drawings are
the 2026-09-30 set with stale labels corrected, so a caption is newer than its drawing.
⚠ The decision this page does not make: whether this board flies
The carrier's rev. 3 order spec decided that the hand-built carrier never
flies (decision 3: “C is bench-only, forever. All three probes fly Track A
boards”). That ruling was written for Track C, an FR-4 protoboard with SOT-23 breakout
carriers; the shield-and-breadboard build on this page is a third configuration, and
the same ruling covers it by plain analogy.
This page builds it to flight standard anyway — strain relief, no push-on
jumpers in the hull, conformal coat, every joint checked — so that the choice stays
open. Flying it would overturn decision 3, and that takes an ADR after bench gates
①–④ have passed on a board built from this page. Until then the decision is
open (DOC-18), this board is a bench and candidate build, and no hull goes in
the water on the strength of this page.
Both Track A boards are now in hand: the carrier (ordered 2026-10-02,
rev. 4, five assembled, JLCPCB W2026100309193023, box opened 2026-10-13) and the solar
combiner (ordered 2026-10-03, five, JLCPCB W2026100401592470, arrived 2026-10-15). Carrier
boards 1–3 have been built and level since 2026-10-28, the charger on J5 of all three
since 2026-10-29; no board has been built from this page. The carrier order went
without waiting for a board built
from this page, so this build is now the bench rig and the fallback, and the fabbed
carrier is the other's (ADR 0017).
Power comes in from three panels and a six-cell pack, meets at the charger, and
reaches the daughter board as one pair of wires on J5. On the
board it becomes three rails: an always-on 3.3 V rail, a GPS rail that
is on only while a fix is taken, and a modem rail that is on only for a transmit
window. Fifteen wires carry 3.3 V, ground and thirteen signals across to the
shield, where the FireBeetle sits.
The whole probe. Everything inside the dashed outline is the daughter board this page builds; the FireBeetle sits on the DFR0923 shield to its right. The charger is beside the discharge path, not in it: the pack, the charger's BAT pad and J5 are one node. Not drawn: the second BMP581, on the GPS's second Qwiic port (§7.6).
The schematic, and every net
This is the drawing to check your finished board against, connection by
connection. It is a hand-made snapshot of the CSV as of 2026-09-30, and the
CSV has moved since — the caption under the drawing lists what it gained: the CSV
stays the contract, and a later change to it does not update this page by itself
(the same drift DOC-11 records for the carrier spec). If the two ever disagree, the
CSV wins.
Every net in connection-table.csv except the bench-only SOCK_DEVKIT, which this route does not use and which left the table on 2026-10-02 with the fabbed board's layout (ADR 0017); the same day NTC_SENSE moved from IO34 to IO39 (the FireBeetle loads IO34 with its own battery divider) and is drawn so here, and the table gained the parts the fabbed carrier's reviews added, none of them drawn in this guide: Q1 (a MOSFET at J5 that blocks a reversed pack, with the new net VBAT_IN), C7 and C10 (1 µF at each load switch's input), C8 and C9 (4.7 nF on each switch's CT pin), R6 and R7 (100 Ω in the DS18B20 port's supply and data), JP3 (an open solder jumper to the module's VCC), J10 (a five-pin service header), SOCK_BME and the Qwiic shells on GND; and the charger port became a five-way plug with ground on pin 5, where this build's two-way terminal has it on pin 2. If you build after that date, add C7 beside U3 and the two CT capacitors (§7.6), and know what the rest buys: without Q1 a reversed pack lead is not survivable, and without R6 and R7 a flooded probe cable can pull the always-on rail down. A net name in a flag means the same copper wherever that name appears. Red crosses are pins that connect to nothing on purpose. The dashed BME280 seat is SOCK_BME in the CSV. CT, QOD: drawn floating, as the table had them on 2026-09-30 — the fabbed carrier now puts 4.7 nF on CT, and so should you (§7.6).
The same thing as a table, one row per net, as the CSV stood on
2026-09-30. The BME280 seat and the other parts the CSV gained on 2026-10-02 are not
in it — the caption above lists them.
Net
Every pin on it (ref:pin, CSV order)
What it does
VBAT
J5:1 · F1:1 · U3:1
The pack node, straight from the charger's LIPO pad. Feeds F1 and, tapped before the fuse, U3
VBAT_F
F1:2 · U1:2 · C1:1
The pack after F1 — the regulator's input, bypassed by C1
3V3_RAW
U1:3 · C2:1 · C3:1 · JP1:1
The regulator's output before JP1. C2 and C3 hold it steady; JP1 pin 1 is where you first measure 3.3 V
U3's output, before JP2 — the modem rail while IO26 is high
VBAT_RB_SW
JP2:2 · J6:1
The modem rail after JP2, to J6 pin 1 and the modem's pin 8
RB_ONOFF
J6:5 · SOCK_FB:IO14
IO14 to the modem's On/Off pin. Wired; whether firmware uses it is FW-10
RB_RX
SOCK_FB:IO17 · J6:3
The modem receives on this line: the ESP32 transmits on IO17
RB_TX
SOCK_FB:IO16 · J6:4
The modem transmits on this line: the ESP32 receives on IO16
Three things the CSV says that older documents do not
The modem's rail taps VBAT before F1,
on purpose. A 1.1 A polyfuse carries real resistance, and several hundred
millivolts lost across it at the modem's ~500 mA would eat the margin against
its 3.0 V minimum [D] (ADR 0014). The pack fuse protects that path instead.
J6 has five terminals, not four. Pin 5 is
RB_ONOFF on IO14. The Track C card's port table and
bring-up still show four.
There is no RB_5V, no BOOST_EN
and no C4/C5. Those names left the design with ADR 0014 on 2026-09-08; IO26 now
drives RB_EN.
Parts and tools
Quantities are for one probe and for three. “Owned” is what
parts.md and inventory.md record; the
procurement documents own the numbers, and this table only gathers what this build
touches.
Owned
Part
Recorded
Per probe
Note
FireBeetle 2 ESP32-E, DFR0654-F, headers fitted
3
1
All three deploy and sit on fabbed carrier boards since 2026-10-27, so none is free for this build. Low Power Pad left uncut (decided 2026-11-03); the sleeping floor, ~648 µA [C], is still to be measured on each board (FW-30)
Adafruit bq24074 charger #4755
7, two dead
1
The charger since 15 October (ADR 0018). Three are modified and charging in the chains of boards 1–3; two are dead since 2026-10-26, killed by a reversed pack plug (FW-27); two are unmodified spares, to be modified and metered (§7.1) before power
Adafruit MAX17048 fuel gauge #5580
8, two bad, one suspect
1
Three are on boards 1–3, two are new spares; two are bad (each answered at 0x36 with a fixed voltage, FW-26) and one is suspect, all kept labelled
DFRobot Fermion BMP581, SEN0667
3 + 3, one bad
1
Three more arrived 2026-10-30; one of the first three is bad (it froze a bus scan), kept labelled
SparkFun BME280, SEN-13905, with headers
5: three on boards, one bad, one spare
1
Both orders arrived (2026-10-02, 2026-10-28); the bad one is kept labelled. Check the packing slip: the Qwiic board has a near-identical name
SparkFun SAM-M8Q GNSS, GPS-15210
3, one on each of boards 1–3
1
Two were ordered 2026-10-02 (SparkFun order 000460515); the inventory does not record that arrival, but boards 1–3 each carry one
DS18B20 waterproof probe
3
1
Board 1's probe was rung out by diode test on 2026-10-15 (black = GND [M]); the other two are not (HULL-28)
RockBLOCK 9603 (SMA), v3.D
2
1
Third to buy — ask which revision ships
Maxtena M1621HCT-P-SMA antenna
2
1
Third to buy
Amphenol RF 135110-03-06.00 cable
1
1
Two to buy
Voltaic P123 panel
3 + 3, the second set unidentified
3
A second set of three exists since 2026-11-03, on XH plugs into combiner board 2, unidentified (FW-29). Six more to buy, less this set once identified
Panasonic NCR18650GA, protected
19 + 20 ordered
6
The pack has its own page
MCP1700-3302E/TO regulator
10 in hand
1
Bench gate ④ passed 2026-10-14 on fabbed board 1: flat face GND–VIN–VOUT as drawn, 3.34 V out [M]
Qwiic (JST-SH) to male-header cable, 150 mm
4
2
QW1 to the gauge, QW2 to the GPS — two more for three probes
JST-PH 2-pin lead, 100 mm
10
see §7.1
“Battery/panel leads”; the pack page uses one; one in each of the three charging chains
Kester 44 solder, 63/37, 0.020″
1
—
Fine for every joint here
INA219 current sensor
4
bench
±0.4 mA floor [M]: fine for the modem's transmit current, useless for sleep current
The FireBeetle plugs into it; every pin comes out on a screw terminal. 61 × 93.5 mm [D]
ElectroCookie solderable breadboard, 5-pack + 1 mini
1 pack
The daughter board; the mini is practice, and the solar combiner if you build that by hand (§7.2)
ElectroCookie 6-colour pack + 7 screw terminals
1 pack
Spare boards; the terminals' pitch and size were not on the listing — check them
DFRobot FIT0181, 2-pin screw terminal
20
3.5 mm pitch [D] — it does not sit on the 2.54 mm grid. Bench use only; buy 2.54 mm terminals for the board
These four were ordered 2026-09-30, and their arrival is recorded
nowhere — not in inventory.md, the cost log or a backlog row.
The slip must be found and the inventory written from it.
To buy
Part
Per probe
Three probes
Plain description
TPS22918 load switch, SOT-23-6 (U2, U3)
2
6
Still to buy for this build (“buy 8”). The fabbed carrier needs none: the fab places both on each board
SOT-23-6 to DIP adapter board
2
6 + spares
A tiny board with six plated pads at the SOT-23-6's 0.95 mm pitch and six 2.54 mm pins. No current rating applies at these loads. Buy a pack: the first one is practice. On bom-carrier.md's Track C order list as “1 pack”
Polyfuse, 1.1 A hold, radial (F1)
1
3
On bom-carrier.md's Track C order list; nothing records it as bought
Resistors, through-hole
100 kΩ ×3, 10 kΩ ×1, 4.7 kΩ ×1
×3 each
R1, R2, R5; R4; R3
Ceramic capacitors, through-hole
1 µF ×2, 10 µF ×1, 100 nF ×1
×3 each
C1, C2; C3; C6. Building after 2026-10-02, add 1 µF ×1 (C7) and 4.7 nF ×2 (the CT capacitors, §7.6)
2-pin male header + shunt
2
6
JP1, JP2: a 2-pin header with a removable shunt — a small plastic cap that bridges the two pins; pull it to open the circuit so a meter can sit in its place
Female header strip, 2.54 mm, turned-pin
7-way ×1, 4-way ×3
×3
SOCK_BARO; the BME280 seat; QW1 and QW2 for bench plugging. On bom-carrier.md's Track C order list, cut to length
PCB screw terminal, 2.54 mm pitch
16 positions
48
J5 2, J6 5, J7 3, J8 3, J9 3. Rated at least 1 A per position: J5 and J6 carry the modem's 470 mA burst [D] (0.45 A measured [M])
22 AWG solid-core hookup wire
8 colours
—
red, black, orange, blue, yellow, white, purple, green (§7.4)
Silicone stranded wire
20 AWG red/black; 24 AWG red/black
—
20 AWG for the pack and modem rail, 24 AWG for the panels' leads (architecture's wire rules)
1N5817 Schottky diode
3
9
Only for a combiner built by hand; the fabbed combiner board arrives with its three SS14 placed (§7.2). Not on any order: buy them only if a combiner is built by hand
10 kΩ NTC thermistor, leaded
2
6
One for J7; one for the charger's THERM pad, in parallel with a 200 kΩ resistor (§7.1). Owned, not to buy: 15 from the DigiKey order of 2026-10-02 (Vishay NTCLE100E3103JB0, B 3977 K [D])
Pack fuse 1.6 A, soldered inline
1
3
uxcell T1.6A square radial-lead micro fuse, slow-blow, soldered into the + lead, no holder; 20 owned, the first fitted 2026-10-18. Five of the twenty are bad (three open, two resistive) and the part is in question (FW-28), so: pliers as a heat sink on each leg and a few seconds of iron; the fuse metered 0.000 on the Klein's 2k range before it goes in; 0.00 V across it with the board drawing, read before the hull closes
Combiner → charger, the one connector in the solar path by the design; the panels are soldered to the combiner (architecture's connector rules), but as built every panel lead is plugged too (FW-29, §7.2). The two wires are pre-crimped 22 AWG XH leads, 305 mm [D], from the carrier's order. Ordered 2026-10-03 and arrived 2026-10-15, ten of each, DigiKey 102021131 (455-B2B-XH-A-ND and 455-2266-ND) — bom-solar-combiner.md
JST-PH 2-pin lead, plug at each end
1
3
Gauge's right port → charger: the owned 100 mm leads, one in each charging chain
RockBLOCK 10-way PicoBlade cable
1
3
Check what shipped with your units first; Ground Control sells one
Flux, solder wick, isopropyl alcohol, a stiff brush
—
—
No-clean flux, gel or liquid
Heatshrink assortment; conformal coating; masking for it
—
—
§9
Bootlace ferrules (optional)
—
—
For stranded wire into screw terminals
Tools
Soldering iron with a fine conical tip (header pins, the adapter) and a small chisel tip (terminals, rails).
Flux, gel or liquid — the single thing that makes beginner joints work.
Solder: the Kester 44 63/37 0.020″ you own.
Wire strippers that take 22–26 AWG, and flush cutters.
Helping hands or a small PCB vice.
A multimeter with a continuity beep and a diode-test setting. Two are recorded: the Klein Tools MM325 (the bench meter since 2026-10-30) and the EverStart 10709WDI. The Klein has no 200 Ω position — its lowest ohms range is 2k, so a good fuse or link reads 0.000 — and shows OL for open.
A magnifier or loupe for the SOT-23-6.
Isopropyl alcohol and a brush to clean off flux.
Heatshrink and a heat gun or lighter.
Optional: a ferrule crimper.
Soldering, the ten-minute version
What you are aiming for, and the three ways it goes wrong. All three are fixed the same way: fresh flux, then heat.
Tin the tip. Hot iron, a touch of solder on the tip, wipe it on the
sponge or brass wool. A shiny tip moves heat; a dull one does not.
Flux first. A dab on the pad and the lead. Flux is what lets solder
flow instead of balling up.
Heat the pad and the lead together, for a couple of seconds — two to
three is usual. Then feed solder to the joint, on the side away from the tip,
not onto the iron. It should flow round the lead by itself.
Solder away, then the iron away. Do not move the part while it
sets.
Header strips: solder one end pin only, check the strip sits flat and
square, re-melt that one pin to straighten it if not, and only then do the rest.
The SOT-23-6 adapter: flux all six pads; tin one pad lightly;
slide the chip on with tweezers, pin 1 at the adapter's pin-1 pad, and re-melt
that one pad so the chip drops flat; check under the magnifier that all six legs sit
on their pads; then do the other five with a small amount of solder each. Finally,
put the meter's continuity probes on each pair of neighbouring pins: a beep
is a bridge.
Undoing a mistake: flux the joint, lay solder wick on it, press the
iron on the wick until the solder wicks up, lift both together.
⚠ Leaded solder and static: five habits
The Kester 44 you own is 63/37 tin-lead with a rosin flux. Work with a window
open or a fume extractor pulling the smoke away from your face; keep food and drink off
the bench; wash your hands when you stop; and never test a joint or hold a wire end with
your mouth.
Static: before you pick up the load switches, the breakouts or the FireBeetle,
touch something earthed, and work on a hard, non-carpeted surface.
Practise in this order
On the mini board: three resistors, then one header strip, then one SOT-23-6
adapter with a spare chip — and only then the real board. The adapter is the one
joint on this page that is genuinely fiddly, and the first one is practice whoever
does it.
The daughter board: floorplan and column map
A breadboard-style solderable board is a breadboard you can solder: each column
of five holes either side of the centre channel is one piece of copper, and the
long rails along each edge are separate. The listing did not publish the hole count or
how the rails are tied, so check your board with the meter before soldering:
continuity between two holes of the same five should beep; between neighbouring
columns, between the two halves of a column, and between the two ends of a long rail
(some boards split their rails in the middle) should be checked rather than
assumed.
The plan keeps power on the left (J5, F1, U1, C1–C3, JP1 in columns 1–6),
the modem on the right (U3 in 19–21, JP2 at 17–18 top, J6 in 26–30), the
harness ports together along the bottom edge (J7 7–9, J9 11–13, J8 15–17), and the
sensor sockets along the top. The GPS bus (QW2, top columns 25–28) is kept well
apart from the sensor bus (top columns 1–15). On both edges the rail marked + is
3V3 and the rail marked − is GND; the + rails are joined under the
board at column 3 and the − rails at column 6.
Why some columns are left empty: a terminal body covers the rail under it
A screw terminal's body is wider than its row of pins, and its depth is not
published. So the plan assumes the worst: a terminal owns the two holes nearest the
edge in its columns (i and j) and both bottom rail holes beneath it. Nothing else
uses them. That leaves three usable holes (f, g, h) in every terminal column, and it
means a terminal column can never reach a rail directly.
So the terminals sit with a free column between each pair — columns 10, 14 and
18 — and those gap columns do the rail work: column 10 is a ground strip for R4 and C6,
column 14 carries J9's ground to the rail, column 18 carries J8's 3V3 to the rail. J5's
ground reaches the rail through column 3, J8's ground and J6's ground through wires under
the board. The generator that drew this page checks the rule: no part, link or wire
uses a hole under a terminal, and no rail hole is used twice.
VBAT is on no rail. It lives in column 1 with J5:1
and F1, and leaves by exactly one wire, under the board to U3 in column 19 — so nothing
else can ever tap the unfused pack by accident.
The daughter board from above, component side, columns numbered as most breadboard-style boards print them. Count your board's columns before you solder anything: this plan uses 30, and the listing did not say how many yours has. The two dashed wires run on the underside.
The same plan as a list. “link” is a short wire on the component side;
“wire” runs under the board; “shield wire” is one of the fifteen.
Strip
Net
Hole: what goes in it
1B
VBAT
g: wire VBAT→19B · h: F1:1 · j: J5:1
1T
GND
a: QW1:1 · b: link GND→T−1
2B
GND
g: link GND→3B · j: J5:2
2T
3V3
a: QW1:2 · b: link 3V3→T+2
3B
GND
f: C1:2 · g: link GND←2B · h: U1:1 · i: wire GND←27B · j: link GND→B−3
3T
SDA0
a: QW1:3 · c: link SDA0→8T · e: shield wire IO21
4B
VBAT_F
f: C1:1 · g: F1:2 · h: U1:2
4T
SCL0
a: QW1:4 · c: link SCL0→9T · e: shield wire IO22
5B
3V3_RAW
g: JP1:1 · h: U1:3 · i: C2:1 · j: C3:1
5T
(BARO INT, no-connect)
a: SOCK_BARO:INT
6B
3V3
f: shield wire 3V3 · g: JP1:2 · j: link 3V3→B+6
6T
(BARO SDO, no-connect)
a: SOCK_BARO:SDO
7B
SENSE_EXC
f: R5:1 · g: shield wire IO13 · j: J7:1
7T
(BARO CSB, no-connect)
a: SOCK_BARO:CSB
8B
(vacant)
j: J7:2
8T
SDA0
a: SOCK_BARO:SDA · c: link SDA0←3T · d: link SDA0→14T
9B
NTC_SENSE
g: R4:1 · h: shield wire IO39 · j: J7:3
9T
SCL0
a: SOCK_BARO:SCL · c: link SCL0←4T · d: link SCL0→15T
10B
GND
g: R4:2 · h: C6:2 · j: link GND→B−10
10T
GND
a: SOCK_BARO:GND · b: link GND→T−10
11B
LEAK_SENSE
f: R5:2 · g: shield wire IO35 · h: C6:1 · j: J9:1
11T
3V3
a: SOCK_BARO:VDD · b: link 3V3→T+11
12B
(vacant)
j: J9:2
12T
GND
a: SOCK_BME:GND · b: link GND→T−12
13B
GND
g: link GND→14B · j: J9:3
13T
3V3
a: SOCK_BME:3.3V · b: link 3V3→T+13
14B
GND
g: link GND←13B · j: link GND→B−14
14T
SDA0
a: SOCK_BME:SDA · d: link SDA0←8T
15B
OW_DATA
g: shield wire IO4 · h: R3:2 · j: J8:1
15T
SCL0
a: SOCK_BME:SCL · d: link SCL0←9T
16B
GND
g: wire GND→B−18 · j: J8:2
17B
3V3
g: link 3V3→18B · h: R3:1 · j: J8:3
17T
VBAT_RB_SW
c: JP2:2 · d: wire VBAT_RB_SW→26B
18B
3V3
g: link 3V3←17B · j: link 3V3→B+18
18T
VBAT_RB
b: link VBAT_RB←19T · c: JP2:1
19B
VBAT
f: U3:1 · h: wire VBAT←1B
19T
VBAT_RB
b: link VBAT_RB→18T · e: U3:6
20B
GND
f: U3:2 · j: link GND→B−20
20T
(U3 QOD, no-connect)
e: U3:5
21B
RB_EN
f: U3:3 · g: shield wire IO26 · i: R2:1
21T
(U3 CT, no-connect)
e: U3:4
22B
3V3
f: U2:1 · j: link 3V3→B+22
22T
3V3_GPS
c: link 3V3_GPS→26T · e: U2:6
23B
GND
f: U2:2 · j: link GND→B−23
23T
(U2 QOD, no-connect)
e: U2:5
24B
GPS_EN
f: U2:3 · g: shield wire IO25 · i: R1:1
24T
(U2 CT, no-connect)
e: U2:4
25T
GND
a: QW2:1 · b: link GND→T−25
26B
VBAT_RB_SW
h: wire VBAT_RB_SW←17T · j: J6:1
26T
3V3_GPS
a: QW2:2 · c: link 3V3_GPS←22T
27B
GND
h: wire GND→3B · j: J6:2
27T
SDA1
a: QW2:3 · e: shield wire IO18
28B
RB_RX
g: shield wire IO17 · j: J6:3
28T
SCL1
a: QW2:4 · e: shield wire IO19
29B
RB_TX
g: shield wire IO16 · j: J6:4
30B
RB_ONOFF
g: shield wire IO14 · j: J6:5
rails
+ 3V3, − GND
C2:2 → B− rail, col 5 · C3:2 → B− rail, col 4 · R1:2 → B− rail, col 24 · R2:2 → B− rail, col 21 · T+ col 3 ↔ B+ col 3, under the board · T− col 6 ↔ B− col 6, under the board · the GND wire to the shield leaves the B− rail at col 25
SOCK_BME is the CSV's own designator since 2026-10-02; the fabbed carrier seats the BME280 on a 1×4 socket for this I²C row plus a 1×6 that only holds the SPI row. The DFR0923 shield with the FireBeetle, SOCK_FB in the CSV, is off this board, reached by the fifteen wires (§7.4).
Build the board low parts first
Underside wires first (they are easiest with the board bare), then links and
resistors, then capacitors and the regulator, then the two adapters, then headers, and
the screw terminals last. A terminal's body sits over holes i and j and the rails in its
columns; the plan leaves all of those empty, so nothing has to be squeezed under it.
7.1
Power in: pack, gauge, charger, and J5
What this is
The pack's two wires reach the charger through the fuel gauge, and the charger's
LIPO and GND pads hand the same node to
J5. The charger is the Adafruit #4755 (bq24074) since
15 October (ADR 0018); the bq25185 it replaced has no
thermistor pad, see the note below. The pack itself — cells, bus bars, fuse, plug — is the
Battery Pack page; this chapter starts at its
plug.
Parts
The built pack with its 1.6 A fuse and JST-PH plug (Battery Pack page)
MAX17048 #5580 — 1
bq24074 charger #4755 — 1
JST-PH lead with a plug at each end — 1
20 AWG silicone wire, one orange (or red) and one black, long enough to reach the daughter board
10 kΩ NTC thermistor (Vishay NTCLE100E3103JB0) — 1, and a 200 kΩ resistor — 1, on about 150 mm of thin twisted pair, with a 2-pin XH break (B2B-XH-A and XHP-2) near the charger and red heat-shrink for the pair's twisted joints
A hobby knife, and tape for the Load Out socket
The solar pair from the combiner, its far ends bare (§7.2)
Drawing
Power in. The pack and its fuse are the Battery Pack page's; this page starts at the gauge.
⚠ A plug is metered for sign before it mates
Before the pack's plug goes into the gauge, put the meter on the unmated plug:
red probe on position 1, black on the ground position, a plus sign expected.
A minus sign means the plug is wired backwards — do not mate it; the same for every plug
after it that carries power. One pack plugged into a gauge with + and − swapped, before
2026-10-25, opened the pack fuse and killed a MAX17048 (its CELL
pin is rated to −0.3 V [D]) and both bq24074 chargers then owned, which have no reverse
protection; the carrier's Q1 saved the carrier only, and this board has no Q1. The bench
cable's XH end has no key against J5: only the meter protects
(FW-27).
Steps
The gauge goes inline — this is settled. Once its plug has passed the
sign check above, the pack's plug goes into
the gauge's left JST-PH port, board silkscreen up; a lead from the
right port goes to the charger's LiPo Batt socket —
never Load Out, which is a regulated output and would charge
a pack plugged into it toward 4.4 V [D]. The two gauge ports are
electrically the same (Adafruit: “connect the battery to either one, then the
load/charger to the other”); left and right is a convention so every board can be
checked against one picture.
Modify the charger before it is ever powered — three things, in this
order, each checked (ADR 0018). First the THERM link
(the spec and the drawing call it THM), the
printed bar between two dots just above the THERM pad:
cut it with the knife, then meter THERM to
GND — open, megohms or OL. A partial cut leaves the
board's own 10 kΩ in parallel with the thermistor and the cold gate can then
never trip; the open check must come first, and afterwards a reading below about
6.5 kΩ at room temperature [C] says the link is still there.
Second, the charge-rate links: cut 1.0A, bridge the
0.5A pads with a blob of solder; meter
ISET to GND: 2.0 kΩ [C] — 1.99 kΩ was
read [M] on charger 1 (1.0 kΩ means
unmodified; 667 Ω means the 1.0A link survived and the
charge would be 1.33 A; the cut link's own pads read 3 kΩ, never open — all [C]). Then the
back-side EN1/EN2 jumpers: EN2
to OUT and EN1 to GND each a beep —
they arrived bridged [M] though the board file shows both open, and both open means a
100 mA input limit.
Third, tape over Load Out.
Solder the thermistor pair to THERM and the
GND beside it, through a 2-pin XH break near the charger
so the pack and the charger can part without unsoldering; label it, it is not keyed — the
solar lead's XHP-2 fits it too. The 10 kΩ NTC and the 200 kΩ
resistor in parallel at the far end of the twisted pair, so the bead can sit against
a cell later; cover the pair's twisted joints with heat-shrink — bare, they leaked in
the ice bag and the bead read +8 °C warm [M]. The gate was measured by ice on all three chargers and accepted as built on
2026-11-03 (ADR 0018, decision 3): charger 1 stops at about −2.3 °C, charger 2 at
about −2.0 °C, charger 3 between −0.4 and −1.0 °C, and all three resume just above
0 °C [C]. The bare thermistor would stop at about +3 °C [C], inside the water SEA
floats in. An unplugged pair reads as cold and the charger stops: keep the break plugged in
whenever the charger has power.
Solder the orange 20 AWG wire to LIPO and
the black one to the GND pad next to it, at the right end of
the row. Heatshrink is not possible on a pad, so add strain relief at the wire (a
dab of hot glue or a tie to the board's mounting hole), never on the joint
itself.
Solder the solar pair into the two Opt. Cap
holes: the marked lead into VBUS, the other into
GND. It is soldered, not plugged, and it goes in the
holes rather than the edge row because a through-hole holds a wire. Mind the
polarity more than anywhere else on this page: VBUS sits
after the board's own input diodes, so a swapped pair puts the panels'
negative on a pin rated −0.3 V [D] and kills the chip.
Land them on J5: orange to pin 1, black to
pin 2. Leave the charger's USB-C socket and its DC jack empty in flight; the
USB-C is the bench's way of charging a pack.
Why the charger changed under this page
The bq25185 (#6106) this page drew until 15 October was replaced: it has no thermistor pad.
Adafruit's own schematic (Eagle file, fetched 2026-09-30) ties that board's
TS/MR pin to ground through a fixed 10 kΩ resistor,
R16, and the pinout page names no TS pad at all. Reaching
the pin means lifting a grain-sized part, which this project does not do.
Tying its boost enable to G would have cost current: the same schematic pulls
EN up through 100 kΩ, R2,
roughly 30–42 µA [C] for as long as the probe lives. The bq24074 (#4755) has its
thermistor pad behind a printed link a knife can cut, and no boost to tie off; that is
the whole of ADR 0018. The two bq25185s stay in the drawer.
Check
The pack's plug has been metered for sign (stop box above). Then, pack in and nothing on J5 yet: the meter across
J5 pin 1 (+) and pin 2 reads the pack voltage,
between 3.0 and 4.2 V and positive [D] — the pack's working range. The
ISET pad to GND: 2.0 kΩ [C].
THERM to GND with the pair on: about
9.5 kΩ at 25 °C, 11.8 kΩ at 20 °C [C]; about half of that means the
THERM link is still there. The gate itself is proven by ice on the bead
and the ISET pad falling to zero, never by the charge LED: charger 1's
CHG went dark in a stop and stayed dark while it charged [M].
Before the solar plug first goes into the combiner's J4:
continuity from the marked lead's contact to VBUS, and
none from it to GND; then, with the panels uncovered,
J4 pin 1 on the combiner positive against pin 2 — the
charger's input tolerates only −0.3 V the wrong way round [D].
If it is wrong
A negative reading on the unmated plug is a plug wired backwards: do not mate it.
A negative reading at J5 with the pack in means the sign check was
skipped: unplug the pack before anything else touches J5, and meter
the gauge and the charger before trusting either. No reading: the pack fuse (FW-28), or the
pigtail's crimp — the Battery Pack page's checks first. A reading that sags when you
touch the wires is a cold joint at a pad; reflow it with fresh flux.
THERM to GND reading about half
the expected 9.5 kΩ with the pair on points at an uncut
THERM link: unsolder the pair, cut again, meter open, refit.
7.2
Solar: three panels, three diodes, one pair
What this is
Each panel feeds the charger through its own Schottky diode, so a shaded panel
cannot pull current out of the lit ones. The diodes live on a small combiner board next
to the panels, so only one solar pair crosses the equator to the charger. The flight
probes use a fabbed board, meteo-solar-combiner (ordered
2026-10-03, arrived 2026-10-15, five boards): three SS14
diodes placed by the fab, a pad pair and a strain-relief hole for each panel's leads,
one 2-pin JST-XH header, and five meter pads — TP1–TP3
on each panel before its diode, TP4 on the output,
TP5 on ground. A scrap of perfboard with three 1N5817 is the
same circuit built by hand. Either way the panels' leads are soldered to the
combiner, with no connector: the panels are bonded into the shell the combiner sits
in, and the two never part. As built, every panel lead ends in an XH plug into a socket
on the combiner's pad pair, on all three combiner boards; accept the plugs or solder is
open (FW-29). The second set's plugs were crimped red to minus and caught by the sign
check.
Parts
Voltaic P123 — 3 (solder pads marked V+ and V− on the back)
The solar combiner board, its three SS14 placed — 1; or a scrap of perfboard (the ElectroCookie mini will do) and 1N5817 — 3
Pre-crimped 22 AWG JST-XH lead, 305 mm — 2; both are black, so red heatshrink to mark one; no document records the platform-to-deck distance this pair must span
24 AWG silicone wire, red and black, for the panels' leads
1 kΩ resistor, for the check — 1
Drawing
Three panels, three diodes, one pair to the charger. The diodes are SS14 on the fabbed combiner board and 1N5817 on a perfboard; the wiring is the same. The combiner sits by the panels so only one solar pair crosses the equator. Drawn soldered, as the combiner spec has it; as built, plugged (FW-29).
Steps
Leads on the panels. Red to V+, black to
V−, 24 AWG silicone. The panel is live in any light
and the far ends of its leads are bare: keep it covered — face down, or taped
over — from now until both leads are soldered to the combiner.
Prove each panel's polarity before it is bonded into the hull.
Uncover it, red probe on the red lead, black on the black: a positive reading.
Cover it again. After bonding, a reversed panel is a destructive rework.
Diodes on the combiner, band toward the output. On the fabbed board
they arrive placed. On a perfboard each panel's red will go to a diode's plain end
(anode); the three banded ends (cathodes) join into one positive bus, and the
three blacks into one negative bus. Run the diode check below before any panel
is soldered in.
Solder each panel's leads to the combiner — no connector. Both wires
go through the strain-relief hole first, so a pull lands on the board and never on
a joint; red to the rectangular + pad. On a perfboard, lace them through a
spare hole the same way. (Built plugged, as above: sign-check each panel plug first.)
One JST-XH header on the output, pin 1 = +, and one pair down.
Mark one of the two black leads red at both ends; the marked one goes in
cavity 1 of the housing, the + side. At the charger the pair is
soldered into the Opt. Cap holes, VBUS
and GND, not plugged — §7.1.
Check
The bare combiner first, no panels, meter in diode mode: red probe on each
panel-side point (TP1–TP3; on a
perfboard, the diode's plain end), black on the output (TP4):
0.2–0.4 V [C] (combiner boards 2 and 3 read 0.21 V on the Klein [M]; a
Schottky at the meter's small test current can read 0.15 V [C]).
Probes swapped: OL. Then with the panels soldered in:
a 1 kΩ resistor across the output, black probe on ground, one panel uncovered
at a time. Its point reads that panel's voltage — a few volts; the open-circuit
figure is 7.09 V at 25 °C [D] — and the output reads 0.2–0.4 V less [C].
Last, all three uncovered and one then covered: that panel's own point falls
toward zero.
If it is wrong
A diode that reads the other way about on the bare board is reversed. So is the
diode of a covered panel whose own point stays near the output voltage: the output
is feeding the dark panel through it. Watching the output alone cannot show this —
the other two panels hold it up either way. A negative reading at a panel's
point is a panel wired backwards: harmless, and dead. Re-check every band against
the drawing. Never put the charger's input above 10 V [D]: the bq24074 shuts its input off
between 10.2 and 10.8 V [D]; the panels cannot reach that, a bench supply set wrong can.
7.3
The board's power section: J5 → F1 → U1 → JP1
What this is
The fuse, the regulator and its three capacitors make the always-on 3.3 V rail.
JP1 is the rail's on/off switch, and later the place a meter
goes to measure what the probe draws.
Parts
2.54 mm screw terminal, 2-way (J5) — 1
Polyfuse, 1.1 A hold (F1) — 1
MCP1700-3302E/TO (U1) — 1
1 µF ceramic (C1, C2) — 2; 10 µF ceramic (C3) — 1
2-pin header + shunt (JP1) — 1
Short links: red and black 22 AWG
Drawing
Columns 1–6. Read the regulator's legs off the datasheet drawing on the right, not off this page's memory of it, and then off the real part (bench gate ④, passed on fabbed board 1 on 2026-10-14).
Steps
Under the board first: the two rail ties (+ rails at column 3, − rails
at column 6), and leave room for the orange VBAT wire from column 1 (§7.10) and the
black modem return into column 3, hole i.
Links: column 2 to column 3 (hole g, black — J5's ground has no rail
hole of its own, because J5's body covers it); column 3 to the − rail at column 3;
column 6 to the + rail at column 6.
C1 across columns 3 and 4 (hole f); C2 from column 5 to the −
rail at column 5, C3 from column 5 to the − rail at column 4. Ceramic
capacitors have no polarity.
U1. Find pin 1 on the real part first: hold it flat, marked
face toward you, legs down — Microchip's drawing then reads 1 GND, 2 VIN,
3 VOUT left to right (DS20001826E, Package Types; Table 3-1). Put its legs in
columns 3, 4, 5 (hole h) with the flat face toward the bottom edge, so pin 1
lands in column 3.
F1 from column 1 (hole h) to column 4 (hole g), bending the legs to
fit.
JP1 in columns 5 and 6 (hole g). Leave the shunt off.
J5 last, pin 1 in column 1, pin 2 in column 2, hole j, wire
entries facing the bottom edge.
Check
Unpowered: no beep between column 1 and the − rail, nor between column 5 and the −
rail; a beep between column 2 and the − rail. Then the pack on
J5 (its plug metered for sign first, §7.1), JP1 shunt off: column 4 reads the same as column 1
to within a few hundredths of a volt [C] — almost no current flows; JP1 pin 1
(column 5) reads 3.30 V ± 0.1 V [D] — the carrier spec's acceptance band; column 6 reads 0 V. Only now fit the shunt, and column 6 and both + rails
read the same 3.3 V.
If it is wrong
About the pack voltage at JP1 means VIN and VOUT are swapped — U1 is in
backwards. 0 V with the pack present: U1's GND leg is not in column 3, the
column 2 → 3 link is missing, or F1 is open. Warm regulator with nothing
connected: a short on the output; disconnect the pack and ring column 5 to the −
rail. The pinout itself was bench gate ④ and passed on 2026-10-14 on fabbed board 1 (flat
face GND–VIN–VOUT as drawn, 3.34 V out [M]); read the legs of the part you hold off the
datasheet drawing all the same.
7.4
The fifteen wires to the DFR0923
What this is
3V3, ground and thirteen signals, one 22 AWG solid wire each, from the daughter
board to the shield's screw terminals. The FireBeetle plugs into the shield last, after
every wire is checked.
22 AWG solid hookup wire in the eight colours below
Paper flags or a label maker for the IO numbers
Drawing
The fifteen wires. Colour by job, and a paper flag with the IO number on both ends of every wire — two wires share each colour except red and black.
Wire
Net
ESP32
FireBeetle silk
Board strip
Silk source
red
3V3
3V3
3V3
6B
DFRobot wiki: “3V3 outputs 3.3V”
black
GND
GND
GND
B− rail, col 25
—
white
GPS_EN
IO25
D2
24B
DFRobot wiki “25/D2”
white
RB_EN
IO26
D3
21B
DFRobot wiki “26/D3”
white
RB_ONOFF
IO14
D6
30B
DFRobot wiki “14/D6”
blue
SDA0
IO21
SDA
3T
DFRobot wiki “21/SDA”
yellow
SCL0
IO22
SCL
4T
DFRobot wiki “22/SCL”
blue
SDA1
IO18
SCK
27T
DFRobot wiki “18/SCK”
yellow
SCL1
IO19
MISO
28T
DFRobot wiki “19/MISO”
purple
RB_RX
IO17
TX2?
28B
UNVERIFIED — not in DFRobot’s table; espboards.dev says TX2
purple
RB_TX
IO16
RX2?
29B
UNVERIFIED — not in DFRobot’s table; espboards.dev says RX2
green
OW_DATA
IO4
D12
15B
DFRobot wiki “4/D12”
green
SENSE_EXC
IO13
D7
7B
DFRobot wiki “13/D7”
green
NTC_SENSE
IO39
A1
9B
DFRobot vendor file: “IO39/A1”
green
LEAK_SENSE
IO35
A3
11B
DFRobot wiki “35/A3”
⚠ Two things to read off the boards before the first wire goes in
IO16 and IO17 are missing from DFRobot's own FireBeetle pinout table. The
carrier spec lists them as exposed, and a third-party pinout calls them RX2 and TX2,
but the maker's table does not include them. They carry the modem's UART. Find two
terminals on the shield you can prove are IO16 and IO17 — the silk on the
FireBeetle and on the shield, or continuity from the FireBeetle's pin to the terminal
with the FireBeetle seated and unpowered. If you cannot, stop: the modem has no UART on
this route until that is answered.
DFRobot publishes no terminal-by-terminal list for the DFR0923. Its wiki
gives counts — 5V ×3, 3.3V ×3, GND ×6, digital ×12, analog ×5, I2C ×3, SPI ×1 — and not
the labels. The “look for” column is the FireBeetle's silk, which is what the shield
most likely repeats; confirm each one by continuity before trusting it.
The same grip on every screw terminal on this page.
Steps
Shield first, empty. Leave its 7–24 V input terminal and the
5V terminals empty — nothing on this probe uses them — and set the LED switch
to off: the wiki puts a status LED on every terminal but GND.
Cut each wire to length with some slack, strip both ends, and flag
both ends with the IO number before soldering anything.
Board end: solder each wire into a free hole of the column the table
gives. Solid wire, because it stays where you put it on a board.
Shield end: strip a little at a time until the bare copper reaches the
back of the clamp with none showing outside it. Insert, tighten, tug. One wire per
terminal.
Plug the FireBeetle in last, the right way round — match its pin
labels to the shield's.
⚠ The FireBeetle is fed through its 3V3 pin, and nothing else
Its own regulator, LiPo charger and JST battery connector stay unused
(architecture-power-and-wiring.md, the always-on domain):
never plug a battery, or anything else, into the FireBeetle's battery connector.
With USB plugged in and JP1 fitted, two live 3.3 V sources — the MCP1700 and the
FireBeetle's own regulator — would drive the same rail, and current can then flow
backwards into whichever sits lower, which neither is designed to take. So pull JP1
whenever USB is connected, and fit it again only after USB is out.
Check
FireBeetle out, nothing powered: ring each of the fifteen from its board
column to its shield terminal — a beep, and no beep to the two neighbouring
terminals. Then with the FireBeetle seated, ring from each FireBeetle pin to its board
column. Fifteen beeps, no extras.
If it is wrong
A wire landed one terminal over is the classic fault, and it is silent until a
sensor “does not answer”. The flags are what catch it: every flag must match the
terminal label it sits under.
7.5
The sensor bus, I²C0: QW1, the BMP581, the BME280 seat
What this is
The always-on bus on IO21/IO22: the fuel gauge on QW1, the
barometer in SOCK_BARO, and the BME280 in a seat of its
own.
Parts
4-way female header (QW1 bench socket) — 1, and one owned Qwiic-to-male-header cable
7-way female header (SOCK_BARO) — 1
4-way female header (the BME280 seat) — 1
The BMP581 with a 7-pin header soldered on once; the BME280 SEN-13905
Blue and yellow 22 AWG for the links
Drawing
The sensor bus. Three pull-up sets sit on the breakouts and none on this board — that is deliberate (carrier spec, “Parts”).
Steps
QW1 in columns 1–4: pin 1 GND, 2 3V3, 3 SDA0, 4 SCL0. The owned
Qwiic cable plugs the gauge's Qwiic socket into it; the proto card records its
leads as red 3V3, blue SDA, yellow SCL (and black GND) — ring them before trusting
that.
The BMP581's header, once: cut the supplied header to 7 pins and
solder it to the board's seven holes. Leave both of its solder jumpers as shipped:
I2C ADDR at its default, 0x47, and
I2C_Pull_Up untouched — its pull-ups are part of the bus's total.
SOCK_BARO, 7-way, in columns 5–11, so all seven pins are held and an
offset is impossible. Pins 1–3 (INT, SDO, CSB) connect to nothing; 4 SDA, 5 SCL,
6 GND, 7 3V3.
The BME280 seat — SOCK_BME in the CSV since
2026-10-02, drawn dashed. A 4-way female strip
in columns 12–15 for the board's I²C row, which the datasheet note lists as
GND, 3.3V, SDA, SCL. It is unkeyed: mark pin 1 (GND) on the board in ink.
If your BME280 also has its 6-pin SPI row soldered, it will overhang the seat on one
row — note how it sits, and support it (§9). The fabbed carrier answers this
with a second, 6-way socket that is mechanical only.
The links: blue column 3→8→14 (SDA0), yellow column 4→9→15 (SCL0), and
each GND and 3V3 column to its rail.
Check
Unpowered: ring the three SDA columns together (3, 8, 14), the three SCL columns
together (4, 9, 15), and confirm SDA does not beep to SCL. Powered, with the
FireBeetle running an I²C scan on IO21/IO22: exactly 0x36 (MAX17048),
0x47 (BMP581) and 0x77 (BME280) [D] — the second BMP581 is also at 0x47, but on
the other bus (§7.6), so no clash. An address is not a working gauge: read its voltage against
the meter on the pack, and see it move when the modem rail first comes on (§7.10): a live one
falls 0.1–0.19 V within a second [M]; one that does not move gives no reading (FW-26).
If it is wrong
One address missing: that sensor's seat is offset or reversed — the BME280's
is the likeliest, because it is unkeyed. The scan hangs or finds nothing: SDA
and SCL crossed somewhere, or a GND/3V3 swap at a seat; unpower and ring it. A gauge
that answers at 0x36 but reports a nonsense voltage has power and no pack on its
JST-PH ports — it still enumerates. So does a failed one: two answered at 0x36 with the right
ID and a fixed, plausible voltage (3.547 V against a 3.95 V cell; 3.192–3.195 V
against 3.55 V [M]); an ID-only scan catches neither (FW-26). A resistive pack fuse fools
it too: it read the charger, 4.23 V over a 3.54 V cell [M] (FW-28).
7.6
The GPS bus, I²C1: U2, R1, QW2
What this is
A load switch, U2, gives the GPS 3.3 V only while IO25
is high, and the GPS has a bus of its own on IO18/IO19. Left on the sensor bus with its
rail off, it would leak about 2 mA [C] backwards through its protection diodes from the
other boards' pull-ups (carrier spec, “The backfeed problem”). That is why nothing
from the sensor bus goes on this bus. One board does ride on it: since 2026-11-03 a
second BMP581 plugs into the GPS's second Qwiic port, sits on I²C1 at 0x47 and has power only
while the GPS rail is up (whether it stays there is FW-29's).
Parts
TPS22918 on a SOT-23-6 adapter (U2) — 1
100 kΩ (R1) — 1
4-way female header (QW2 bench socket) — 1, and one owned Qwiic cable
The SAM-M8Q, GPS-15210, and the SparkFun Qwiic BMP581 (SEN-20171) on its second port, with one Qwiic cable
Drawing
The GPS gets its own bus and its own rail; only the second BMP581, on the GPS's own second Qwiic port, joins them.
Steps
Solder U2 onto its adapter (the fiddly joint — §5). The pin map, from
the TI datasheet note: 1 VIN, 2 GND, 3 ON, 4 CT, 5 QOD, 6 VOUT, top view.
Ring the adapter: each chip pin to its adapter pin, and no pin to its
neighbour. Write the pin numbers on the adapter.
Seat it across the channel in columns 22–24, pins 1–3 in the bottom
half, so: 22B VIN, 23B GND, 24B ON; 22T VOUT, 23T QOD, 24T CT.
QOD connects to nothing; CT takes a 4.7 nF capacitor to ground.
QOD floating disables the output discharge. CT was left floating too when this page
was drawn, and the drawings still show it so — but the reviews of the fabbed carrier
on 2026-10-02 found that a floating CT switches the rail on in about 0.1 ms [C], fast
enough for a breakout's capacitors to drag the 3.3 V rail toward the ESP32's
brown-out. The ordered board carries 4.7 nF on each switch's CT pin (C8, C9) for
a rise of a few milliseconds. On this board: one 4.7 nF ceramic from each
switch's CT strip (24T for U2, 21T for U3) to the nearest − rail.
R1 from column 24 to the − rail at column 24; the IO25 wire into column
24; links 22B → + rail, 23B → − rail; a red link 22T → 26T.
QW2 in top columns 25–28: 1 GND, 2 3V3_GPS, 3 SDA1, 4 SCL1; link 25T
→ − rail.
Never cut the SAM-M8Q's I2C jumper. Its two
2.2 kΩ resistors are the pull-ups on this bus, and they are what make the
backfeed fix work; whether the second BMP581's board adds any of its own is not recorded.
The second BMP581 plugs into the SAM-M8Q's second Qwiic port and answers at
0x47 only while IO25 is high.
Check
Before the FireBeetle, with 3V3 up: column 24 reads 0 V (R1 holding it
off) and column 22T reads 0 V. Touch a test lead from column 24 to the +
rail: 22T rises to 3.3 V; remove it and 22T falls back toward 0 V.
With the FireBeetle: drive IO25 high, scan IO18/IO19, and find 0x42 (the GPS) [D] and
0x47 (the second BMP581, once plugged in) [M];
drive it low and the rail collapses.
If it is wrong
22T sits at 3.3 V with column 24 at 0 V: the adapter is rotated —
VIN and VOUT have swapped sides. Empty scan with the rail up: SDA1/SCL1 swapped,
or the GPS's I2C jumper has been cut. 0x42 without 0x47: the
second barometer is not plugged in, or its silkscreen says BMP384 — the same red board.
7.7
DS18B20 on J8
What this is
The sea or ground temperature probe on 1-Wire, IO4, with its 4.7 kΩ pull-up on
the board. Its lead, the gland and why it has three wires are the
Thermal Probe page.
Parts
2.54 mm screw terminal, 3-way (J8) — 1
4.7 kΩ (R3) — 1
The DS18B20 probe
Drawing
J8 in columns 15–17, with the free column 18 doing its rail work. The order DATA, GND, 3V3 is the keying decision the thermal page explains.
Steps
R3 from column 15 to column 17 (hole h); the IO4 wire into 15. Column
16 (J8's ground) reaches the − rail through a wire under the board to the rail
at column 18; column 17 (3V3) is linked to column 18, and column 18 to the + rail —
J8's own rail holes are under its body.
J8 in columns 15–17: pin 1 OW_DATA, 2 GND, 3 3V3.
Identify the probe's three wires with the meter before they go near
J8 (HULL-28): only board 1's probe has been rung out, by diode test on 2026-10-15 (black =
GND [M]; red and yellow by the convention) — the other two have not, and reversing VDD and
GND destroys a sensor there is no spare of. Use the DS18B20's own datasheet
pinout and the meter's diode test between the wires.
Check
Probe unplugged, unpowered: column 15 to column 17 reads about 4.7 kΩ
(within the resistor's printed tolerance). With the probe in and the FireBeetle
running: a 1-Wire search on IO4 returns a ROM ID and a plausible temperature.
If it is wrong
Nothing found: DATA and 3V3 swapped, or R3 missing. A device reading
−85 °C is usually one that is not powered — check pin 3.
7.8
The carrier's NTC on J7
What this is
A 10 kΩ thermistor at the pack, in a divider with R4, read by IO39. IO13 powers
the divider only for the hourly read, so it draws nothing the rest of the time. This is
the reporting thermistor; the charger's own one is the pair of §7.1 (ADR 0018).
Parts
2.54 mm screw terminal, 3-way (J7) — 1
10 kΩ (R4) — 1
10 kΩ NTC, B 3977 K [D], leaded — 1, with a two-wire lead to the pack (15 are owned: see Parts and tools)
Drawing
J7 in columns 7–9, with the centre terminal deliberately empty and column 10 as its ground.
Steps
R4 from column 9 to column 10 (hole g) — column 10 is the gap after J7
and a ground strip, linked to the − rail at column 10. The IO13 wire into 7, the IO39
wire into 9.
J7 in columns 7–9: pin 1 SENSE_EXC, 2 vacant, 3
NTC_SENSE. The thermistor's two legs go to terminals 1 and 3; the centre terminal
stays empty.
Why the centre stays empty: the harness rule builds NTC and leak leads
as 3-position, centre-vacant, so the same lead later fits the fabricated board's
JST-XH port and cannot offset-mate it with one contact dead.
Check
Arithmetic first: with IO13 at 3.3 V, a 10 kΩ NTC over a 10 kΩ R4 puts
3.3 × 10/(10 + 10) = 1.65 V on IO39 at 25 °C [C]; at 20 °C
the NTC is about 10 kΩ × e3977(1/293.15 − 1/298.15) ≈ 12.6 kΩ, giving
about 1.46 V [C]. On the bench, FireBeetle out: jumper column 7 to the +
rail and read column 9 — 1.4–1.7 V at room temperature [C], and it falls as
you warm the thermistor in your fingers. While excited the divider draws 3.3 V ÷
20 kΩ ≈ 165 µA [C].
If it is wrong
3.3 V on column 9: R4 or the column 10 link to the − rail is missing. 0 V: the
thermistor is in the centre terminal or open. A reading that rises when warmed
means the NTC and R4 have swapped places.
7.9
Leak sense on J9
What this is
Two pads in the hull, normally an open circuit. IO13 excites them through R5 only
during a read; water across the pads pulls IO35 down. C6 gives the ADC the low source
impedance it wants: τ = R5·C6 = 100 kΩ × 100 nF = 10 ms [C], which is why
firmware waits 50 ms before reading.
Parts
2.54 mm screw terminal, 3-way (J9) — 1
100 kΩ (R5) — 1; 100 nF ceramic (C6) — 1
The lead to the hull pads (the pads themselves belong to the sealing cycle)
Drawing
J9 in columns 11–13. R5 spans from J7's excitation column; that is the IO13 the two sensors share.
Steps
R5 from column 7 to column 11 (hole f); C6 from column 11 to the
ground strip in column 10 (hole h); link column 13 (J9's ground) to column 14, and
column 14 to the − rail; the IO35 wire into 11.
J9 in columns 11–13: pin 1 LEAK_SENSE, 2 vacant, 3 GND. The
pad lead uses terminals 1 and 3.
Check
FireBeetle out: jumper column 7 to the + rail. Column 11 reads 3.3 V with
the pads dry [C] — nothing loads it. Bridge terminals 1 and 3 with a damp finger: it
falls clearly below 3.3 V. Remove the jumper: column 11 decays to 0 V — no bias
on the pads between reads.
If it is wrong
Column 11 at 0 V with column 7 high: C6 or a lead is shorted to ground, or
R5 is missing. Column 11 at 3.3 V even when wet: the pad lead is in the
centre terminal, or terminal 3 is not on ground.
7.10
The RockBLOCK: U3, JP2, J6, and the antenna
What this is
The modem runs straight from the pack: VBAT, tapped before F1,
through load switch U3 on IO26 and jumper
JP2 to J6 pin 1 and the modem's
pin 8 (ADR 0014). The modem takes 3.0–5.4 V [D] there and buffers its own
transmit burst; the supply sees at most 470 mA [D], and the charge peak measured
0.45 A across JP2 [M].
Where the modem sits. Since 2026-10-20 the RockBLOCK hangs under the solar deck in the
crown (a 3 mm plate at z +42 to +45, right under the antenna), not on the main
platform; its bay is 45 × 45 mm with no clearance yet (HULL-34). No document
records the platform-to-deck distance the J6 lead must span: do not cut the modem's cable,
or the five wires from J6, to length until it is measured.
Parts
TPS22918 on a SOT-23-6 adapter (U3) — 1
100 kΩ (R2) — 1; 2-pin header + shunt (JP2) — 1
2.54 mm screw terminal, 5-way (J6) — 1
20 AWG wire: orange for VBAT under the board and JP2 → J6:1; black for the modem's return
The modem's 10-way cable
The Amphenol 135110 cable and the Maxtena antenna
Drawing
Columns 16–30 and where J6's five wires land on the modem. The modem-side mapping is read from Ground Control's pin table against the CSV's notes, not from any document in this repo — check it against your own cable before power.
Steps
U3 onto its adapter, ring it, seat it across the channel in columns
19–21 exactly as U2: 19B VIN, 20B GND, 21B ON; 19T VOUT, 20T QOD, 21T CT — QOD
connects to nothing, and CT takes its 4.7 nF to the − rail as on U2 (§7.6).
The VBAT wire, under the board: 20 AWG orange from column 1 to
column 19. It is the only wire that taps the pack before the fuse, deliberately: a
polyfuse's resistance would eat the modem's margin against its 3.0 V
minimum [D].
R2 from column 21 to the − rail at column 21; the IO26 wire into 21;
link 20B → − rail; a short 20 AWG orange link 19T → 18T.
JP2 in top columns 18 (pin 1) and 17 (pin 2), hole c, shunt
off; a 20 AWG orange wire under the board from 17T to 26B.
J6 in columns 26–30, in the CSV's order: 1 VBAT_RB_SW, 2 GND,
3 RB_RX, 4 RB_TX, 5 RB_ONOFF. J6's rail holes are under its body, so its ground
(column 27) reaches ground by a 20 AWG black wire under the board to column
3, hole i, beside J5 — which also keeps the modem's return current off the thin rail.
The modem's cable. Ground Control's knowledgebase: the 9603's user
connector is a Molex PicoBlade, 1.25 mm pitch, 10-way, mating part
51021-1000. No cable shipped with the two owned units. A pre-crimped
MX1.25 kit (PicoBlade-compatible) fits — one is owned, the Cermant 2–10P kit (28 AWG,
150 mm) — and fills only the five positions J6 uses; its 150 mm is the kit's, not
a measured need. Ground Control's own tails cable carries all ten. Pin 1 is not marked
on the modem's board: it is the end of the header away from the mounting
hole beside it. Whichever cable is used, ring each wire to its connector pin and
flag it.
J6 to the modem, by Ground Control's pin table: J6:1 → pin 8
(“5v In” — the pin their power page says a 3.7 V Li-ion source connects to
directly); J6:2 → pin 10 GND; J6:3 (the ESP32 transmits, IO17) →
pin 6 TXD, which their table calls “Iridium TX (input)”; J6:4 (the ESP32
receives, IO16) → pin 1 RXD, “Iridium RX (output)”; J6:5 →
pin 7 OnOff. Pin 9 is labelled “Li-Ion” and is not used: it sits
behind the RockBLOCK's own internal diode (D1 in ADR 0014). Pins 2–5 stay
unconnected.
Both power controls are wired. U3 cuts the whole rail; J6:5 drives the
modem's own On/Off pin, which on the owned v3.D units is ordinary logic — off below
2.0 V, on above 2.4 V [D]. Which one the firmware uses is a measurement,
FW-10 (ADR 0014, “The On/Off trade”), which FW-07's supercapacitor test settles first.
Whether a v3.D modem treats an
undriven On/Off pin as on is not recorded, so firmware must drive IO14
high during a window either way — though the audit of 2026-10-15 holds this fails on a
Rev F modem with a full pack (FW-25). (The datasheet note's “leave On/Off floating” is the
Rev F rule, which ADR 0014 superseded for these boards.)
The antenna link. The Amphenol cable's plug screws onto the
9603's SMA connector; its jack takes the Maxtena's SMA-male. Finger-tight
only — the antenna's datasheet caps assembly torque at 8 in·lb [D], and a hand
on a small SMA nut stays well under it; no tools on SMA. About 100 mm of the
cable bends [C], from the drawing's connector lengths.
Check
Modem not connected, JP2 off, pack on J5. Column 19B reads the pack voltage;
column 21B reads 0 V; column 19T reads 0 V. Test lead from 21B to
the + rail: 19T rises to the pack voltage; remove it, it falls. Then the modem on J6:
remove the JP2 shunt and bridge its two pins with the meter set to measure current;
drive IO26 high and give the supercapacitors time to charge — the current is
high and falling meanwhile (0.45 A for about 13 s, then 0.13 A for about
10 s [M]) — until AT on the UART returns
OK: cold, that took 7.0, 9.0 and 12.0 s [M], so keep asking
rather than count ten. Read the gauge before and after IO26 goes high: it falls
0.1–0.19 V within a second [M] (FW-26). J6:5 reads above 2.4 V with IO14 high, and with IO14
low the modem stops answering. Before the first +SBDIX,
confirm the antenna link is mated at both SMA ends — never command a transmit into an
open connector.
If it is wrong
Silence for the first dozen seconds is normal (12.0 s was the slowest cold start [M]), not a fault. Silence
after: RX and TX swapped — unpower, swap J6:3 and J6:4, and try again; both are
3.3 V logic and the modem's RX tolerates up to 5.5 V [D]. Before you retry,
check the antenna link is still mated at both SMA ends. Never command a transmit into an
open connector.The meter's
current never rises: U3 rotated on its adapter, or JP2 not seated. Never feed
the modem from a bench supply above 5.4 V [D].
Bring-up, in order
The Track C card's nine steps, corrected to the CSV: no
BOOST_EN, no 5 V rail, J6 with five terminals, and the
On/Off check it never had. Do them in this order, and do not skip ahead when one
fails.
Look, then ring. Every joint under the magnifier. No beep from the +
rail to the − rail, nor from column 1 (VBAT) to the − rail. A short here is
found now or found as smoke.
Shunts off. JP1 and JP2 both removed. Pack on J5, its plug metered for sign first (§7.1): column 1 reads
3.0–4.2 V [D]; column 4 reads the same — F1 passes.
The regulator. JP1 pin 1 (column 5): 3.30 V ± 0.1 V
[D]. Only now fit the JP1 shunt.
Both enables off. FireBeetle out: column 24 (GPS_EN)
and column 21 (RB_EN) read 0 V — R1 and R2 doing
their job. Touch each to the + rail and see its rail come up (§7.6, §7.10).
The FireBeetle. Seat it on the shield — never with USB and the 3V3
wire both live: pull JP1 whenever USB is connected, and nothing ever goes in its
own battery connector (§7.4). Read 3.3 V at the
shield's 3.3V terminal before flashing anything. With the board drawing, read
0.00 V across the pack fuse, or it comes out (FW-28).
Sensor bus. Gauge on QW1, BMP581 in SOCK_BARO, BME280 in its seat
(GND/3.3V orientation checked first). Scan I²C0: 0x36, 0x47, 0x77 [D]. Read the
gauge against the meter; at step 9 it must move (FW-26).
GPS bus. GPS on QW2 (the second BMP581 on its second port), IO25 high, scan I²C1:
0x42 [D] and 0x47 [M]. IO25 low:
the rail collapses and IO18/IO19 go high-impedance. An empty scan may be the GPS's
I2C jumper, not the wiring.
Sense ports. DS18B20 on J8: a ROM ID and a plausible temperature. NTC
on J7: IO13 high, IO39 near mid-scale at room temperature (1.4–1.7 V [C]). Damp
finger across J9: IO35 falls from 3.3 V.
Modem last. On J6; JP2's shunt removed and its two pins bridged by the
meter set to measure current. IO26 high, the gauge read before and after (FW-26), then
wait for the OK — 7 to 12 s cold [M], not a fixed count:
AT → OK.
New for J6:5: with IO14 high the modem answers; with IO14 low it does not.
Immediately before the first +SBDIX, confirm the antenna
link is mated at both SMA ends — never command a transmit into an open connector;
then send it with the meter watching (bench gate ②, FW-02).
Write every reading down with its tag — the first build's numbers are the lab note
this page does not have yet.
Making it survive the sea
Solid wire on the board, stranded silicone for anything that moves. Solid
22 AWG between board and shield is fine only because both are fixed to the same
plate; leads to the pack, panels, modem and sensors are stranded.
Strain relief at every terminal: a cable tie or a dab of hot glue
behind the terminal, on the wire's insulation — never on the joint.
Heatshrink on every splice. Stagger paired splices so they do not sit side
by side.
No push-on jumper wires anywhere in the hull. The Qwiic cables' male pins in
the QW1/QW2 sockets are exactly that kind of joint: for a flight build, cut the pins
off and solder those four leads straight into their columns, as the Track C
design did. The FireBeetle in the shield's headers and the breakouts in their sockets
are friction fits too; they need a mechanical hold, which is part of the open mounting
question below.
Conformal coat after bring-up passes, never before. Clean first: scrub
every joint with isopropyl alcohol and a brush (both are in the tools list) and let it
dry — rosin residue left under a coat lifts it and corrodes beneath it. Then mask every
screw terminal, header, socket, the jumpers, the SMA and the modem connector, and
coat.
The harness rule: NTC and leak leads built 3-position, centre vacant;
DS18B20 in DATA, GND, 3V3 order.
Mounting is half done. Since 2026-10-17 the bq24074 charger, with the fabbed
carrier, the GPS and the MAX17048, sits on sixteen Ø6 pillars on the main platform. The
platform has no bosses for the daughter board or the shield (HULL-31): nothing here says
where they sit or how they are held, and the GPS's own place is open (HULL-02). The
RockBLOCK and the combiner hang under the solar deck (§7.10).
Hull figures — volumes, mass, centre of gravity — are not quoted here; they
live in device/enclosure/buoy-description.md.
Open, and not to be guessed at the bench
Closed since this list was written: the charger's cold gate, measured by ice on
all three chargers and accepted as built on 2026-11-03 (§7.1, ADR 0018); the MCP1700's
legs, passed on 2026-10-14; the charger's mounting, on a pillar of the main platform; the
chargers, bought, with three modified and charging.
DOC-18
Whether this
board flies. Rev. 3 says the hand-built carrier never does; this page builds
it to flight standard. Closes by ADR after bench gates ①–④.
FW-12
The DFR0923's
own draw is unmeasured. A status LED on every terminal but GND, behind a switch,
and its own 7–24 V input circuitry. What it costs asleep with the switch off —
and whether those LEDs load the analog inputs with it on — is a bench gate ① item
for the Klein's 200 µA range.
HULL-31
The daughter
board and the shield have no mounting on the main platform.
PROC-19
20 AWG
versus JST-PH. The pack's wire rule and its connector contradict each other; the
Battery Pack page sets out the two ways out. The carrier harness was bought as pre-crimped
22 AWG XH leads; what stays open is the pack link.
FW-02
Bench gate ②:
a full +SBDIX from the pack through U3, supercapacitor charge
included. The cold start is measured [M] (7.0–12.0 s, 0.45 A peak); the pack's low
end is owed.
FW-03
Bench gate ③:
the SAM-M8Q over I²C with the adapted firmware.
FW-10
Rail-cut or
On/Off for the modem — both are wired. It is decided first by whether the
supercapacitor survives a cut (FW-07, the INA219); only then does the modem's standby want the
µA meter.
HULL-28
The DS18B20's
wire colours — board 1's probe was rung out on 2026-10-15, the other two are not — and its
cable diameter against the PG7 gland's range.
DOC-11
The carrier
spec's table disagrees with the CSV. This page follows the CSV — and is itself a
snapshot of it as of 2026-09-30.
FW-25 to FW-29, HULL-34
Opened
since this list was written, argued where cited: FW-25 (§7.10), FW-26 (§7.5), FW-27 (§7.1),
FW-28 (the pack fuse), FW-29 (§7.2, §7.6), HULL-34 (§7.10).
not tracked
IO16 and
IO17 on the FireBeetle and the shield: absent from DFRobot's pinout table; prove
them by continuity before wiring the UART (§7.4).
not tracked
The
shield's terminal labels and the breadboard's hole count and rails: not published;
read and ring them on arrival.
not tracked
The modem
cable's wire colours, and how a v3.D modem treats an undriven On/Off pin.
Part of SouthPing — southping.org.
This page is licensed CC BY 4.0:
reuse it, adapt it, publish it, with credit to SouthPing and a link back.
Source code in the project is Apache-2.0. Manufacturers' datasheets and product
photographs remain theirs and are not covered by this grant.