Skip to content

ESP32 WiFi Utility v5.0.0

Latest

Choose a tag to compare

@github-actions github-actions released this 03 Nov 02:48
· 1 commit to main since this release

Release v5.0.0

Release Date: 2025-11-02
Release Type: Major Enhancement Release
Previous Version: v4.3.1

🎯 Overview

Version 5.0.0 represents a significant advancement in system responsiveness, user experience, and code quality. This release introduces TFT display enhancements with QR code support, non-blocking WiFi operations, structured logging framework, and FreeRTOS task improvements that collectively transform the device into a truly professional-grade WiFi utility.

🌟 Highlights

  • 🔗 QR Code Sharing: Instant WiFi credential sharing via scannable QR codes in Station mode
  • ⚡ Non-Blocking Operations: WiFi connections no longer freeze the device for 10 seconds
  • 📋 Structured Logging: Professional logging system with severity levels and component tags
  • 📊 Enhanced Status: Comprehensive network information including signal quality and uptime
  • 🚀 Task Architecture: Dedicated FreeRTOS task for WiFi command processing
  • 🌐 Web Server Speed: 10x faster response times with optimized main loop
  • 🔧 Critical Fixes: Resolved connection timing, TFT updates, and web server issues

📦 What's New

🔗 QR Code Support for Station Mode

Transform your ESP32 into a WiFi credential sharing device with automatic QR code generation.

Features

  • Automatic Generation: QR code created instantly when connected to WiFi
  • Standard Format: Uses WIFI:T:WPA;S:;P:;; format for universal compatibility
  • Conditional Display: Shows QR code ONLY when actively connected
  • Dynamic Updates: Automatically clears on disconnection, reappears on reconnection
  • Mobile Optimized: White border and 4-pixel modules for better camera recognition
  • Centered Layout: Professional positioning on TFT display
  • Both Modes: Consistent experience in AP and Station modes

Use Cases

  1. Guest WiFi Sharing: Show QR code on device for easy guest access
  2. Network Documentation: Visual reference for WiFi credentials
  3. IoT Provisioning: Quick setup for other IoT devices
  4. Office Setup: Share network access without revealing password verbally

Technical Implementation

// QR code generated with password tracking
static String connectingPassword = "";

// Conditional display based on WiFi status
if (WiFi.status() == WL_CONNECTED) {
    String qrData = "WIFI:T:WPA;S:" + ssid + ";P:" + password + ";;";
    drawQRCode(qrData, offsetX, offsetY);
}

Memory Impact: +1,740 bytes Flash, +64 bytes RAM


⚡ Non-Blocking WiFi Connection

Revolutionize user experience with truly asynchronous WiFi operations.

Problem Solved

Before: Device completely frozen for 10 seconds during WiFi connection attempts

// OLD: Blocking loop
while (WiFi.status() != WL_CONNECTED && attempts < 100) {
    vTaskDelay(10 / portTICK_PERIOD_MS);  // BLOCKS HERE
    attempts++;
}

After: Device remains fully responsive during connection

// NEW: Non-blocking monitoring
void connectToNetwork(String ssid, String password) {
    WiFi.begin(ssid.c_str(), password.c_str());
    isConnecting = true;  // Returns immediately
}

void handleWiFiConnection() {
    if (!isConnecting) return;  // Called from main loop
    // Check status, update UI, handle timeout
}

Features

  • Dual Function Design: connectToNetwork() initiates, handleWiFiConnection() monitors
  • State Tracking: Connection SSID, password, start time, and attempt count
  • Visual Feedback: Progress dots every 100ms without blocking
  • 10-Second Timeout: Automatic detection with clear error messages
  • Preserved Features: All LED indicators, TFT updates, web server auto-start
  • FreeRTOS Compatible: Proper task delays for cooperative multitasking

Benefits

  • Main loop executes every 10ms (was blocked for 10,000ms)
  • Web server remains responsive during connection
  • TFT display updates continue smoothly
  • Command interface stays interactive
  • Other tasks (display, monitoring) run concurrently

Performance Impact: 1000x improvement in responsiveness during connection


📋 Structured Logging System

Professional-grade logging framework replacing ad-hoc Serial.print statements.

Features

Four Severity Levels
LOG_DEBUG(TAG_WIFI, "Detailed debugging info");    // Development
LOG_INFO(TAG_WIFI, "Normal operations");           // Production
LOG_WARN(TAG_WIFI, "Warning conditions");          // Attention needed
LOG_ERROR(TAG_WIFI, "Error conditions");           // Critical issues
Component Tags
  • TAG_WIFI: WiFi operations and connections
  • TAG_AP: Access Point mode operations
  • TAG_WEB: Web server and HTTP requests
  • TAG_TASK: FreeRTOS task management
System-Wide Migration
  • 73 statements replaced across wifi_manager.cpp, wifi_task.cpp, web_server.cpp
  • Consistent formatting with timestamps and severity
  • Runtime configuration for log level filtering
  • User interface preserved (connection dots, prompts)

Examples

// Before
Serial.println("Connected to network");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());

// After
LOG_INFO(TAG_WIFI, "Connected to '%s'", WiFi.SSID().c_str());
LOG_INFO(TAG_WIFI, "IP Address: %s", WiFi.localIP().toString().c_str());
LOG_DEBUG(TAG_WIFI, "Gateway: %s", WiFi.gatewayIP().toString().c_str());

Benefits

  • Easier Debugging: Filter logs by component or severity
  • Production Ready: Disable debug logs without code changes
  • Consistent Format: Timestamps and severity on every message
  • Professional: Clean, structured output for troubleshooting

Code Quality Impact: Improved maintainability and debugging capability


📊 Enhanced Status Command

Comprehensive network diagnostics at your fingertips.

New Information Displayed

  1. Connection Status: Clear Connected/Not Connected indicator
  2. Network Details:
    • SSID (network name)
    • IP address, subnet mask, gateway
    • DNS servers (primary and secondary)
    • MAC address
  3. Signal Quality:
    • RSSI in dBm (-30 to -90+)
    • Quality percentage (0-100%)
    • Classification (Excellent/Good/Fair/Weak)
    • Emoji signal bars (🟢🟢🟢🟢 to 🔴🔴🔴⚪)
  4. Connection Info:
    • WiFi channel (1-13 for 2.4GHz)
    • Uptime in HH:MM:SS format
  5. Troubleshooting:
    • Detailed WiFi status codes when disconnected
    • Connection history

Example Output

Station Mode Status:
─────────────────────────────────────
Status: ✓ Connected
SSID: MyHomeNetwork
IP Address: 192.168.1.100
Subnet: 255.255.255.0
Gateway: 192.168.1.1
DNS: 192.168.1.1
MAC: A4:CF:12:AB:CD:EF

Signal Strength: -55 dBm
Quality: 🟢🟢🟢🟢 Excellent (90%)
Channel: 6 (2.4GHz)
Uptime: 01:23:45
─────────────────────────────────────

User Experience Impact: Complete network diagnostics in one command


🚀 FreeRTOS Task Architecture

Dedicated WiFi command processing with asynchronous execution.

WiFi Command Task

xTaskCreatePinnedToCore(
    wifiCommandTask,     // Task function
    "WiFi_Command",      // Task name
    8192,                // Stack size (8KB)
    nullptr,             // Parameters
    2,                   // Priority (higher than display)
    &wifiTaskHandle,     // Task handle
    1                    // Core 1 (app core)
);

Features

  • Command Queue: Non-blocking command submission
  • Proper Sequencing: Stop → Start Mode → Connect flow
  • Background Processing: Commands execute without main loop blocking
  • Error Handling: Graceful failure recovery
  • Priority Management: Higher than display, lower than network stack

Benefits

  • Commands processed asynchronously
  • Main loop never blocks waiting for WiFi operations
  • Improved reliability with proper state management
  • Better error reporting

Architecture Impact: Professional multi-tasking design


🌐 Web Server Improvements

Dramatically improved web interface responsiveness.

Performance Optimizations

Main Loop Speed
  • Before: 100ms delay between iterations (10 Hz)
  • After: 10ms delay between iterations (100 Hz)
  • Improvement: 10x faster loop execution
Web Server Handling
  • Before: handleClient() called 10 times/second
  • After: handleClient() called 100 times/second
  • Result: Near-instant HTTP response times
CPU Sharing
handleWebServerRequests();
yield();  // Allow other tasks to run

Bug Fixes

  1. Station Mode Web Server: Now starts on all board variants
  2. Conditional Compilation: Fixed USE_NEOPIXEL → USE_WEBSERVER
  3. HTTP Pending: Eliminated "stuck at pending" requests
  4. Initialization: Added 100ms delay after webServer->begin()

Impact

  • HTTP requests respond instantly (no delays)
  • Web interface feels desktop-app responsive
  • nmap confirms port 80 open and responsive
  • Works on all boards (esp32dev, TFT, Reverse TFT)

User Experience: Web interface now professional-grade


🔧 Bug Fixes

Critical Fixes

WiFi Connection Timing

Issue: Device reported "Connection Failed" even with valid credentials
Root Cause: Missing delay in connection loop, WiFi.begin() is asynchronous
Fix: Added delay(500) → vTaskDelay(500 / portTICK_PERIOD_MS)
Impact: Reliable connections every time

TFT Display Updates

Issue: TFT not updating during Station mode connection
Root Cause: Missing status messages in connection flow
Fix: Added sendTFTStatus() calls at appropriate points
Impact: Real-time connection status on display

Mode Switching Sequence

Issue: Connection attempts before Station mode fully activated
Root Cause: WiFi task calling connectToNetwork() before startStationMode()
Fix: Proper sequencing in task command processing
Impact: Reliable mode transitions

Web Server Compatibility

Issue: Web server not starting on TFT-only boards
Root Cause: Web server start inside #ifdef USE_NEOPIXEL block
Fix: Moved to USE_WEBSERVER conditional
Impact: Web server works on all board variants


📊 Technical Specifications

Memory Usage

Flash Memory

  • Total: 1,161,085 bytes (80.5% of 1,441,792 bytes)
  • Changes from v4.3.1: +2,004 bytes
    • QR code logic: +1,692 bytes
    • Conditional display: +48 bytes
    • Non-blocking connection: +264 bytes

RAM Usage

  • Total: 53,072 bytes (16.2% of 327,680 bytes)
  • Changes from v4.3.1: +16 bytes
    • Connection state tracking: minimal
    • TFT password field: +64 bytes per structure

Performance Metrics

Main Loop

  • Iteration Time: 10ms (was 100ms)
  • Frequency: 100 Hz (was 10 Hz)
  • Improvement: 10x faster

Web Server

  • handleClient() Calls: 100 Hz (was 10 Hz)
  • HTTP Response Time: <50ms (was 100-200ms)
  • Concurrent Requests: Improved handling

WiFi Connection

  • Blocking Time: 0ms (was 10,000ms)
  • Responsiveness: Device fully interactive
  • Timeout: Still 10 seconds with proper feedback

Build Statistics

Compilation

  • Build Time: ~11 seconds (adafruit_feather_esp32s3_tft)
  • Environments: All 6 compile successfully
  • Warnings: None
  • Errors: None

Supported Boards

  1. esp32dev
  2. adafruit_feather_esp32s3
  3. adafruit_feather_esp32s3_tft
  4. adafruit_feather_esp32s3_reversetft
  5. test_adafruit_feather_esp32s3_tft
  6. test_adafruit_feather_esp32s3_reversetft

🔄 Migration Guide

Upgrading from v4.3.1

Automatic Changes

All changes are transparent - no user action required:

  1. WiFi Connection: Now non-blocking (feels more responsive)
  2. QR Codes: Automatically appear in Station mode when connected
  3. Logging: Enhanced debug output with component tags
  4. Status Command: Shows more information
  5. Web Interface: Noticeably faster response times

No Breaking Changes

  • All existing commands work identically
  • Web interface pages unchanged (just faster)
  • Serial output format preserved for user messages
  • Configuration storage format unchanged

Optional Enhancements

To take full advantage of new features:

  1. Use Enhanced Status: Run status command to see new network info
  2. Share WiFi: Show TFT display to share credentials via QR code
  3. Faster Web Interface: Enjoy instant response times
  4. Debug Logs: Use structured logs for troubleshooting

📚 Documentation Updates

Updated Files

  1. CHANGELOG.md: Complete version history entry
  2. README.md: Updated "What's New" section
  3. RELEASE_NOTES_V5.0.0.md: This comprehensive release guide

New Documentation

  • Non-blocking WiFi connection architecture
  • Structured logging system guide
  • QR code functionality documentation
  • Enhanced status command reference

🎯 Known Issues

None reported at release time.

If you encounter any issues:

  1. Check GitHub Issues: https://github.com/arunkumar-mourougappane/esp32-wifi-utility/issues
  2. Enable debug logging for troubleshooting
  3. Report with full debug output and board variant

🙏 Acknowledgments

Contributors

Community

Thanks to all users who provided feedback and reported issues that led to these improvements.


📞 Support


🔮 Future Roadmap

Potential features for upcoming releases:

  • Scheduler Support: Time-based WiFi mode switching
  • Web Interface Themes: Dark mode and customization
  • Extended Logging: File-based logging to SD card
  • Performance Graphs: Historical signal strength and uptime tracking
  • Advanced QR Codes: Custom QR code content and styling

Thank you for using ESP32 WiFi Utility Suite!

For complete details, see CHANGELOG.md