
ESP8266 local WiFi scanner
[IoT] ESP8266 local WiFi scanner
The Challenge
Build a small WiFi scanner, which can run of a battery and display the found networks. Overtime it accumulates the max number of seen networks and displays a percentage of secure and insecure networks.
The Solution
We used an Adafruit Huzzad ESP8266 board and an Adafruit NeoPixel Ring with 16 RGB-LEDs. And some code and two AA-batteries and we are good to go.
Update: There are two more examples using the ESP8266 for WiFi scanning:
More information via a serial console
Mobile
Scan for networks, where ever you go.
Built with Arduino IDE
Easy coding via the Arduino IDE. We used a Linux based laptop to upload the compiled code.
Ratio of secure and insecure networks
Discover the more about your area.

The code:
#include <ESP8266WiFi.h>
#include <Adafruit_NeoPixel.h>
#define stripSize 16
#define stripPin 14
Adafruit_NeoPixel strip = Adafruit_NeoPixel( stripSize, stripPin, NEO_GRB + NEO_KHZ800 );
uint32_t red;
uint32_t blue;
uint32_t black;
uint32_t white;
uint32_t green;
int lumocity = 1;
uint32_t maxAPs = 0;
void allColor(uint32_t c) {
for (int i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, c);
}
strip.show();
}
void printEncryptionType(int thisType) {
// read the encryption type and print out the name:
switch (thisType) {
case ENC_TYPE_WEP:
Serial.println(“WEP”);
break;
case ENC_TYPE_TKIP:
Serial.println(“WPA”);
break;
case ENC_TYPE_CCMP:
Serial.println(“WPA2”);
break;
case ENC_TYPE_NONE:
Serial.println(“None”);
break;
case ENC_TYPE_AUTO:
Serial.println(“Auto”);
break;
}
}
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
strip.begin();
strip.show();
black = strip.Color(0, 0, 0);
red = strip.Color(pow(2, lumocity), 0, 0);
green = strip.Color(0, pow(2, lumocity), 0);
blue = strip.Color(0, 0, pow(2, lumocity));
white = strip.Color(pow(2, lumocity), pow(2, lumocity), pow(2, lumocity));
WiFi.mode(WIFI_STA);
WiFi.disconnect();
allColor(red);
delay(100);
Serial.println(“Setup done”);
allColor(black);
}
void loop() {
// put your main code here, to run repeatedly:
int n = WiFi.scanNetworks();
if ( n == 0 ) {
// Serial.println(“No networks found”);
allColor(black);
} else {
int secure = 0;
int unsecure = 0;
maxAPs = (maxAPs < n ) ? n : maxAPs;
for (int i = 0; i < n; i++) {
String ssid_scan;
int32_t rssi_scan;
uint8_t sec_scan;
uint8_t* BSSID_scan;
int32_t chan_scan;
bool hidden_scan;
WiFi.getNetworkInfo(i, ssid_scan, sec_scan, rssi_scan, BSSID_scan, chan_scan, hidden_scan);
// Print SSID and RSSI for each network found
Serial.print(“[“);
Serial.print(BSSID_scan[0], HEX);
Serial.print(“:”);
Serial.print(BSSID_scan[1], HEX);
Serial.print(“:”);
Serial.print(BSSID_scan[2], HEX);
Serial.print(“:”);
Serial.print(BSSID_scan[3], HEX);
Serial.print(“:”);
Serial.print(BSSID_scan[4], HEX);
Serial.print(“:”);
Serial.print(BSSID_scan[5], HEX);
Serial.print(“] “);
Serial.print(ssid_scan);
Serial.print(” (“);
Serial.print(rssi_scan);
Serial.print(” dBm) ch:”);
Serial.print(chan_scan);
Serial.print(” hid:”);
Serial.print(hidden_scan);
Serial.print(” crypt:”);
printEncryptionType(sec_scan);
(sec_scan == ENC_TYPE_NONE) ? unsecure++ : secure++;
}
int midpointAPs = ( stripSize * n / maxAPs );
int midpoint = ( stripSize * secure / maxAPs );
Serial.print(“# “);
Serial.print(n);
Serial.print(“/”);
Serial.print(maxAPs);
Serial.println(” networks found”);
allColor(black);
for (int i = 0; i < midpoint; i++) {
strip.setPixelColor(i, green);
}
for (int i = midpoint; i < midpointAPs; i++) {
strip.setPixelColor(i, red);
}
strip.show();
Serial.println(“#”);
}
delay(2000);
}
