Files
spore/examples/wifiscan
2025-09-12 22:08:47 +02:00
..
2025-09-12 22:08:47 +02:00
2025-09-12 22:08:47 +02:00

WiFi Scanner Example

This example demonstrates how to use the async WiFi scanning functionality in SPORE with periodic scanning via tasks.

Features

  • Async WiFi Scanning: Non-blocking WiFi network discovery via NetworkManager
  • Task-based Periodic Scanning: Automatically scans for networks every minute using TaskManager
  • Event-driven: Uses the event system to handle scan events
  • REST API: HTTP endpoints to manually trigger scans and view results
  • Detailed Results: Shows SSID, RSSI, channel, and encryption type for each network

Usage

  1. Upload this example to your ESP8266 device
  2. Open the Serial Monitor at 115200 baud
  3. The device will automatically start scanning for WiFi networks every minute
  4. Results will be displayed in the Serial Monitor
  5. Use the REST API to manually trigger scans or view current results

Event System

The WiFi scanner uses the following events:

  • wifi/scan/start: Fired when scan starts (both manual and periodic)
  • wifi/scan/complete: Fired when scan completes successfully
  • wifi/scan/error: Fired when scan fails to start
  • wifi/scan/timeout: Fired when scan times out (10 seconds)

Task Management

The example registers a periodic task:

  • Task Name: wifi_scan_periodic
  • Interval: 60 seconds (60000ms)
  • Function: Fires wifi/scan/start event and starts WiFi scan

REST API

Manual Scan Control

  • Start Scan: POST /api/wifi/scan
  • Get Status: GET /api/wifi/status

Example API Usage

# Start a manual scan
curl -X POST http://192.168.1.50/api/wifi/scan

# Get current scan status and results
curl http://192.168.1.50/api/wifi/status

# Check task status
curl http://192.168.1.50/api/tasks/status

# Disable periodic scanning
curl -X POST http://192.168.1.50/api/tasks/control \
  -d task=wifi_scan_periodic -d action=disable

Architecture

  • WiFiScannerService: Manages periodic scanning and API endpoints
  • NetworkManager: Handles WiFi scanning operations and callbacks
  • NodeContext: Stores the WiFi access points data
  • TaskManager: Schedules periodic scan tasks
  • Event System: Provides communication between components

WiFiAccessPoint Structure

struct WiFiAccessPoint {
    String ssid;           // Network name
    int32_t rssi;          // Signal strength
    uint8_t encryption;    // Encryption type
    uint8_t* bssid;        // MAC address
    int32_t channel;       // WiFi channel
    bool isHidden;         // Hidden network flag
};

Task Configuration

The periodic scanning task can be controlled via the standard TaskManager API:

  • Enable/disable the task
  • Change the scan interval
  • Monitor task status
  • Start/stop the task

This provides flexibility to adjust scanning behavior based on application needs.