arduino_uno_with_wifi_mac_addr.ino

// ==================================================================
// Scan Networks Advanced
//  This example scans for 802.11b/g network with one of the boards
//  that support this library. Your Arduino Software (IDE) serial
//  monitor will print out information about the board and the
//  networks it can see, with the encryption type. It will not
//  connect to a network.
// From: 
// https://www.arduino.cc/en/Tutorial/LibraryExamples/WiFiNINAScanNetworksAdvanced
// ==================================================================
/*
  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>

// ------------------------------------------------------------------
// ---- setup
// ------------------------------------------------------------------

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

// ------------------------------------------------------------------
// ---- loop
// ------------------------------------------------------------------

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