168 lines
4.7 KiB
Markdown
168 lines
4.7 KiB
Markdown
# ESP32 iPerf Traffic Generator
|
|
|
|
High-performance UDP traffic generator firmware for ESP32 devices with interactive console interface, GPS synchronization, and WiFi monitoring capabilities.
|
|
|
|
**Version:** 2.1.0
|
|
**ESP-IDF:** 6.0+
|
|
|
|
## Features
|
|
|
|
- **UDP Traffic Generation**: Precise packet pacing (PPS) with drift-free timers
|
|
- **Interactive Console**: Full REPL interface with command history and tab completion
|
|
- **WiFi Management**: Station mode with static IP support, DHCP, and monitor mode
|
|
- **GPS Synchronization**: PPS signal support and NMEA parsing for timestamp synchronization
|
|
- **Persistent Configuration**: NVS storage for WiFi credentials, IP settings, and iPerf parameters
|
|
- **Status LED**: Visual feedback for connection state and system status
|
|
- **Mass Deployment**: Python scripts for flashing and configuring multiple devices
|
|
|
|
## Supported Targets
|
|
|
|
- ESP32
|
|
- ESP32-S3
|
|
- ESP32-C5
|
|
- ESP32-C3, ESP32-C6 (may require testing)
|
|
|
|
## Quick Start
|
|
|
|
### Prerequisites
|
|
|
|
- ESP-IDF v6.0 or later
|
|
- Python 3.7+ (for deployment scripts)
|
|
- USB serial connection to ESP32 device
|
|
|
|
### Building
|
|
|
|
```bash
|
|
# Set target (e.g., esp32c5, esp32s3, esp32)
|
|
idf.py set-target esp32c5
|
|
|
|
# Configure (optional)
|
|
idf.py menuconfig
|
|
|
|
# Build
|
|
idf.py build
|
|
|
|
# Flash and monitor
|
|
idf.py -p /dev/ttyUSB0 flash monitor
|
|
```
|
|
|
|
### Initial Configuration
|
|
|
|
After flashing, connect to the console at 115200 baud. Use the interactive commands:
|
|
|
|
```bash
|
|
# Connect to WiFi
|
|
wifi connect "YourSSID" "password"
|
|
|
|
# Set static IP (optional)
|
|
ip set 192.168.1.100 255.255.255.0 192.168.1.1
|
|
|
|
# Configure iPerf parameters
|
|
iperf set --client 192.168.1.10 --port 5001 --len 1470 --burst 1
|
|
|
|
# Save configuration to NVS
|
|
iperf save
|
|
|
|
# Start iPerf traffic
|
|
iperf start
|
|
|
|
# Check status
|
|
iperf status
|
|
```
|
|
|
|
## Console Commands
|
|
|
|
### WiFi Commands
|
|
- `wifi connect <ssid> [password]` - Connect to WiFi network
|
|
- `wifi scan` - Scan for available networks
|
|
- `wifi status` - Show WiFi connection status
|
|
- `wifi mode <sta|ap>` - Set WiFi mode
|
|
- `wifi power <dbm>` - Set transmit power
|
|
|
|
### IP Configuration
|
|
- `ip addr` - Show current IP configuration
|
|
- `ip set <ip> <mask> <gateway>` - Set static IP
|
|
- `ip dhcp` - Enable DHCP
|
|
|
|
### iPerf Commands
|
|
- `iperf start` - Start traffic generation
|
|
- `iperf stop` - Stop traffic generation
|
|
- `iperf status` - Show current status and statistics
|
|
- `iperf set [--client <ip>] [--port <port>] [--len <bytes>] [--burst <count>]` - Configure parameters
|
|
- `iperf save` - Save configuration to NVS
|
|
- `iperf reload` - Reload configuration from NVS
|
|
- `iperf clear` - Clear saved configuration
|
|
|
|
### System Commands
|
|
- `reset` - Software reset
|
|
- `version` - Show firmware and IDF version
|
|
- `system info` - Show system information
|
|
- `system heap` - Show free heap memory
|
|
|
|
### GPS Commands (if GPS enabled)
|
|
- `gps status` - Show GPS synchronization status
|
|
|
|
### Monitor Mode
|
|
- `monitor start [channel]` - Start WiFi monitor mode
|
|
- `monitor stop` - Stop monitor mode
|
|
- `monitor channel <channel>` - Set monitor channel
|
|
- `monitor status` - Show monitor status
|
|
|
|
For detailed command documentation, see `doc/QUICK_REFERENCE.md`.
|
|
|
|
## Mass Deployment
|
|
|
|
Use the `esp32_deploy.py` script for deploying to multiple devices:
|
|
|
|
```bash
|
|
# Flash and configure multiple devices
|
|
python3 esp32_deploy.py \
|
|
--ssid "YourSSID" \
|
|
--password "password" \
|
|
--target-ip 192.168.1.50 \
|
|
--netmask 255.255.255.0 \
|
|
--gateway 192.168.1.1 \
|
|
--iperf-dest-ip 192.168.1.10 \
|
|
--iperf-port 5001
|
|
```
|
|
|
|
See `doc/DEPLOYMENT_GUIDE.md` for complete deployment instructions.
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
├── main/ # Main application code
|
|
│ ├── main.c # Entry point and console initialization
|
|
│ └── board_config.h # Hardware pin definitions
|
|
├── components/
|
|
│ ├── app_console/ # Console command implementations
|
|
│ ├── iperf/ # iPerf traffic generator core
|
|
│ ├── wifi_controller/ # WiFi management and monitor mode
|
|
│ ├── wifi_cfg/ # WiFi and IP configuration storage
|
|
│ ├── gps_sync/ # GPS PPS and NMEA parsing
|
|
│ ├── status_led/ # LED status indication
|
|
│ └── ...
|
|
├── esp32_deploy.py # Mass deployment script
|
|
├── gen_udev_rules.py # USB port mapping utility
|
|
└── doc/ # Additional documentation
|
|
```
|
|
|
|
## Documentation
|
|
|
|
- [Quick Start Guide](doc/QUICK_START.md)
|
|
- [Quick Reference](doc/QUICK_REFERENCE.md)
|
|
- [Deployment Guide](doc/DEPLOYMENT_GUIDE.md)
|
|
- [Mass Deployment](doc/MASS_DEPLOY.md)
|
|
- [GDB Debugging Guide (ESP32-C5)](doc/ESP32-C5_GDB_Debugging_Guide.md)
|
|
|
|
## License
|
|
|
|
Copyright (c) 2025 Umber Networks & Robert McMahon
|
|
All rights reserved.
|
|
|
|
See individual source files for full license details.
|
|
|
|
## Contributing
|
|
|
|
This is a project-specific firmware. For issues or feature requests, please contact the maintainers.
|