/* Session 5 — Wi-Fi site survey of the college farm (ESP32 + power bank) Walk to each candidate node location, wait 10 s, and write down the RSSI of the farm access point. RSSI guide: > -60 dBm excellent | -60..-70 good | -70..-80 weak (packet loss) | < -80 use LoRa / ESP-NOW relay Output is CSV on the Serial Monitor (or the built-in LED blinks: fast = strong, slow = weak). */ #include const char* TARGET_SSID = "KFS-Farm-IoT"; #define LED 2 void setup() { Serial.begin(115200); pinMode(LED, OUTPUT); WiFi.mode(WIFI_STA); WiFi.disconnect(); Serial.println("ms,ssid,rssi_dbm,channel,quality"); } void loop() { int n = WiFi.scanNetworks(); int best = -127; for (int i = 0; i < n; i++) { const char* q = WiFi.RSSI(i) > -60 ? "excellent" : WiFi.RSSI(i) > -70 ? "good" : WiFi.RSSI(i) > -80 ? "weak" : "unusable"; Serial.printf("%lu,%s,%d,%d,%s\n", millis(), WiFi.SSID(i).c_str(), WiFi.RSSI(i), WiFi.channel(i), q); if (WiFi.SSID(i) == TARGET_SSID) best = max(best, (int)WiFi.RSSI(i)); } Serial.printf("# %s best RSSI = %d dBm\n", TARGET_SSID, best); WiFi.scanDelete(); int blinkMs = best > -60 ? 100 : best > -70 ? 300 : best > -80 ? 800 : 0; for (int i = 0; i < 10 && blinkMs; i++) { digitalWrite(LED, !digitalRead(LED)); delay(blinkMs); } digitalWrite(LED, LOW); delay(blinkMs ? 2000 : 5000); }