

Boathub
A BoatHub remote sailboat monitor based on ESP32 DevKit microcontroller hardware and KiCad board layout
- Size
- 134.6 × 91.4 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 58
- Nets
- 74
- Pads
- 192
- Tracks, vias
- 248, 18
- Pours
- 6
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 20 Sep 2026
- Updated
- 25 Oct 2026
Overview
Boathub is an open-source printed circuit board by behringer24, from the behringer24/boathub repository on GitHub. It is a 2-layer board of 134.6 × 91.4 mm with 58 parts on 74 nets, routed with 248 tracks and 18 vias.
It is built around the R-78K5.0-1.0, 1.5KE20A and BC337. Its parts include 22 resistors, 13 connectors, 12 capacitors, 3 diodes and 2 ICs. It belongs with the home automation and IoT boards and the ESP32 boards of this library.
Main components
3R-78K5.0-1.0
SIP,11.5x7.6mm1 1A 5V 6.5V~36V 92% SIP,11.5x7.6mm Isolated Power Modules ROHSRECOM PowerIsolated Power Modules1.5KE20A
DO-27-55℃~+150℃ 1.5kW 17.1V 19V 1uA 27.7V 54.2A@10/1000us TVS DO-27 ESD and Surge Protection (TVS/ESD) ROHSShenzhen Jinkaisheng ElecESD And Surge Protection (TVS/ESD)BC337
TO-92-31 NPN 100 100MHz 100nA 45V 5V 625mW 700mV 800mA NPN TO-92-3 Bipolar (BJT) ROHSFoshan Blue Rocket ElecBipolar (BJT)
README
README.mdESP32 BoatHub
Boat monitoring, SeaTalk1 gateway, track logger and NMEA2000 groundwork, built around an ESP32-S3 N16R8.
A permanently powered ESP32 system monitors the boat in the marina, provides its own on-board Wi-Fi, pushes measurements over an outbound TLS connection to a self-hosted Docker server, and is later extended into a gateway for SeaTalk1, autopilot control, track logging and NMEA2000.
Based on the project guide v0.1 of 2026-09-13 (PDF, German).
What it does, in the order it is built
| Scope | |
|---|---|
| v1 | Base monitoring: temperatures, humidity, air pressure, battery, optional bilge level, on-board Wi-Fi, marina Wi-Fi, server uplink |
| v2 | Read SeaTalk1: log, depth, compass, GPS, autopilot status |
| v2.5 | Store GPS tracks locally and sync them as a digital logbook |
| v2B | Write SeaTalk1: local autopilot control - only after RX runs reliably |
| v3 | NMEA2000 over TWAI/CAN |
| v4 | Android tablet or phone running OpenCPN as a plotter |
Software scope in detail: docs/ROADMAP.md. Build order: docs/design/README.md.
Architecture (target)
Sensors (1-Wire / I2C / 4-20 mA)
|
ESP32-S3 N16R8 ──SoftAP──> BOOT-NETZ (Pixel, tablet, OpenCPN)
| |
| └──STA──> marina Wi-Fi ──TLS──> self-hosted Docker server
| ├── Mosquitto (MQTT)
SeaTalk1 (stage 2) ├── Backend/API
NMEA2000 (stage 3) ├── PostgreSQL + PostGIS
└── Grafana / web dashboardThe ESP opens the internet connection outbound. No inbound ports are needed in the marina network,
and the board does not route between its two networks - BOOT-NETZ reaches the board, not the
internet.
The two networks share one radio. In AP+STA mode the SoftAP is forced onto whatever channel the
station connects to, so when the marina access point changes channel - many do so automatically -
every device on BOOT-NETZ is disconnected. This is normal behaviour, not a fault: clients have to
tolerate reconnects, and no local UI may treat a dropped socket as anything unusual.
Hardware at a glance
- Controller: 1 x ESP32-S3 N16R8 DevKitC-1 (third-party module). It sits on the bundled screw-terminal carrier for the bench build and in a socket on the main board once installed - A-001, B-002. Ships with an onboard PCB antenna; the bundled external antenna needs a solder rework to activate
- Temperature: 3 x DS18B20 (engine bay, bilge water, fridge), each on its own 1-Wire GPIO
- Cabin climate: SHT31-D (I2C, address 0x44)
- Barometer and battery bay: BME680 (I2C, address 0x76) on a short cable in the battery bay - air pressure for the weather trend, and the bay's air temperature and humidity. Its gas heater stays off - A-010
- Analog: 2 x ADS1115 on the shared I2C bus, 0x48 and 0x49. The second is socketed and may stay empty until its channels are specified
- Attitude and motion: LSM6DSOX IMU on the I2C bus at 0x6A, with its interrupt on GPIO2 - heel and pitch under sail, impacts at the berth
- Battery: 100 kΩ / 10 kΩ divider (factor 11.0) into ADS1115 A0, tapped upstream of the reverse-polarity diode, calibrated against a multimeter
- Bilge level (optional): hydrostatic 0-1 m probe, 4-20 mA, 100 Ω burden into ADS1115 A1
- Power: 12 V house supply → 2 A fuse → TVS 1.5KE20A → 1N5822 → DC/DC 9-36 V to 5 V
The TVS sits ahead of the Schottky diode, and the battery tap ahead of both - see docs/design/B-001-power-supply.md for why the order matters.
Full parts list with prices and sources: docs/MATERIAL.md
Pin assignment
| GPIO | Function today | Later / note |
|---|---|---|
| 2 | IMU interrupt | impact detection, A-009 |
| 4 | DS18B20 engine bay | dedicated 1-Wire bus |
| 5 | DS18B20 bilge water | dedicated 1-Wire bus |
| 6 | DS18B20 fridge | dedicated 1-Wire bus |
| 7 | spare | optional water tank DS18B20 |
| 8 | I2C SDA | SHT31, BME680, both ADS1115, IMU |
| 9 | I2C SCL | SHT31, BME680, both ADS1115, IMU |
| 15 | reserved | SeaTalk RX (stage 2) |
| 16 | reserved | SeaTalk TX (stage 2) |
| 17 | reserved | TWAI TX (stage 3) |
| 18 | reserved | TWAI RX (stage 3) |
| 21 | spare | optional local buzzer - through a transistor, 20-30 mA exceeds the GPIO limit |
| 43/44 | debug UART | keep free for servicing |
| 48 | onboard WS2812 RGB LED | DevKit-internal, confirmed on the delivered board - do not reuse |
Avoided: strapping pins GPIO0/3/45/46, USB pins GPIO19/20, and GPIO33-37 on the N16R8 (octal PSRAM). Always cross-check the silkscreen of the delivered DevKit board before soldering.
Safety rules
- 12 V is not harmless. A boat battery can deliver very high short-circuit currents. Every new feed gets its own fuse close to the source.
- Never feed 5 V into 3V3. USB and the 5V pin may supply the DevKit at the same time: each feeds it through a diode of its own, so the higher one carries the load and neither drives the other. On the main board USB and the 12 V side can therefore be connected together, and the DevKit stays in its socket to be flashed or debugged - as long as the DevKit's IN-OUT and USB-OTG solder pads stay open.
- SeaTalk TX stays disabled until RX runs reliably and the output stage has been tested separately on the bench. After a reset or a lost connection the transmit path is passive.
- No autopilot commands from the internet. Control lives on the local on-board Wi-Fi only; the server receives telemetry.
- No Wi-Fi or server passwords in source code. Configuration lives in NVS/Preferences.
- Sensor and network faults are decoupled. A broken probe, a silent broker or a marina access point that vanishes may cost its own reading or its own connection, and nothing else. The watchdog is there for what gets past that.
- The boat is permanently on shore power in the marina, so the BoatHub runs continuously. On the 2 x 100 Ah AGM bank (~100 Ah usable, no solar or wind) it would still draw 40-60 Ah per month on its own, so a low-voltage backstop stays mandatory for the case shore power fails and stays failed - the remaining capacity belongs to the bilge pump.
- The shore-power-loss alarm is gated on at least 6 hours of prior charging, so it stays quiet underway where running on the battery is normal. See docs/design/B-001-power-supply.md.
- Alarms are judged on the board and acknowledged only at the box, with the BOOT button. The server stores and shows the events; nothing it sends can silence or clear an alarm. See docs/design/A-012-alarm-and-threshold-logic.md.
Repository layout
board/ PlatformIO firmware project - ESP32-S3 N16R8, see board/platformio.ini
hardware/
├── main-board/ KiCad project, see docs/design/B-002-main-board.md
│ └── fab/<rev>/ what was actually sent to the fabricator, one directory per revision
└── case/ parametric FreeCAD model of a printed enclosure, run rather than
drawn, see hardware/case/README.md
server/ MQTT broker in Docker, see server/README.md
docs/
├── ROADMAP.md planned software functionality, board and server
├── CHANGELOG.md software change log
├── MATERIAL.md bill of materials and tools
├── operating-card.html two printable pages for on board: LED, buttons, settings, cable colours
├── design/ build guide and one document per feature (+ TEMPLATE.md)
│ ├── A-NNN-*.md phase A: the bench build on USB power
│ ├── B-NNN-*.md phase B: 12 V supply, protection, the main board
│ └── D-NNN-*.md phase D: SeaTalk1
├── reference/ source documents (project guide PDF)Where to start
Read docs/design/A-001-devkit-and-carrier.md to identify the board and its carrier, then build along docs/design/A-002-bench-setup-usb.md.
Phase A runs entirely on USB power - no 12 V anywhere. The 12 V supply is built only once the whole sensor and network stack has run 24 hours on USB without intervention, so that a brownout later can be blamed on the converter rather than on the firmware. The full build order is in docs/design/README.md.
Once it is installed, print docs/operating-card.html from a browser and keep it with the box: what the LED and the two buttons mean, what every setting on the configuration page does, and the cable colours.
Parts
58| Qty | Value | Footprint | References |
|---|---|---|---|
| 10 | 100nF / 50V | Capacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mm | C1, C2, C4, C6, C7, C8, C9, C10, C11, C12 |
| 8 | 1K 0,1% | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R9, R15, R16, R17, R18, R19, R20, R21 |
| 4 | MountingHole_Pad | MountingHole:MountingHole_3.2mm_M3_Pad | H1, H2, H3, H4 |
| 3 | 100 | Resistor_THT:R_Axial_DIN0309_L9.0mm_D3.2mm_P12.70mm_Horizontal | R2, R4, R6 |
| 3 | 2K | Resistor_THT:R_Axial_DIN0309_L9.0mm_D3.2mm_P12.70mm_Horizontal | R1, R3, R5 |
| 2 | 1.5KE20A | Diode_THT:D_DO-201AE_P15.24mm_Horizontal | D1, D3 |
| 2 | 10K | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R11, R13 |
| 1 | 100 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R14 |
| 1 | 100 0.1% | Resistor_THT:R_Axial_DIN0309_L9.0mm_D3.2mm_P12.70mm_Horizontal | R22 |
| 1 | 100 uF / 35V, 105°C | Capacitor_THT:CP_Radial_D8.0mm_P3.50mm | C3 |
| 1 | 100K 0,1% | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R7 |
| 1 | 10K 0,1% | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R8 |
| 1 | 1K | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R12 |
| 1 | 1N5822 | Diode_THT:D_DO-201AD_P15.24mm_Horizontal | D2 |
| 1 | 4,7K | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R10 |
| 1 | 470 uF / 16V, 105°C | Capacitor_THT:CP_Radial_D10.0mm_P5.00mm | C5 |
| 1 | BC337 | Package_TO_SOT_THT:TO-92_Inline | Q1 |
| 1 | Conn_01x08_Socket (ADS breakout) | Connector_PinSocket_2.54mm:PinSocket_1x08_P2.54mm_Vertical | J1 |
| 1 | Conn_01x10_Socket (ADS1115 1) | Connector_PinSocket_2.54mm:PinSocket_1x10_P2.54mm_Vertical | J6 |
| 1 | Conn_01x10_Socket (ADS1115 2) | Connector_PinSocket_2.54mm:PinSocket_1x10_P2.54mm_Vertical | J10 |
| 1 | ESP32-S3-N16R8-DevKit_01x22_Socket_Right | Connector_PinSocket_2.54mm:PinSocket_1x22_P2.54mm_Vertical | J11 |
| 1 | ESP32-S3-N16R8-DevKit_01x22_Socket_left | Connector_PinSocket_2.54mm:PinSocket_1x22_P2.54mm_Vertical | J7 |
| 1 | Jumper_2_Open (ST_GND to GND, Connect if TX) | TestPoint:TestPoint_2Pads_Pitch2.54mm_Drill0.8mm | JP2 |
| 1 | PC817 | Package_DIP:DIP-4_W7.62mm | U1 |
| 1 | R-78K5.0-1.0 | Converter_DCDC:Converter_DCDC_RECOM_R-78E-0.5_THT | U2 |
| 1 | Screw_Terminal_01x02 (12V Boat Battery) | TerminalBlock_MetzConnect:TerminalBlock_MetzConnect_Type101_RT01602HBWC_1x02_P5.08mm_Horizontal | J9 |
| 1 | Screw_Terminal_01x02 (Bilge depth sensor) | TerminalBlock_MetzConnect:TerminalBlock_MetzConnect_Type101_RT01602HBWC_1x02_P5.08mm_Horizontal | J12 |
| 1 | Screw_Terminal_01x04 (DS18B Bilge) | TerminalBlock_MetzConnect:TerminalBlock_MetzConnect_Type101_RT01604HBWC_1x04_P5.08mm_Horizontal | J15 |
| 1 | Screw_Terminal_01x04 (DS18B Engine) | TerminalBlock_MetzConnect:TerminalBlock_MetzConnect_Type101_RT01604HBWC_1x04_P5.08mm_Horizontal | J16 |
| 1 | Screw_Terminal_01x04 (DS18B Fridge) | TerminalBlock_MetzConnect:TerminalBlock_MetzConnect_Type101_RT01604HBWC_1x04_P5.08mm_Horizontal | J14 |
| 1 | Screw_Terminal_01x04 (SHT3X) | TerminalBlock_MetzConnect:TerminalBlock_MetzConnect_Type101_RT01604HBWC_1x04_P5.08mm_Horizontal | J2 |
| 1 | Screw_Terminal_01x04 (Seatalk) | TerminalBlock_MetzConnect:TerminalBlock_MetzConnect_Type101_RT01604HBWC_1x04_P5.08mm_Horizontal | J17 |
| 1 | Screw_Terminal_01x06 (ABX00101 LSM6DSOXTR) | TerminalBlock_MetzConnect:TerminalBlock_MetzConnect_Type101_RT01606HBWC_1x06_P5.08mm_Horizontal | J4 |
Similar boards
- 4 layers75 × 55 mm

- 6 layers200 × 170 mm

- 2 layers41.9 × 53.9 mm

ReadoutPCB
ryanhulke/nuclear-fusor
Open-source hardware, embedded software, and control panel software for nuclear fusor operation.
20 parts21MIT - 2 layers50 × 25 mm

Mbus master
roarfred/AmsToMqttBridge
Minimalistic system to read AMS/HAN data from electrical meter
50 parts223 - 2 layers118 × 103.5 mm

- 2 layers28.7 × 81.3 mm

- 2 layers

LM80C R6
leomil72/LM80C
A Z80-based homebrew computer withTMS9918, AY-3-8910, Z80 CTC, Z80 PIO, and Z80 SIO
153 parts123GPL-3.0 - 2 layers121 × 68 mm

Freeds sanchez
pablozg/freeds
Derivador de energía solar excedente creado por Pablo Zerón, Diseño PCB por Amcalo, Tester original por Aeizoon, Wiki por Zoilo Mora
42 parts108
Questions
How big is the Boathub PCB?
It measures 134.6 × 91.4 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Boathub use?
58 parts, built around the R-78K5.0-1.0, 1.5KE20A and BC337. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the Boathub KiCad files?
From the behringer24/boathub repository on GitHub, at the commit this page was made from: the board is hardware/main-board/BoatHub.kicad_pcb and its schematic hardware/main-board/BoatHub.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Boathub design in my own project?
Its repository states no licence, so its author keeps all rights: ask behringer24 before reusing the design.