
Boardopenio
bigbrainlabs/BoatOpenIO
Universal 16-channel analog marine gateway for boats with legacy VDO sensors. Connects analog instruments to MQTT and Signal K without sensor replacement. ESP32-based, open source, modular mini-board system.

Universal 16-channel analog marine gateway for boats with legacy VDO sensors. Connects analog instruments to MQTT and Signal K without sensor replacement. ESP32-based, open source, modular mini-board system.
Input board is an open-source printed circuit board by bigbrainlabs, from the bigbrainlabs/BoatOpenIO repository on GitHub. It is a 2-layer board of 110 × 46 mm with 70 parts on 52 nets, routed with 254 tracks and 15 vias.
Its parts include 32 resistors, 16 diodes and 1 connector. It belongs with the sensors and measurement and home automation and IoT boards and the ESP32 boards of this library.
Universal Marine IO System – Open Source, modular, fully configurable
"Plug in, configure, done."
BoatOpenIO is an open hardware platform for sensor integration on boats. Each of the 16 sensor terminals can be freely assigned to any of the up to 16 input channels via software. Pluggable mini-boards handle signal conditioning — no soldering, no rewiring.
Part of the Logbook Without Posing series – Volume 3.
This project is 100% open source and free. The complete story – every idea, mistake, detour and solution – is documented in the book series "Logbook Without Posing".
If you find this project useful and want to support it: buying the books is the best way.
"Found this useful? Grab a book — or the whole series. You'll be supporting further development."
👉 Logbook Without Posing on Amazon
Note: The ready-made board set is no longer sold on Tindie. Due to the new EU regulation on shipping abroad, the effort is no longer proportionate for me as a private individual. The Gerber files in this repo remain free to download.
The boards can be purchased directly from PCBWay — I've set them up there as projects, so there's nothing to upload yourself: 👉 BoatOpenIO projects on PCBWay
PCBWay sponsors the board manufacturing for BoatOpenIO, the sensor gateway of this ecosystem — thank you!
👉 Order the boards directly: PCBWay project page
Always verify which mini-board is plugged into which channel before applying power.
Connecting 12V directly to a pull-up channel (instead of through a voltage divider) will destroy the MUX, all ADS1115 and the ESP32 through I2C chain reaction.
The input board includes protection circuitry (3.3V) on all 16 signal inputs — but correct mini-board assignment is still essential.
Commercial marine IO systems cost hundreds of euros and are closed black boxes.
BoatOpenIO costs a fraction of that — and anyone can adapt, extend, and improve it.
Sensor → Mini-Board → JST 3-Pin → PCB → Zener Protection → MUX → ADS1115 → ESP32 → MQTT → BoatOSIf your boat was built before 2000, this project was built for you.
Boats from that era came with analog VDO sensors — oil pressure, oil temperature, coolant temperature, tank level, RPM. These sensors are robust, time-tested, and still doing their job perfectly. The problem: no modern system speaks their language.
NMEA 2000 gateways that bridge analog signals to modern boat networks exist — but they cost 300–500€, are closed proprietary boxes, and give you zero insight or control over what happens inside.
BoatOpenIO is an open analog marine gateway.
Plug in your existing VDO sensors. Get clean MQTT output. Forward to Signal K or BoatOS. Done — without replacing a single sensor, without rewiring, without a black box.
VDO sensor → BoatOpenIO → MQTT → Signal K / BoatOS → modern dashboardBuilt for boats built before 2000 that will sail for another 20 years — and deserve a modern dashboard without a full refit.
Four separate boards, connected via IDC ribbon cables: input board, main board, ESP32 adapter board, and VCC distributor. Gerber files ready to order in hardware/v2/*/gerber/.

🛒 Ordering the boards: All four boards are set up as projects on PCBWay and can be purchased there directly: PCBWay project page — or upload the Gerbers to a PCB fab of your choice. Bare PCBs, components per the parts list below.
Input Board ──20-pin ribbon──> Main Board <──16-pin ribbon── ESP32 Adapter Board
│
3-pin JST
│
VCC Board
| Component | Description | Socketed |
|---|---|---|
| ESP32-DEVKITC-32D-F (38-pin) | Microcontroller, WiFi, I2C, MUX control – on its own adapter board | ✅ |
| CD74HC4067 Breakout | 16:1 analog multiplexer | ✅ |
| ADS1115 Breakout (1×) | 16-bit ADC | ✅ |
| MPU6050 Breakout (GY-521) | 6-DOF IMU, tilt/impact detection | ✅ |
| AMS1117-3.3 Breakout | 5V → 3.3V regulator | ✅ |
Everything socketed — no component soldered directly. Faulty ESP32? Swap the adapter board. Done.
The ESP32 sits on its own dedicated adapter board. The first adapter board is designed for the 38-pin ESP32 DevKitC-32D — swappable and ready for future ESP32 variants.
Every one of the 16 signal inputs has a hardware protection circuit, directly on the input board:
Sensor → Screw terminal → R_Pack08 (resistor network) → SP0503BAHTG (Zener array, 3.3V) → MUX signal2× Bourns 4116R-1-102LF (R_Pack08, DIL-16, isolated) + 6× SP0503BAHTG (SOT-143, 3 channels each).
⚠️ Pull-up voltage is 3.3V — the ADS1115 VDD is at 3.3V; higher voltages on the inputs risk component damage.
If the Bourns or Zener components are unavailable and you want to get the board running first, the resistor networks can be bypassed — but understand what you are giving up.
How to bypass the Bourns 4116R-1-102LF:
The DIL-16 package contains 8 isolated resistors. Each resistor connects a pin on the left row to the opposing pin on the right row:
Pin 1 ──[R]── Pin 16
Pin 2 ──[R]── Pin 15
Pin 3 ──[R]── Pin 14
... ...
Pin 8 ──[R]── Pin 9To bypass: solder a short jumper wire across each pair (8 bridges per chip, 16 total for both R_Pack08). The signal then passes through without series resistance. The SP0503BAHTG Zener pads can simply be left empty.
🔴 Without this protection, all 16 inputs are exposed. A wrong mini-board, a wiring mistake, or any brief overvoltage can destroy the MUX, ADS1115, and ESP32 in a chain reaction — all three at once. Only bypass for bench tests with known, clean signals. Fit the real parts before installing on the boat.
16× screw terminal 5.08mm → raw sensor signal
20-pin IDC header → connection to main board (SIG1–16 + GND)The VCC board distributes power to the mini-boards via JST connectors. It connects to the main board via a 3-pin JST cable (5V, 3.3V, GND).
7× JST 2-pin (3.3V) → VCC rail for passive/ESP01 mini-boards
3× JST 2-pin (5V) → VCC rail for Arduino Nano mini-boards
3-pin JST → connection to main board (5V · 3.3V · GND)Only 1× ADS1115 fitted (the MUX routes all 16 channels onto a single signal line) → fixed address 0x48.
| GPIO | Function |
|---|---|
| GPIO21 | I2C SDA |
| GPIO22 | I2C SCL |
| GPIO14 | MUX S0 |
| GPIO27 | MUX S1 |
| GPIO26 | MUX S2 |
| GPIO25 | MUX S3 |
| GPIO4 / 5 / 13 / 16 / 17 / 18 / 19 / 23 | OUT1–OUT8 (prepared for output channels) |
The main board already has a 10-pin header prepared for 8 signal output channels (+5V/GND) — e.g. for heaters, pumps, horns via relay or MOSFET mini-boards. Works on the same plug-in principle as the inputs.
The footprint fits all modules in the 38-pin DevKitC layout: ESP32-WROOM-32 / -32D / -32E / -32U / -32UE, as well as ESP32-SOLO-1.
⚠️ ESP32-WROVER is NOT compatible — GPIO16/17 are internally reserved for PSRAM on WROVER and therefore blocked for output channels.
| Type | Code | Use case |
|---|---|---|
| Voltage divider | VT | 12V VDO sensors → 3.3V |
| Pull-down | PD | Digital sensors, switches |
| Pull-up | PU | Open-collector outputs |
| Schmitt trigger | ST | Magnetic pickup sensors, 50Hz generators |
| Pulse board | ISP | RPM, flow (Arduino Nano / ESP01) |
| Optocoupler | OPT | Galvanic isolation (W-terminal RPM) |
| Direct / jumper | DIR | 3.3V signals directly |
| GND collector | GND | Multiple sensor ground loops → single reference |
The MotorCombo taps the most common engine sensors directly, so you don't have to plug in six separate mini-boards:
| Channel | Conditioning |
|---|---|
| Battery 1 + 2 | Voltage divider |
| Oil pressure | Pull-up |
| Temperature | Pull-up |
| Tank | Pull-up |
| RPM | Optocoupler + ESP-01 |
MotorCombo THT — through-hole, hand-solderable. Gerbers and documentation are in the repo. Resistor values are deliberately left open so everyone can fit what matches their own VDO senders — which is also why there is no pre-assembled SMD variant: with the values depending on the senders, a fixed pre-populated board makes no sense.
Design and submit your own mini-boards — pull requests welcome!
The CD74HC4067 routes one of 16 inputs onto the shared ADS pin A0 via a 4-bit address (S3–S0). Address and chip input follow the datasheet: 0000 → C0 … 1111 → C15.
Rev.1 note — channels are mirrored in software. On the Rev.1 board the channel wiring is reversed (terminal 1 sits on the input that address
1111selects, terminal 16 on0000). The firmware compensates in software (MUX_MIRROR): terminal N → address16 − N. The terminal numbering you see is therefore correct. A later board revision straightens the wiring, then the mirror is switched off (MUX_MIRROR 0).
| Terminal | Address S3 S2 S1 S0 | CD74HC4067 input |
|---|---|---|
| 1 | 1111 | C15 |
| 2 | 1110 | C14 |
| … | … | … |
| 16 | 0000 | C0 |
{
"kanaele": [
{"klemme": 1, "sensor": "battery1", "einheit": "V", "faktor": 4.7, "offset": 0, "aktiv": true, "topic": ""},
{"klemme": 2, "sensor": "oil_temp", "einheit": "°C", "faktor": 1.0, "offset": 0, "aktiv": true, "topic": "vessels/self/propulsion/engine/oilTemperature"},
{"klemme": 3, "sensor": "oil_pressure", "einheit": "bar", "faktor": 1.0, "offset": 0, "aktiv": true, "topic": "vessels/self/propulsion/engine/oilPressure"},
{"klemme": 4, "sensor": "tank", "einheit": "%", "faktor": 1.0, "offset": 0, "aktiv": true, "topic": ""},
{"klemme": 5, "sensor": "rpm", "einheit": "rpm", "faktor": 1.0, "offset": 0, "aktiv": false, "topic": ""}
]
}All 16 channels are routed via the MUX (CD74HC4067) to a single ADS1115 @ 0x48 on pin A0. No
adsorpinfields needed — the channel number (klemme) maps directly to the MUX select lines.
topic— optional. If empty (""), the firmware publishes toboat/io/<sensor>(default). Set a custom topic for Signal K compatibility or any other MQTT schema. The "SK" button in the web UI auto-fills the correct Signal K path for common sensor names.
boat/io/battery1 → 12.43
boat/io/oil_temp → 87
boat/io/oil_pressure → 3.2
boat/io/tank → 48
boat/io/rpm → 1450
boat/io/pitch → 1.2 (configurable)
boat/io/roll → -0.5 (configurable)
boat/alarm/impact_g → 2.40 (impact base configurable)
boat/alarm/impact_severity → KRITISCH (LEICHT / MITTEL / STARK / KRITISCH)
boat/alarm/impact_active → true
boatopenio/status → onlineChannel topics are set per channel (
topicfield / web UI). Pitch, roll and the impact base topic are editable under WiFi & MQTT in the web UI (defaultsboat/io/pitch,boat/io/roll,boat/alarm/impact; the impact base gets_g/_severity/_activeappended). In test mode the impact alarms are redirected toboat/test/alarm/impact_*so demo impacts never trigger real dashboards.
| Feature | Description |
|---|---|
| Web UI | Configuration at 192.168.4.1, bilingual DE/EN |
| WiFiManager | AP on first start for WiFi setup |
| MQTT | Publish all sensor values, LWT, auth support |
| OTA | Over-the-air firmware updates |
| mDNS | Reachable as boatopenio.local |
| Impact Detection | MPU6050 G-force monitoring with severity levels |
| Watchdog | Automatic restart on firmware hang |
| LittleFS | Persistent configuration storage |
| Sensor | Type | Mini-Board |
|---|---|---|
| VDO temperature (NTC) | Resistance | VT |
| VDO oil pressure | Linear resistance | VT |
| VDO tank sender | Potentiometer | VT |
| Battery voltage 12V | Voltage divider | VT (10k/2.2k) |
| RPM (W-terminal) | Pulse/AC | OPT + ISP |
| RPM (magnetic pickup) | AC signal | ST + ISP |
| Fuel flow | Pulse | ISP |
| Bilge sensor | Digital | PD |
| Door/hatch contact | Digital | PD |
| DS18B20 temperature | Digital 1-Wire | custom board |
👉 Complete parts list on Amazon
Note: Items 7, 8, 13, and 14 are from the same set — one purchase covers all. Same applies to 12 and 15.
| # | Component | Notes | Source | |
|---|---|---|---|---|
| 1 | ESP32 DevKitC-32D (38-pin) | Main controller | Amazon | |
| 2 | CD74HC4067 Breakout | 16:1 MUX | Amazon | |
| 3 | ADS1115 Breakout (1×) | 16-bit ADC | Amazon | |
| 4 | MPU6050 Breakout (GY-521) | IMU | Amazon | |
| 5 | AMS1117-3.3 Breakout | Voltage regulator | Amazon | |
| 6 | Female header assortment | Sockets for all breakouts | Amazon | |
| 7 | Pin header 2×10 (20-pin) | Main board ↔ input board | Amazon | |
| 8 | Pin header 2×08 (16-pin) | Main board ↔ ESP32 adapter board | Amazon | |
| 9 | Screw terminals 5.08mm | 16× sensor inputs | Amazon | |
| 10 | Bourns 4116R-1-102LF (2×) | Resistor network DIL-16 | Conrad | Amazon |
| 11 | SP0503BAHTG (6×) | Zener array SOT-143 | Amazon | |
| 12 | JST 2-pin connector | VCC rails | Amazon | |
| 13 | Pin header 2×10 (20-pin) | Input board side | Amazon | |
| 14 | Pin header 2×08 (16-pin) | ESP32 adapter board side | Amazon | |
| 15 | JST 2-pin connector (10×) | VCC distribution | Amazon | |
| 16 | Ribbon cable + IDC 20-pin | Main board ↔ input board | Amazon | |
| 17 | Ribbon cable + IDC 16-pin | Main board ↔ ESP32 adapter board | Amazon | |
| 18 | Pin socket 2×05 (10-pin) | SIG-OUT prep on main board | — | |
| 19 | JST 3-pin connector | VCC board ↔ main board | Amazon | |
| 20 | PCB set (4 boards) | Order the Gerbers in hardware/v2/ yourself | PCBWay |
Amazon: faster delivery. AliExpress links to follow.
Item 10 comes from Conrad, not Amazon: the same Bourns part is around €1.30 there versus roughly €10. For the 2 pieces needed that saves nearly €18. The Amazon link beside it is just the fallback source.
Item 20 is the bare boards only. Items 1–19 are the components you still need.
BoatOpenIO/
├── README.md ← English (this file)
├── README_de.md ← German version
├── LICENSE ← GPL-3.0
├── boatopenio_final_architektur.svg ← system architecture diagram
├── firmware_src/
│ ├── firmware_src.ino ← main firmware
│ ├── webui.h ← web UI & captive portal
│ └── data/
│ └── config.json ← default channel config
├── hardware/
│ ├── boatopenio-gehaeuse-draufsicht.svg ← housing top-view
│ ├── mini-boards/ ← mini-board designs
│ └── v2/ ← KiCad PCB project (4 boards)
│ ├── main-board/
│ │ └── gerber/main-board.zip
│ ├── input-board/
│ │ └── gerber/input-board.zip
│ ├── esp32-adapter-board/
│ │ └── gerber/esp32-adapter-board.zip
│ └── vcc-board/
│ └── gerber/vcc-board.zip
├── images/ ← build photos
└── docs/What's done, what's planned, what's on the backlog — see ROADMAP.md.
BoatOpenIO sends all values via MQTT. BoatOS auto-discovers all topics and displays them in the dashboard. No manual configuration needed.
➡️ github.com/bigbrainlabs/BoatOS
GNU General Public License v3.0 (GPL-3.0)
Free to use, modify, distribute — derivative works must also be GPL-3.0. See LICENSE.
Exception: the community enclosure designs in hardware/enclosures/ are licensed CC BY-SA 4.0 — the better fit for CAD work. Submitting a design means licensing it that way; see the enclosure README.
Logbook Without Posing — authentic DIY projects around boating.
"Build it yourself and you know what's in it — and what it cost."
📖 Book series on Amazon · 🔧 BoatOS · ⚡ BoatOpenIO
| Qty | Value | Footprint | References |
|---|---|---|---|
| 16 | 1M | Resistor_SMD:R_0805_2012Metric | R17, R18, R19, R20, R21, R22, R23, R24, R25, R26, R27, R28, R29, R30, R31, R32 |
| 16 | 1k | Resistor_SMD:R_0805_2012Metric | R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16 |
| 16 | Conn_01x03_Pin | Connector_JST:JST_PH_B3B-PH-K_1x03_P2.00mm_Vertical | CH01, CH02, CH03, CH04, CH05, CH06, CH07, CH08, CH09, CH10, CH11, CH12, CH13, CH14, CH15, CH16 |
| 16 | D_Zener | PCM_Diode_SMD_AKL:D_SOD-123_Zener | D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13, D14, D15, D16 |
| 4 | MountingHole_3.2mm_M3 | MountingHole:MountingHole_3.2mm_M3 | B11, B12, B13, B14 |
| 1 | Conn_02x10_Odd_Even | Connector_PinHeader_2.54mm:PinHeader_2x10_P2.54mm_Vertical | B_SIGIN |
| 1 | Screw_Terminal_01x16 | TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-3-16-5.08_1x16_P5.08mm_Horizontal | J27 |

bigbrainlabs/BoatOpenIO
Universal 16-channel analog marine gateway for boats with legacy VDO sensors. Connects analog instruments to MQTT and Signal K without sensor replacement. ESP32-based, open source, modular mini-board system.

bigbrainlabs/BoatOpenIO
Universal 16-channel analog marine gateway for boats with legacy VDO sensors. Connects analog instruments to MQTT and Signal K without sensor replacement. ESP32-based, open source, modular mini-board system.

bigbrainlabs/BoatOpenIO
Universal 16-channel analog marine gateway for boats with legacy VDO sensors. Connects analog instruments to MQTT and Signal K without sensor replacement. ESP32-based, open source, modular mini-board system.

bigbrainlabs/BoatOpenIO
Universal 16-channel analog marine gateway for boats with legacy VDO sensors. Connects analog instruments to MQTT and Signal K without sensor replacement. ESP32-based, open source, modular mini-board system.

bigbrainlabs/BoatOpenIO
Universal 16-channel analog marine gateway for boats with legacy VDO sensors. Connects analog instruments to MQTT and Signal K without sensor replacement. ESP32-based, open source, modular mini-board system.

bigbrainlabs/BoatOpenIO
Universal 16-channel analog marine gateway for boats with legacy VDO sensors. Connects analog instruments to MQTT and Signal K without sensor replacement. ESP32-based, open source, modular mini-board system.




siderakb/ergo-snm-keyboard
ErgoSNM is a split ergonomic keyboard integrated with trackball, wireless is in beta



mattybrad/drumkid
Version 4 was the first successful working design, with full code, schematics, Gerbers, etc available on GitHub.

cnlohr/cnhardware
My dumping grounds for all my kicad projects and random hardware bringup.
It measures 110 × 46 mm and has 2 copper layers, 1.6 mm thick.
70 parts. 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.
From the bigbrainlabs/BoatOpenIO repository on GitHub, at the commit this page was made from: the board is hardware/v2/input-board/input-board.kicad_pcb and its schematic hardware/mini-boards/MotorCombo_THT/MotorCombo_THT.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask bigbrainlabs before reusing the design.