Hardware Documentation

Bill of Materials

Component

Model

Qty

Interface

Notes

MCU

ESP32-WROOM-32UE DevKit-C v4

1

USB Serial

38-pin, dual-core

Sonar

Kogger Side-Scan

2

UART 921600

A (Starboard), B (Port)

IMU

HWT905 (WitMotion)

1

SoftSerial 9600

9-axis accel/gyro/mag

Depth

MS5837-30BA (Bar30)

1

I2C 0x76

0-30 bar pressure

Temp

TSYS01 (Celsius)

1

I2C 0x77

±0.015°C precision

Conductivity

Atlas Scientific EZO EC

1

SoftSerial 9600

µS/cm + salinity

GPS

u-blox GPS module

1

SoftSerial 9600

NMEA output

Computer

Raspberry Pi 4 (BlueOS)

1

USB host

Docker services

GPIO Pinout — ESP32

Pin Assignment

GPIO

Function

Device

Protocol

Baud/Freq

Direction

16

UART1 RX

Kogger A

BB55 binary

921600

IN

17

UART1 TX

Kogger A

BB55 binary

921600

OUT

25

UART2 RX

Kogger B

BB55 binary

921600

IN

26

UART2 TX

Kogger B

BB55 binary

921600

OUT

27

SoftSerial RX

GPS u-blox

NMEA

9600

IN

14

SoftSerial TX

GPS u-blox

NMEA

9600

OUT

19

SoftSerial RX

EZO EC

ASCII

9600

IN

18

SoftSerial TX

EZO EC

ASCII

9600

OUT

13

SoftSerial RX

IMU HWT905

Binary

9600

IN

15

SoftSerial TX

IMU HWT905

Binary

9600

OUT

21

I2C SDA

MS5837 + TSYS01

I2C

100kHz

BIDIR

22

I2C SCL

MS5837 + TSYS01

I2C

100kHz

BIDIR

Warning

K1 EZO pins SWAPPED: GPIO 19=RX, 18=TX (documented in ESP32 code comments)

Critical Notes

  • Hardware UART priority: Kogger sonar uses UART1/2 (high baud 921600) — cannot use SoftSerial

  • I2C bus shared: MS5837 (0x76) and TSYS01 (0x77) on same bus — no address conflict

  • SoftSerial limitations: Max 3 active instances due to interrupt conflicts — GPS, K1, IMU

Wiring Diagrams

Kogger Sonar

Kogger A (Starboard):
  ┌──────────────┐
  │ Kogger SSS A │
  │              │
  │ TX ──────────┼───→ ESP32 GPIO 16 (UART1 RX)
  │ RX ──────────┼───← ESP32 GPIO 17 (UART1 TX)
  │ GND ─────────┼───→ GND
  │ 12V ─────────┼───→ BlueROV Power Bus (+12V)
  └──────────────┘

Kogger B (Port): Same wiring, GPIO 25/26 (UART2)

IMU HWT905

┌──────────────┐
│  HWT905 IMU  │
│              │
│ TX ──────────┼───→ ESP32 GPIO 13 (SoftSerial RX)
│ RX ──────────┼───← ESP32 GPIO 15 (SoftSerial TX)
│ GND ─────────┼───→ GND
│ VCC ─────────┼───→ 3.3V or 5V
└──────────────┘

I2C Sensors

┌──────────────┐         ┌──────────────┐
│  MS5837-30BA │         │   TSYS01     │
│  (Depth)     │         │  (Temp)      │
│              │         │              │
│ SDA ─────────┼────┬────┼──── SDA ─────┼───→ ESP32 GPIO 21
│ SCL ─────────┼────┼────┼──── SCL ─────┼───→ ESP32 GPIO 22
│ GND ─────────┼────┼────┼──── GND ─────┼───→ GND
│ 3.3V ────────┼────┼────┼──── 3.3V ────┼───→ 3.3V
└──────────────┘    │    └──────────────┘
                    │
                 4.7kΩ pull-up resistors (SDA + SCL → 3.3V)

I2C Addresses:
  - MS5837: 0x76
  - TSYS01: 0x77

Clock: 100kHz

Power Requirements

Device

Voltage

Current

Power

Notes

ESP32

3.3V

160mA

~0.5W

Via USB 5V → 3.3V regulator

Kogger A

12V

200mA

2.4W

BlueROV power bus

Kogger B

12V

200mA

2.4W

BlueROV power bus

MS5837

3.3V

0.6µA

<1mW

Standby mode

TSYS01

3.3V

5µA

<1mW

Standby mode

IMU HWT905

3.3-5V

20mA

~0.1W

Check datasheet

GPS

3.3-5V

30mA

~0.15W

Active antenna

EZO EC

5V

10mA

50mW

Idle

Total: ~6W (excluding Pi)

Sensor Specifications

Kogger Side-Scan Sonar

  • Frequency: 700 kHz

  • Range: 0-100m

  • Resolution: ~1cm

  • Ping rate: 10-50 Hz

  • Protocol: BB55 binary

  • Data rate: ~50-100 KB/s per channel

HWT905 IMU

  • Axes: 9 (3 accel, 3 gyro, 3 mag)

  • Range: ±16g, ±2000°/s

  • Resolution: 0.01° (angle), 0.001g (accel)

  • Output rate: 10 Hz

MS5837-30BA (Bar30)

  • Range: 0-30 bar (0-300m depth)

  • Resolution: 0.2 mbar (2mm water)

  • Accuracy: ±20 mbar (±20cm)

  • I2C Address: 0x76

TSYS01 (Celsius)

  • Range: -40°C to +125°C

  • Accuracy: ±0.1°C (0-50°C)

  • Resolution: 0.0001°C (24-bit ADC)

  • I2C Address: 0x77

Atlas Scientific EZO EC

  • Range: 0.07 - 500,000+ µS/cm

  • Accuracy: ±2%

  • Protocol: ASCII UART @ 9600

u-blox GPS

  • Accuracy: 2.5m CEP

  • Update rate: 1-10 Hz

  • Protocol: NMEA 0183

Installation — BlueROV2

Physical Mounting

BlueROV2 Frame (Top View)
┌───────────────────────────────────────────┐
│  [Kogger A]◄─── Starboard                 │
│  ┌───────────────┐                        │
│  │   ESP32 Hub   │◄─── USB to Pi (Tether) │
│  └───────────────┘                        │
│  [Kogger B]◄─── Port                      │
│  [MS5837] [TSYS01] [IMU] [GPS] [EZO]      │
└───────────────────────────────────────────┘

Enclosure

  • BlueROV electronics tube (4” acrylic)

  • Contents: ESP32, MS5837, TSYS01, IMU, EZO EC

  • Penetrators: USB (SubConn), Kogger cables (×2)

  • External: Kogger A/B, GPS (surface antenna)

Troubleshooting — Hardware

See Troubleshooting for detailed hardware debugging.

Common Issues:

  • Kogger not detected → Check TX/RX, baud rate, power

  • IMU no data → Check SoftSerial pins, power voltage

  • I2C fail → Check pull-ups, address conflicts

  • GPS no fix → Needs outdoor sky view, 30-60s acquisition

Safety

  • Pressure test enclosure to 2× max dive depth

  • Check penetrators for O-ring integrity

  • Monitor temperature inside enclosure

  • Fuse 12V lines to Kogger

  • Disconnect power before wiring changes