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