

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 |
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.
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