MAUWB-platformiotest/CLAUDE.md
martin fdb00de211 Add AT command manual v1.1.1 specifications
- Add complete AT command reference with all 22 supported commands
- Document unlimited anchor support and multi-zone positioning capabilities
- Include key hardware specifications and default configuration values
- Update UWBHelper library description with latest firmware features
- Add power management and performance optimization guidelines
2025-08-31 20:11:29 +02:00

181 lines
No EOL
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
This is an ESP32-S3 based Ultra-Wideband (UWB) indoor positioning system for warehouse WiFi mapping. The system consists of anchor devices (base stations) and tag devices (mobile trackers) using Makerfabs MaUWB modules with Qorvo DW3000 chips.
**Key Architecture**: Battery-powered anchors auto-position themselves, mobile tag collects positioning data via USB to PC for real-time display and dual-file logging for offline analysis.
**Unified Firmware**: Single codebase with config-driven behavior for all device types, organized in modular configuration structure.
## Development Commands
### Build & Flash (Unified Firmware)
```bash
# Build default configurations
pio run -e anchor # Build anchor (ID=0, Network=1234)
pio run -e tag # Build tag (ID=1, Network=1234)
pio run -e debug # Build debug anchor (ID=0, Network=1234)
# Build with custom device ID and network
set PLATFORMIO_BUILD_FLAGS=-DUWB_INDEX=5 -DNETWORK_ID=2000
pio run -e anchor # Build anchor ID=5, Network=2000
# Flash to device
pio run -e tag -t upload
pio run -e anchor -t upload
# Monitor serial output
pio device monitor
```
### Development Environments
- **anchor**: Base station with distributed positioning (default: ID=0, Network=1234)
- **tag**: Mobile tracker with coordinate collection (default: ID=1, Network=1234)
- **debug**: Development anchor build with DEBUG_ENABLED=1
### Unified Architecture
All devices now use the same `main.cpp` with config-driven behavior:
- Device type determined by build flags (`DEVICE_TYPE_ANCHOR`/`DEVICE_TYPE_TAG`)
- Behavior configured via `anchor_config.h` and `tag_config.h`
- Positioning algorithm settings in `positioning_config.h`
- Easy customization via `PLATFORMIO_BUILD_FLAGS` environment variable
## Core Architecture
### Device Roles & Communication Flow
```
Anchors: Auto-position <20> Store coordinates locally <20> Report to tags
Tags: Range to anchors <20> Collect coordinates <20> USB to PC <20> Real-time + logging
```
### Key Technical Patterns
**1. Unified Firmware Architecture**
- `src/main.cpp`: Single firmware for all devices, behavior determined by build flags
- `src/config/`: Modular configuration system with device-specific settings
- Dynamic behavior: Device type, peer management, and display logic configured at compile time
- Shared: UWBHelper library for AT commands, unified communication and display handling
**2. UWBHelper Library Structure**
- **Complete AT Command Implementation**: All 22 commands from AT manual v1.1.1 (2025/07/29)
- **Device Role Configuration**: `configureDevice(id, isAnchor)` sets anchor/tag mode with unlimited anchors support
- **Advanced Data Structures**: RangeResult, AnchorPosition, DeviceData for multi-device tracking
- **Position Calculation**: PositionCalculator class with trilateration algorithms
- **Data Filtering**: DistanceFilter for noise reduction
- **Multi-zone Positioning**: Tags auto-detect and select 8 nearest anchors from unlimited deployed anchors
**3. Hardware Configuration**
- **UWB Communication**: UART2 (pins 17/18) at 115200 baud
- **Display**: SSD1306 OLED via I2C (pins 38/39)
- **Reset**: Pin 16 for UWB module reset
- **Network**: ID 1234, 6.8Mbps mode, range filtering enabled
### Critical Implementation Details
**Device Identification**: Each device gets unique UWB_INDEX via build flags, determines network role and behavior
**Data Flow Pattern**:
- Anchors parse range data from tags: `parseRangeData(response, tags[], UWB_TAG_COUNT)`
- Tags parse range data from anchors: `parseRangeData(response, anchors[], MAX_ANCHORS)`
- Serial passthrough enabled for debugging: `uwbSerial.write(Serial.read())`
**Display Logic**:
- Anchors show active tags with distances/RSSI
- Tags show connected anchors with distances/RSSI
- Both show network status and device counts
**Timeout Management**: Devices marked inactive after DEVICE_TIMEOUT (5000ms) with no updates
**4. Modular Configuration System**
- `src/config/config.h`: Hardware pin definitions and basic system settings
- `src/config/device_config.h`: Device role detection and unified behavior configuration
- `src/config/anchor_config.h`: Anchor-specific settings (tag tracking, positioning, inter-anchor communication)
- `src/config/tag_config.h`: Tag-specific settings (anchor tracking, USB streaming, coordinate collection)
- `src/config/positioning_config.h`: Distributed positioning algorithm parameters and validation settings
## Configuration Constants
Key values in config.h:
- `MAX_ANCHORS 8`: Tag connects to 8 closest anchors (from unlimited deployed anchors)
- `UWB_TAG_COUNT 64`: Network supports up to 64 tags
- `NETWORK_ID 1234`: UWB network identifier (changeable via AT+SETPAN, default: 1111)
- `DEVICE_TIMEOUT 5000`: Device inactivity timeout (ms)
- `DISPLAY_UPDATE_INTERVAL 500`: OLED refresh rate (ms)
- `ANTENNA_DELAY 16336`: Default antenna calibration value
- `TRANSMISSION_POWER FD`: Default power setting (configurable via AT+SETPOW)
## Development Roadmap Context
This ESP32 firmware implements the hardware foundation for the UWB positioning system (see docs/ROADMAP.md):
- **Current**: Unified firmware architecture with config-driven behavior, ready for distributed positioning implementation
- **Framework**: Configuration structure established for anchor discovery, position calculation, coordinate storage, and data relay
- **Next**: Implement anchor auto-positioning algorithms, coordinate relay through tag, battery optimization
- **Goal**: <15min anchor setup, <30cm ranging accuracy, reliable USB data streaming to webapp
- **WebApp Integration**: All data logging, visualization, and analysis handled by separate Next.js webapp
### Distributed Positioning Framework Ready
- **Anchor Behavior**: Framework for inter-anchor communication, discovery protocol, position calculation
- **Tag Behavior**: Framework for coordinate collection, USB data streaming, real-time positioning
- **Algorithm Foundation**: Trilateration, consensus mechanisms, coordinate system establishment
- **Storage System**: EEPROM-based position persistence for battery-powered anchors
## Hardware Requirements
- **Modules**: Makerfabs MaUWB ESP32-S3 with built-in UWB + OLED
- **Power**: USB for development, battery for production anchors
- **Range**: Tested up to 100m line-of-sight, 30m through walls
- **Network**: No WiFi required, pure UWB communication
## AT Command Reference (v1.1.1)
Complete list of 22 supported AT commands for MaUWB module configuration:
### Basic Commands
- `AT?`: Serial port communication test
- `AT+GETVER?`: Get software/hardware version
- `AT+RESTART`: Restart module
- `AT+RESTORE`: Factory reset (clear all configuration)
- `AT+SAVE`: Save configuration to flash (required after changes)
### Configuration Commands
- `AT+SETCFG=(id,role,rate,filter)`: Set device ID (0-unlimited anchors, 0-63 tags), role (0=tag, 1=anchor), data rate (0=850K, 1=6.8M), range filtering (0=off, 1=on)
- `AT+GETCFG?`: Get current configuration
- `AT+SETANT=(delay)`: Set antenna delay for distance calibration (default: 16336)
- `AT+GETANT?`: Get antenna delay
- `AT+SETCAP=(capacity,slot_time,ext_mode)`: Set tag capacity (max 64), time slot duration, extended packet mode
- `AT+GETCAP?`: Get capacity settings
### Network Commands
- `AT+SETPAN=(network_id)`: Set network ID for device isolation (default: 1111)
- `AT+GETPAN?`: Get network ID
- `AT+SETPOW=(power)`: Set transmission power (default: FD)
- `AT+GETPOW?`: Get transmission power
### Operation Commands
- `AT+SETRPT=(auto_report)`: Enable/disable automatic distance reporting (0=off, 1=on)
- `AT+GETRPT?`: Get auto-report status
- `AT+RANGE`: Active distance measurement and reporting
- `AT+SLEEP=(time_ms)`: Put tag in sleep mode (0-65535ms, 65535=forever)
- `AT+DATA=(length,data)`: Send transparent data (up to 32 bytes, requires ext_mode=1)
- `AT+RDATA`: Receive data command
- `AT+SETPAN`: Network differentiation for multi-system environments
- `AT+GETPAN?`: Get network differentiation settings
### Key Features from Manual
- **Unlimited Anchors**: System supports unlimited anchors with tags auto-selecting 8 nearest
- **Multi-zone Positioning**: Use 6.8Mbps rate with range filtering disabled for optimal performance
- **Data Rates**: 850Kbps and 6.8Mbps modes supported
- **Refresh Rate**: Configurable up to 100Hz (capacity × slot_time relationship)
- **Power Management**: Tag deep sleep current 35uA, working current 34mA
- **Distance Accuracy**: <10cm ranging precision with proper calibration
## Important Notes
- **No Sleep/OTA**: Removed for simplicity, focus on core positioning
- **AT Command Protocol**: Direct UART communication with UWB module (115200 baud)
- **Position Calculation**: Client-side (PC) processing, not on-device
- **Data Logging**: Raw distance data + anchor coordinates for offline analysis
- **Multi-zone Support**: Firmware v1.1.3+ supports unlimited anchors with automatic selection