138 lines
3.2 KiB
Arduino
138 lines
3.2 KiB
Arduino
|
/*
|
||
|
This example prints the board's MAC address, and
|
||
|
scans for available WiFi networks using the NINA module.
|
||
|
Every ten seconds, it scans again. It doesn't actually
|
||
|
connect to any network, so no encryption scheme is specified.
|
||
|
BSSID and WiFi channel are printed
|
||
|
|
||
|
Circuit:
|
||
|
* Board with NINA module (Arduino MKR WiFi 1010, MKR VIDOR 4000 and UNO WiFi Rev.2)
|
||
|
|
||
|
This example is based on ScanNetworks
|
||
|
|
||
|
created 1 Mar 2017
|
||
|
by Arturo Guadalupi
|
||
|
*/
|
||
|
|
||
|
|
||
|
#include <SPI.h>
|
||
|
#include <WiFiNINA.h>
|
||
|
|
||
|
void setup() {
|
||
|
//Initialize serial and wait for port to open:
|
||
|
Serial.begin(9600);
|
||
|
while (!Serial) {
|
||
|
; // wait for serial port to connect. Needed for native USB port only
|
||
|
}
|
||
|
|
||
|
// check for the WiFi module:
|
||
|
if (WiFi.status() == WL_NO_MODULE) {
|
||
|
Serial.println("Communication with WiFi module failed!");
|
||
|
// don't continue
|
||
|
while (true);
|
||
|
}
|
||
|
|
||
|
String fv = WiFi.firmwareVersion();
|
||
|
if (fv < WIFI_FIRMWARE_LATEST_VERSION) {
|
||
|
Serial.println("Please upgrade the firmware");
|
||
|
}
|
||
|
|
||
|
// print your MAC address:
|
||
|
byte mac[6];
|
||
|
WiFi.macAddress(mac);
|
||
|
Serial.print("MAC: ");
|
||
|
printMacAddress(mac);
|
||
|
|
||
|
// scan for existing networks:
|
||
|
Serial.println();
|
||
|
Serial.println("Scanning available networks...");
|
||
|
listNetworks();
|
||
|
}
|
||
|
|
||
|
void loop() {
|
||
|
delay(10000);
|
||
|
// scan for existing networks:
|
||
|
Serial.println("Scanning available networks...");
|
||
|
listNetworks();
|
||
|
}
|
||
|
|
||
|
void listNetworks() {
|
||
|
// scan for nearby networks:
|
||
|
Serial.println("** Scan Networks **");
|
||
|
int numSsid = WiFi.scanNetworks();
|
||
|
if (numSsid == -1)
|
||
|
{
|
||
|
Serial.println("Couldn't get a WiFi connection");
|
||
|
while (true);
|
||
|
}
|
||
|
|
||
|
// print the list of networks seen:
|
||
|
Serial.print("number of available networks: ");
|
||
|
Serial.println(numSsid);
|
||
|
|
||
|
// print the network number and name for each network found:
|
||
|
for (int thisNet = 0; thisNet < numSsid; thisNet++) {
|
||
|
Serial.print(thisNet + 1);
|
||
|
Serial.print(") ");
|
||
|
Serial.print("Signal: ");
|
||
|
Serial.print(WiFi.RSSI(thisNet));
|
||
|
Serial.print(" dBm");
|
||
|
Serial.print("\tChannel: ");
|
||
|
Serial.print(WiFi.channel(thisNet));
|
||
|
byte bssid[6];
|
||
|
Serial.print("\t\tBSSID: ");
|
||
|
printMacAddress(WiFi.BSSID(thisNet, bssid));
|
||
|
Serial.print("\tEncryption: ");
|
||
|
printEncryptionType(WiFi.encryptionType(thisNet));
|
||
|
Serial.print("\t\tSSID: ");
|
||
|
Serial.println(WiFi.SSID(thisNet));
|
||
|
Serial.flush();
|
||
|
}
|
||
|
Serial.println();
|
||
|
}
|
||
|
|
||
|
void printEncryptionType(int thisType) {
|
||
|
// read the encryption type and print out the name:
|
||
|
switch (thisType) {
|
||
|
case ENC_TYPE_WEP:
|
||
|
Serial.print("WEP");
|
||
|
break;
|
||
|
case ENC_TYPE_TKIP:
|
||
|
Serial.print("WPA");
|
||
|
break;
|
||
|
case ENC_TYPE_CCMP:
|
||
|
Serial.print("WPA2");
|
||
|
break;
|
||
|
case ENC_TYPE_NONE:
|
||
|
Serial.print("None");
|
||
|
break;
|
||
|
case ENC_TYPE_AUTO:
|
||
|
Serial.print("Auto");
|
||
|
break;
|
||
|
case ENC_TYPE_UNKNOWN:
|
||
|
default:
|
||
|
Serial.print("Unknown");
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void print2Digits(byte thisByte) {
|
||
|
if (thisByte < 0xF) {
|
||
|
Serial.print("0");
|
||
|
}
|
||
|
Serial.print(thisByte, HEX);
|
||
|
}
|
||
|
|
||
|
void printMacAddress(byte mac[]) {
|
||
|
for (int i = 5; i >= 0; i--) {
|
||
|
if (mac[i] < 16) {
|
||
|
Serial.print("0");
|
||
|
}
|
||
|
Serial.print(mac[i], HEX);
|
||
|
if (i > 0) {
|
||
|
Serial.print(":");
|
||
|
}
|
||
|
}
|
||
|
Serial.println();
|
||
|
}
|