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

88 lines
2.7 KiB
Markdown

# 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
```bash
# 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
```cpp
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.