
#include "ESP8266WiFi.h"
#include "math.h"
//d = 10^(A-(abs(rssi)) / (10 * n)) 信號強度
#define N 45 //N = 10 * n ,其中n為環境衰減因子,3.25-4.5
#define A -35 //接收機和發射機間隔1m時的信號強度
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
// WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));
// WiFi.softAP("215-wifi","1234567890");
WiFi.disconnect();
delay(100);
Serial.println("Setup done");
}
void loop() {
Serial.println("scan start");
// WiFi.scanNetworks will return the number of networks found
int n = WiFi.scanNetworks();
Serial.println("scan done");
if (n == 0) {
Serial.println("no networks found");
} else {
Serial.print(n);
Serial.println(" networks found");
for (int i = 0; i < n; ++i) {
// Print SSID and RSSI for each network found
Serial.print(i + 1);
Serial.print(": ");
Serial.print(WiFi.SSID(i));
Serial.print(" (");
Serial.print(WiFi.RSSI(i));
Serial.print(")");
//接收信號強度指示算法(RSSI)
//A為定位節點與參考點之間的距離d為 1m 時測得的 RSSI 值;
//n為信號衰減因子,范圍一般為2~4。
/*
double log (double); 以e為底的對數
double log10 (double);以10為底的對數
double pow(double x, double y);計算以x為底數的y次冪
float powf(float x, float y); 功能與pow一致,只是輸入與輸出皆為浮點數
*/
float iu, distance;
iu = (float)(A-WiFi.RSSI(i) ) / (float)N;
distance = powf(10.0, iu);//計算以x為底數的y次冪 功能與pow一致,只是輸入與輸出皆為浮點數
Serial.print("distance:---"); Serial.println(distance);
}
}
delay(3000);
}