88 lines
2.7 KiB
Markdown
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. |