#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); }