Hi zusammen,
hab ein kleines Problem beim Aufbau eines eigenes Wifi Managers:
"WiFi.scanNetworks()" liefert im folgenden Sketch (oder im Anhang samt html) in der Loop einwandfreie Ergebnisse. Rufe ich jedoch die selbe Methode "WLANScan()" über HTTP_GET im Setup Teil auf, liefert diese Methode keine Scanergebnisse. Warum?
Sketch:
#include <ESP8266WiFi.h>
#include <ESPAsyncTCP.h>
//#include <WiFiClient.h>
#include <ESPAsyncWebServer.h>
//Access Point configuration
const char *ap_ssid = "WLAN Konfiguration";
const char *ap_password = "esp8266xx"; //Min. 8 chars, if used
AsyncWebServer HTML_server(80);
//WLANScan results
int vWifisAvailable;
String Wifi_SSID[10];
int Wifi_Strength[10];
//String Wifi[100][2]; //[i][0] = SSID; [i][1] = Strength; i=Wifi 'Nr.'
void notFound(AsyncWebServerRequest *request) {
request->send(404, "text/plain", "Not found");
}
void setup() {
Serial.begin(115200);
delay(200);
Serial.println();
WiFi.softAPdisconnect();
// Initialize SPIFFS
if(!SPIFFS.begin()){
Serial.println("An Error has occurred while mounting SPIFFS");
return;
}
Serial.print("Configuring access point...");
// create access point
while (!WiFi.softAP(ap_ssid, ap_password, 6, false, 15)) { /* You can remove the password parameter if you want the AP to be open. */
delay(500);
}
WiFi.mode(WIFI_AP);
//WiFi.mode(WIFI_AP_STA);
Serial.print("Access Point started: ");
Serial.println(ap_ssid);
IPAddress AP_IP = WiFi.softAPIP();
Serial.print("HTTP address: ");
Serial.println(AP_IP);
// Route for root / web page
HTML_server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
Serial.print("WLAN Scan beim Öffnen der Seite: ");
WLANScan();
request->send(SPIFFS, "/index.html");
});
// WLANScan
HTML_server.on("/vWifisAvailable", HTTP_GET, [](AsyncWebServerRequest *request){
request->send_P(200, "text/plain", String(vWifisAvailable).c_str()); //Anzahl gefundener Netzwerke zurückgeben
});
// WLANScan result arrays
HTML_server.on("/String_Wifi_SSID", HTTP_GET, [](AsyncWebServerRequest *request){
request->send_P(200, "text/plain", String(StringArrayToString(Wifi_SSID, vWifisAvailable)).c_str());
});
HTML_server.on("/String_Wifi_Strength", HTTP_GET, [](AsyncWebServerRequest *request){
request->send_P(200, "text/plain", String(IntArrayToString(Wifi_Strength, vWifisAvailable)).c_str());
});
HTML_server.on("/SCAN", HTTP_GET, [](AsyncWebServerRequest *request){
Serial.print("WLAN Scan durch Button: ");
WLANScan(); //Findet keine WLan -> Muss in der loop ausgeführt werden, um WLANs zu finden
//request->send_P(200, "text/plain", String(WLANScan()).c_str());
});
HTML_server.onNotFound(notFound);
HTML_server.begin();
Serial.println("HTTP server started");
}
void loop() {
Serial.print("WLAN Scan in loop: ");
WLANScan();
delay(30000);
}
//###Methoden###
int WLANScan()
{
Serial.println("Wifi scan started");
// WiFi.scanNetworks will return the number of networks found
vWifisAvailable = WiFi.scanNetworks();
Serial.println("Wifi scan ended");
if (vWifisAvailable == 0) {
Serial.println("no networks found");
}
else {
Serial.print(vWifisAvailable);
Serial.println(" networks found");
for (int i = 0; i < vWifisAvailable; ++i)
{
// Print SSID and RSSI for each network found
Serial.print(i + 1);
Serial.print(") ");
Serial.print(WiFi.SSID(i));// SSID
Wifi_SSID[i] = WiFi.SSID(i);
//Wifi[i][0] = WiFi.SSID(i);
// Serial.print(WiFi.RSSI(i));//Signal strength in dBm
// Serial.print("dBm (");
Serial.print(" ");
Serial.print(dBmtoPercentage(WiFi.RSSI(i)));//Signal strength in %
Serial.print("% )");
Wifi_Strength[i] = dBmtoPercentage(WiFi.RSSI(i));
//Wifi[i][1] = WiFi.SSID(i);
if(WiFi.encryptionType(i) == ENC_TYPE_NONE)
{
Serial.println(" <<***OPEN***>>");
}
else{
Serial.println();
}
}
// //Debugging
// for (int i = 0; i < vWifisAvailable; ++i)
// {
// // Print SSID and RSSI for each network found
// Serial.print(i + 1);
// Serial.print(". ");
// Serial.print(Wifi_SSID[i]);
// Serial.print(" Signal: ");
// Serial.print(Wifi_Strength[i]);
// Serial.println(" %");
// }
}
Serial.println("");
WiFi.scanDelete();
return vWifisAvailable;
}
const int RSSI_MAX =-50;// define maximum strength of signal in dBm
const int RSSI_MIN =-100;// define minimum strength of signal in dBm
//WiFi Signal Strength Calculati
int dBmtoPercentage(int dBm)
{
int quality;
if(dBm <= RSSI_MIN)
{
quality = 0;
}
else if(dBm >= RSSI_MAX)
{
quality = 100;
}
else
{
quality = 2 * (dBm + 100);
}
return quality;
}//dBmtoPercentage
String StringArrayToString(String *vAdressOfArray, int vPositionInArray)
{
int i = 0;
String vArrayContent = "0";
while(i<vPositionInArray)
{
if(i == 0)
{
vArrayContent = String(*(vAdressOfArray + i));
i++;
}
else
{
vArrayContent = vArrayContent +String("|")+ String(*(vAdressOfArray + i));
i++;
}
}
//Debugging
// Serial.print("Read from vArrayContent: ");
// Serial.println(vArrayContent);
return vArrayContent;
}
String IntArrayToString(int *vAdressOfArray, int vPositionInArray)
{
int i = 0;
String vArrayContent = "0";
while(i<vPositionInArray)
{
if(i == 0)
{
vArrayContent = String(*(vAdressOfArray + i));
i++;
}
else
{
vArrayContent = vArrayContent +String("|")+ String(*(vAdressOfArray + i));
i++;
}
}
//Debugging
// Serial.print("Read from vArrayContent: ");
// Serial.println(vArrayContent);
return vArrayContent;
}
Serieller Monitor:
00:40:44.555 -> Configuring access point...Access Point started: WLAN Konfiguration
00:40:46.424 -> HTTP address: 192.168.4.1
00:40:46.424 -> HTTP server started
00:40:46.424 -> WLAN Scan in loop: Wifi scan started
00:40:48.638 -> Wifi scan ended
00:40:48.638 -> 5 networks found
00:40:48.638 -> 1) WLAN-194791 40% )
00:40:48.638 -> 2) Telekom_FON 18% ) <<***OPEN***>>
00:40:48.683 -> 3) FRITZ!Box 6490 Cable 30% )
00:40:48.683 -> 4) Castle 32% )
00:40:48.683 -> 5) AccessPoint 100% )
00:40:48.683 ->
00:41:05.268 -> WLAN Scan beim Öffnen der Seite: Wifi scan started
00:41:05.268 -> Wifi scan ended
00:41:05.268 -> no networks found
00:41:05.268 ->
00:41:07.440 -> WLAN Scan in loop: Wifi scan started
00:41:09.615 -> Wifi scan ended
00:41:09.615 -> 4 networks found
00:41:09.615 -> 1) WLAN-194791 38% )
00:41:09.615 -> 2) FRITZ!Box 6490 Cable 18% )
00:41:09.615 -> 3) Castle 28% )
00:41:09.615 -> 4) AccessPoint 100% )
00:41:09.615 ->
00:41:10.909 -> WLAN Scan durch Button: Wifi scan started
00:41:10.909 -> Wifi scan ended
00:41:10.909 -> no networks found
Viele Grüße
Noyen
WLAN_Scan_1.2.zip (7.17 KB)