This document provides comprehensive documentation for the ESP32 utility scripts, including port
detection, setup automation, and helper tools for development workflow management.
π Table of Contents
π Overview
The ESP-IDF utility scripts provide essential tools for development environment setup,
port detection, troubleshooting, and workflow automation.
These scripts ensure consistent development environments across different platforms and provide
intelligent automation for common development tasks.
Core Features
Cross-Platform Port Detection: Automatic ESP32 device identification
Environment Separation: Clear separation between local development and CI environments
Intelligent Troubleshooting: Automated problem detection and resolution
Configuration Management: Centralized configuration and information access
CI/CD Integration: Optimized for automated environments with minimal dependencies
Key Capabilities
Automatic ESP32 device detection across platforms
Dual Environment Setup: Local development (complete) and CI (minimal)
Intelligent dependency management and installation
Cross-platform compatibility and optimization
Automated troubleshooting and problem resolution
CI-Specific Optimizations: Cache management and build directory preparation
ποΈ Architecture and Design
New System Architecture
1
2
3
4
Utility Scripts β Environment Detection β Setup Selection β Tool Installation β Validation
β β β β β
Port Detection Local vs CI setup_repo.sh Dependency Mgmt Environment
& Troubleshooting Environment vs ESP-IDF CI & Installation Verification
Troubleshooting: Automated problem detection and resolution
Platform Adaptation: Cross-platform compatibility and optimization
Design Principles
Cross-Platform: Consistent behavior across Linux, macOS, and Windows (WSL2)
Automated Operation: Minimal user intervention required
Intelligent Fallbacks: Graceful degradation when tools unavailable
Performance Optimized: Efficient execution and resource usage
User Experience: Clear feedback and error handling
Environment Separation: Clear distinction between local development and CI needs
π Port Detection and Troubleshooting
Cross-Platform Port Detection
Linux Port Detection
The system automatically detects ESP32 devices on Linux:
1
2
3
4
5
6
7
8
9
10
11
## USB serial device patterns
/dev/ttyUSB0, /dev/ttyUSB1, /dev/ttyACM0
## ESP32-specific USB identifiers
CP210x: Silicon Labs CP210x USB to UART Bridge
CH340: WCH CH340 USB to Serial
FTDI: FTDI FT232R USB UART
CDC ACM: USB CDC ACM devices
## Automatic detection
./detect_ports.sh --verbose
macOS Port Detection
The system adapts to macOS-specific device patterns:
1
2
3
4
5
6
7
8
9
## macOS device patterns
/dev/cu.usbserial-*, /dev/cu.SLAB_USBtoUART*
/dev/cu.usbmodem*, /dev/cu.usbserial*## System information
system_profiler SPUSBDataType | grep-i esp
## Automatic detection
./detect_ports.sh --verbose
Windows (WSL2) Port Detection
The system provides WSL2 compatibility:
1
2
3
4
5
6
7
8
## WSL2 port mapping
/dev/ttyS*(COM port equivalents)## USB device detection
lsusb for device identification
## Port accessibility testing
./detect_ports.sh --test-connection
Port Validation and Testing
Connectivity Testing
1
2
3
4
5
6
7
8
## Test port connectivity
./detect_ports.sh --test-connection## Verify port accessibility
./detect_ports.sh --verbose## Check port permissions and status
./detect_ports.sh --verbose--test-connection
Permission Management
The system handles common permission issues:
1
2
3
4
5
6
7
8
9
10
11
## Linux udev rules for ESP32 devicesSUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE="0666"SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE="0666"## User group membershipsudo usermod -a-G dialout $USERsudo usermod -a-Gtty$USER## Permission verificationls-la /dev/ttyUSB*groups$USER
Troubleshooting Capabilities
Automatic Problem Detection
1
2
3
4
5
## Common issue detection
- USB driver availability
- Port permission problems
- Device enumeration issues
- Connection stability problems
The system now provides two distinct setup approaches optimized for different use cases:
Local Development Setup (setup_repo.sh)
1
2
3
4
5
6
7
8
9
10
11
## Complete development environment setup
./setup_repo.sh
## What it installs
- System dependencies (build tools, libraries)
- Clang-20 toolchain (compiler, formatter, analyzer)
- ESP-IDF v5.5 (ESP32 development framework)
- Python dependencies (PyYAML)
- yq (YAML processor)
- Development aliases and environment variables
- Complete development toolchain
Direct ESP-IDF CI Action - Simplified CI/CD
1
2
3
4
5
6
7
8
9
10
11
12
## CI builds use ESP-IDF CI action directly## ESP-IDF CI action handles everything## What it provides
- Essential build tools (clang-20, clang-format, clang-tidy)
- Python dependencies (PyYAML, yq)
- CI build directory structure
- Minimal dependencies for CI builds
- ESP-IDF handled by ESP-IDF CI action
## NEW: Required environment variables
- ESP32_PROJECT_PATH: Path to ESP32 project directory (e.g., '/examples/esp32')
Environment-Specific Features
Local Development Features
1
2
3
4
5
6
7
## Interactive setup process
- OS detection and adaptation
- Dependency verification
- Installation confirmation
- Progress feedback
- Completion verification
- User guidance and troubleshooting
CI/CD Environment Features
1
2
3
4
5
6
7
8
## CI optimizations
- Cache-aware installation
- Minimal dependency installation
- Non-interactive operation
- Cache statistics and reporting
- Build directory preparation
- ESP-IDF integration with CI actions
- Reliable tool installation (no caching issues)
## Available information
- Application descriptions
- Source file paths
- Build type support
- ESP-IDF version compatibility
- CI/CD configuration
- Featured status
System Information
1
2
3
4
5
6
## System details
- Operating system detection
- Tool availability
- Version information
- Path configurations
- Environment variables
π Usage Examples and Patterns
Environment Setup Workflows
1. Local Development Setup
1
2
3
4
5
6
7
8
9
10
## Complete local setup
./setup_repo.sh
## Setup process
1. OS detection and adaptation
2. Dependency verification
3. Tool installation
4. Environment configuration
5. Verification and testing
6. User guidance and troubleshooting
2. CI/CD Environment Setup
1
2
3
4
5
6
7
8
9
## CI builds use ESP-IDF CI action directly## CI process
1. Cache-aware installation
2. Minimal dependency setup
3. Environment optimization
4. Cache statistics
5. Build directory preparation
6. ESP-IDF CI action integration
## Quick port detection
./detect_ports.sh
## Expected output
- Available ESP32 devices
- Port accessibility status
- Basic device information
2. Detailed Port Analysis
1
2
3
4
5
6
7
8
## Comprehensive port analysis
./detect_ports.sh --verbose## Expected output
- Detailed device information
- USB device details
- Permission status
- Driver information
3. Port Connectivity Testing
1
2
3
4
5
6
7
## Test port connectivity
./detect_ports.sh --test-connection## Expected output
- Port accessibility verification
- Connection stability testing
- Error detection and reporting
Configuration Management Workflows
1. Application Information Access
1
2
3
4
5
6
7
8
9
10
## Get application information
./get_app_info.py list
./get_app_info.py source_file gpio_test
./get_app_info.py validate adc_test
## Information usage
- Build system integration
- Configuration validation
- Documentation generation
- CI/CD pipeline configuration
Problem: Port access denied
Symptoms: βPermission deniedβ or βAccess deniedβ errors
Solutions:
1
2
3
4
5
6
7
8
9
## Check user permissionsls-la /dev/ttyUSB*groups$USER## Add user to required groupssudo usermod -a-G dialout,tty $USER## Create udev rulessudo nano /etc/udev/rules.d/99-esp32.rules
3. Port Connectivity Issues
Problem: Port not accessible or unstable
Symptoms: βPort not accessibleβ or connection failures
Solutions:
1
2
3
4
5
6
7
8
9
## Test port connectivity
./detect_ports.sh --test-connection## Check port stability
./detect_ports.sh --verbose--test-connection## Verify device mode## Check for bootloader mode## Reset device if necessary
Environment Setup Issues
1. Setup Script Selection Issues
Problem: Wrong setup script for environment
Symptoms: Setup errors or missing functionality
Solutions:
1
2
3
4
5
6
7
## For local development (complete environment)
./setup_repo.sh
## For CI/CD (ESP-IDF CI action handles everything)## Check script help for details
./setup_repo.sh --help
2. Dependency Installation Failures
Problem: Required tools not installed
Symptoms: βCommand not foundβ or installation errors
Solutions:
Problem: ESP-IDF not properly installed
Symptoms: βESP-IDF not foundβ or environment errors
Solutions:
1
2
3
4
5
6
7
8
9
## Local development
./setup_repo.sh --reinstall-esp-idf## CI environment## Ensure ESP-IDF CI action is properly configured## Verify environmentsource ~/esp/esp-idf/export.sh
idf.py --version
4. Permission and Path Issues
Problem: Insufficient permissions or incorrect paths
Symptoms: βPermission deniedβ or βPath not foundβ errors
Solutions:
## Enable debug modeexport DEBUG=1
export VERBOSE=1
## Run with debug output
./detect_ports.sh --verbose
./setup_repo.sh --debug
./get_app_info.py --verbose
Debug Information Available
1
2
3
4
5
6
7
8
9
## Debug information
- Port detection process details
- Device enumeration information
- Permission checking details
- Installation process information
- Configuration loading details
- Error con and resolution
- Environment setup process details
- CI vs local environment differences
π Reference and Examples
Command Reference
Port Detection Commands
1
2
3
4
5
6
./detect_ports.sh [options]
## Options:## --verbose - Show detailed device information## --test-connection - Test port connectivity## --help, -h - Show usage information
./get_app_info.py <command>[args...]
## Commands:## list - List all available applications## source_file <app_type> - Get source file path for application## validate <app_type> - Validate application configuration## --help, -h - Show usage information
Environment Variables
Port Detection Variables
1
2
3
4
## Port detection configurationexport PORT_DETECTION_VERBOSE=1 # Enable verbose outputexport PORT_TEST_TIMEOUT=5 # Set connection test timeoutexport PORT_SCAN_TIMEOUT=3 # Set port scan timeout
Setup Configuration Variables
1
2
3
4
5
6
7
8
9
10
11
## Setup configurationexport SETUP_MODE="local"# Set setup mode (local/ci)export ESP_IDF_VERSION="v5.5"# Set ESP-IDF versionexport CLANG_VERSION="20"# Set Clang versionexport PYTHON_VERSION="3.9"# Set Python version## Environment-specific variablesexport ESP32_PROJECT_PATH="/examples/esp32"# Project pathexport IDF_TARGET="esp32c6"# Target MCUexport BUILD_TYPE="Release"# Build typeexport APP_TYPE="gpio_test"# Application type
## GitHub Actions utility integration-name:Setup ESP32 Environmentrun:|cd /examples/esp32# CI builds use ESP-IDF CI action directly-name:Detect ESP32 Portsrun:|cd /examples/esp32./scripts/detect_ports.sh --verbose-name:Validate Configurationrun:|cd /examples/esp32python3 ./scripts/get_app_info.py validate gpio_test
GitLab CI Integration
1
2
3
4
5
6
7
8
## GitLab CI utility integrationsetup_environment:script:-cd /examples/esp32# CI builds use ESP-IDF CI action directlyartifacts:paths:-/examples/esp32/build*/
#!/bin/bash## Automated development environment setupcd /examples/esp32
## Choose setup based on environmentif[["$CI"=="true"]];then
echo"CI builds use ESP-IDF CI action directly"else
echo"Setting up local development environment..."
./setup_repo.sh
fi## Verify setupecho"Verifying setup..."if[["$CI"=="true"]];then
echo"CI builds use ESP-IDF CI action directly"else
./setup_repo.sh --verifyfi## Detect available portsecho"Detecting ESP32 ports..."
./detect_ports.sh --verbose## Validate configurationecho"Validating configuration..."
python3 ./get_app_info.py validate gpio_test
echo"Setup complete!"
Best Practices
1. Port Detection
Always use verbose mode for troubleshooting
Test port connectivity before operations
Verify permissions and user group membership
Use automatic detection when possible
2. Environment Setup
Local Development: Use setup_repo.sh for complete development environment
CI/CD: Use ESP-IDF CI action directly
Verify installation after setup
Monitor cache usage and optimization
Regular environment verification
3. Configuration Management
Validate configuration before use
Use centralized configuration access
Monitor configuration changes
Regular configuration verification
4. Troubleshooting
Enable debug mode for detailed information
Use systematic problem resolution approach
Document solutions for future reference
Regular system health checks
Use environment-specific troubleshooting approaches