-
Notifications
You must be signed in to change notification settings - Fork 13.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
wifi: add SoftAPModeProbeRequestReceived event handler (#2917)
- add probe request event handler (#2910) - update WiFi events handling example to use new handler Pro tip: replace blinking LED with ‘analogWrite’ and connect the pin to a loudspeaker (or use a servo to hit a bell). Get notified when someone with a smartphone wanders around your country house.
- Loading branch information
Showing
4 changed files
with
113 additions
and
52 deletions.
There are no files selected for viewing
52 changes: 0 additions & 52 deletions
52
libraries/ESP8266WiFi/examples/WiFiClientEvents/WiFiClientEvents.ino
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
/* | ||
This sketch shows how to use WiFi event handlers. | ||
In this example, ESP8266 works in AP mode. | ||
Three event handlers are demonstrated: | ||
- station connects to the ESP8266 AP | ||
- station disconnects from the ESP8266 AP | ||
- ESP8266 AP receives a probe request from a station | ||
Written by Markus Sattler, 2015-12-29. | ||
Updated for new event handlers by Ivan Grokhotkov, 2017-02-02. | ||
This example is released into public domain, | ||
or, at your option, CC0 licensed. | ||
*/ | ||
|
||
#include <ESP8266WiFi.h> | ||
#include <stdio.h> | ||
|
||
const char* ssid = "ap-ssid"; | ||
const char* password = "ap-password"; | ||
|
||
WiFiEventHandler stationConnectedHandler; | ||
WiFiEventHandler stationDisconnectedHandler; | ||
WiFiEventHandler probeRequestPrintHandler; | ||
WiFiEventHandler probeRequestBlinkHandler; | ||
|
||
bool blinkFlag; | ||
|
||
void setup() { | ||
Serial.begin(115200); | ||
pinMode(LED_BUILTIN, OUTPUT); | ||
digitalWrite(LED_BUILTIN, HIGH); | ||
|
||
// Don't save WiFi configuration in flash - optional | ||
WiFi.persistent(false); | ||
|
||
// Set up an access point | ||
WiFi.mode(WIFI_AP); | ||
WiFi.softAP(ssid, password); | ||
|
||
// Register event handlers. | ||
// Callback functions will be called as long as these handler objects exist. | ||
// Call "onStationConnected" each time a station connects | ||
stationConnectedHandler = WiFi.onSoftAPModeStationConnected(&onStationConnected); | ||
// Call "onStationDisconnected" each time a station disconnects | ||
stationDisconnectedHandler = WiFi.onSoftAPModeStationDisconnected(&onStationDisconnected); | ||
// Call "onProbeRequestPrint" and "onProbeRequestBlink" each time | ||
// a probe request is received. | ||
// Former will print MAC address of the station and RSSI to Serial, | ||
// latter will blink an LED. | ||
probeRequestPrintHandler = WiFi.onSoftAPModeProbeRequestReceived(&onProbeRequestPrint); | ||
probeRequestBlinkHandler = WiFi.onSoftAPModeProbeRequestReceived(&onProbeRequestBlink); | ||
} | ||
|
||
void onStationConnected(const WiFiEventSoftAPModeStationConnected& evt) { | ||
Serial.print("Station connected: "); | ||
Serial.println(macToString(evt.mac)); | ||
} | ||
|
||
void onStationDisconnected(const WiFiEventSoftAPModeStationDisconnected& evt) { | ||
Serial.print("Station disconnected: "); | ||
Serial.println(macToString(evt.mac)); | ||
} | ||
|
||
void onProbeRequestPrint(const WiFiEventSoftAPModeProbeRequestReceived& evt) { | ||
Serial.print("Probe request from: "); | ||
Serial.print(macToString(evt.mac)); | ||
Serial.print(" RSSI: "); | ||
Serial.println(evt.rssi); | ||
} | ||
|
||
void onProbeRequestBlink(const WiFiEventSoftAPModeProbeRequestReceived&) { | ||
// We can't use "delay" or other blocking functions in the event handler. | ||
// Therefore we set a flag here and then check it inside "loop" function. | ||
blinkFlag = true; | ||
} | ||
|
||
void loop() { | ||
if (millis() > 10000 && probeRequestPrintHandler) { | ||
// After 10 seconds, disable the probe request event handler which prints. | ||
// Other three event handlers remain active. | ||
Serial.println("Not printing probe requests any more (LED should still blink)"); | ||
probeRequestPrintHandler = WiFiEventHandler(); | ||
} | ||
if (blinkFlag) { | ||
blinkFlag = false; | ||
digitalWrite(LED_BUILTIN, LOW); | ||
delay(100); | ||
digitalWrite(LED_BUILTIN, HIGH); | ||
} | ||
delay(10); | ||
} | ||
|
||
String macToString(const unsigned char* mac) { | ||
char buf[20]; | ||
snprintf(buf, sizeof(buf), "%02x:%02x:%02x:%02x:%02x:%02x", | ||
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); | ||
return String(buf); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters