/*
    XIAO ESP32 WiFi Scanner of one particular network
    Markus Opitz 2026
*/

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <WiFi.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define SDA_PIN D9
#define SCL_PIN D10

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

void setup() {
  Serial.begin(115200);
  Wire.begin(SDA_PIN, SCL_PIN);

  //setup display
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3D)) {     // or try address 0x3C
    Serial.println("SSD1306 error");
    for (;;);
  }
  display.setRotation(0);
  display.setTextColor(SSD1306_WHITE);
  display.clearDisplay();

  // init WiFi and start scan
  WiFi.mode(WIFI_STA);  // set the Wi-Fi mode to Station
  WiFi.disconnect();    // disconnect from any previous connections
  delay(100);


}

void loop() {
  
  Serial.println("Scanning for Wi-Fi networks...");
  int n = WiFi.scanNetworks();  // start network scan

  if (n == 0) {
    Serial.println("No networks found.");
    display.clearDisplay(); display.setCursor(3, 16); 
    display.println("No networks found."); display.display();
  } else {
    Serial.print(n);
    Serial.println(" networks found:");
    display.clearDisplay(); display.setCursor(3, 10); 
    display.print(n); display.println(" networks found."); display.display();
    for (int i = 0; i < n; ++i) {
      // Serial print SSID and signal strength for each network
      Serial.print(i + 1);
      Serial.print(": ");
      Serial.print(WiFi.SSID(i));
      Serial.print(" (");
      Serial.print(WiFi.RSSI(i));
      Serial.print(" dBm)");
      Serial.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN) ? " [Open]" : " [Secured]");
      //display SSID + signal
      display.print(WiFi.SSID(i));
      display.print(" (");
      display.print(WiFi.RSSI(i));
      display.println(" dBm)");
      display.display();
      delay(10);  // short delay for stable serial output
    }
  }
  delay(1000);
}