# SkyLogic AeroAlign - IMU Node Wiring **Version**: 2.0.0 **Date**: 2026-03-11 **Scope**: Master and IMU slave nodes for the combined AeroAlign + CoG platform ## Overview This document covers the current wiring for the angle-measurement nodes: - `Master`: ESP32-C3 or ESP32-S3, WiFi AP, web UI, ESP-NOW receiver, local IMU - `IMU Slave`: ESP32-C3 or ESP32-S3, remote MPU6050 node over ESP-NOW The Master and IMU Slave share the same MPU6050 wiring. The main difference is firmware role. CoG-specific hardware is documented separately in [cog_scale_wiring.md](/Users/florianklaner/Github/AeroAlign/hardware/schematics/cog_scale_wiring.md). ## Supported ESP32 Pin Maps ### ESP32-C3 | Signal | GPIO | Notes | |--------|------|-------| | `SDA` | `GPIO4` | MPU6050 I2C data | | `SCL` | `GPIO5` | MPU6050 I2C clock | | `BATTERY_ADC` | `GPIO0` | Battery divider midpoint | | `STATUS_LED` | `GPIO10` | Optional | ### ESP32-S3 | Signal | GPIO | Notes | |--------|------|-------| | `SDA` | `GPIO4` | MPU6050 I2C data | | `SCL` | `GPIO5` | MPU6050 I2C clock | | `BATTERY_ADC` | `GPIO1` | Only if divider is actually fitted | | `STATUS_LED` | disabled | Board-dependent, firmware keeps it off by default | ## Power Topology ``` LiPo 1S | +--> TP4056 BAT+/BAT- | +--> LDO VIN | +--> 3.3V rail --> ESP32 3V3 --> MPU6050 VCC ``` ### Notes - A dedicated 3.3V regulator is still recommended for clean IMU behavior. - The Master S3 configuration currently assumes battery monitoring may be absent. - If no ADC divider is wired on the Master, leave `BATTERY_MONITOR_ENABLED` disabled in [config.h](/Users/florianklaner/Github/AeroAlign/firmware/master/src/config.h). ## MPU6050 Wiring | ESP32 | MPU6050 | Notes | |-------|---------|-------| | `GPIO4` | `SDA` | I2C | | `GPIO5` | `SCL` | I2C | | `3V3` | `VCC` | Use 3.3V | | `GND` | `GND` | Common ground | | `GND` | `AD0` | Sets address `0x68` | ### Bus Settings - ESP32-C3 default: `400 kHz` - ESP32-S3 default: `100 kHz` The lower S3 bus speed is intentional and matches the current robust MPU6050 access code. ## Battery Divider Use the divider only on nodes that really need local battery reporting. ``` LiPo+ | [10k] | +----> BATTERY_ADC | [10k] | GND ``` ### Current firmware assumptions - IMU slaves: divider enabled in firmware - Master C3: divider enabled - Master S3: divider disabled by default until the ADC path is actually wired ## Master Node Wiring Summary | Block | Required | Notes | |-------|----------|-------| | ESP32-C3 or ESP32-S3 | yes | `master` firmware | | MPU6050 | yes | local reference IMU | | LiPo + charger + regulator | yes | portable operation | | Battery divider | optional | hidden in UI if absent | ## IMU Slave Wiring Summary | Block | Required | Notes | |-------|----------|-------| | ESP32-C3 or ESP32-S3 | yes | `slave` firmware | | MPU6050 | yes | same robust driver as Master | | LiPo + charger + regulator | yes | remote node | | Battery divider | recommended | transmitted to Master | ## Bring-Up Checklist 1. Verify `3.3V` rail before plugging the ESP32 in. 2. Confirm MPU6050 address `0x68` with `AD0` tied low. 3. Keep SDA/SCL leads short on S3 builds. 4. On the Slave, set the Master MAC in [config.cpp](/Users/florianklaner/Github/AeroAlign/firmware/slave/src/config.cpp). 5. Build and flash: - `cd firmware/master && pio run` - `cd firmware/slave && pio run -e esp32-s3` ## Troubleshooting ### No MPU6050 detected - Check `GPIO4` and `GPIO5` - Check `AD0 -> GND` - Reduce wire length - Prefer the S3 default `100 kHz` ### Battery percentage missing on Master - Expected on S3 unless the divider is fitted and `BATTERY_MONITOR_ENABLED` is enabled - The web UI now hides the metric when unavailable ### Slave does not show up - Recheck Master MAC in [config.cpp](/Users/florianklaner/Github/AeroAlign/firmware/slave/src/config.cpp) - Ensure Master AP channel and ESP-NOW channel match