Scansione e Connessione rete wifi con Arduino MKR1000

Arduino MKR1000, grazie alla sua scheda wifi, ci permette di analizzare quali connessioni wifi sono disponibili e di collegarci ad una di esse.
Per operare sul wifi Arduino necessita della libreria WiFi101.

Il programma di Scansione reti wifi proposto realizza una ricerca delle reti wifi disponibili riportandone sul Monitor Seriale i valori di SSID, RSSI e Protocollo di criptografia.

  • Scansione Reti WiFi disponibili

/*
 Questo programma fornisce un primo approccio all'utilizzo
 della scheda WiFi di Arduino MKR1000.
 Ogni 10s effettua una scansione delle connessioni wifi disponibili
 riportandone l'SSID, la potenza del segnale e il protocollo di criptografia.
*/

#include <WiFi101.h>

void setup() {
  Serial.begin(9600);
  while (!Serial) {
    ; // attende la apertura del Monitor Seriale
  }
}

void loop() {
  // fa la scansione delle reti esistenti:
  Serial.println("Scansione reti disponibili...");
  listNetworks();   // stampa l'elenco delle reti
  delay(10000);
}

void listNetworks() {
  // scansione delle reti disponibili:
  int numSsid = WiFi.scanNetworks();
  if (numSsid == -1)
  {
    Serial.println("Non ci sono reti disponibili");
    while (true);
  }
  // stampo l'elenco delle reti:
  Serial.print("Numero di reti wifi disponibili: ");
  Serial.println(numSsid);
  for (int thisNet = 0; thisNet < numSsid; thisNet++) {
    Serial.print(thisNet+1);
    Serial.print(") ");
    Serial.print(WiFi.SSID(thisNet));
    Serial.print("\tPotenza Segnale: ");
    Serial.print(WiFi.RSSI(thisNet));
    Serial.print(" dBm");
    Serial.print("\tCrittografia: ");
    printEncryptionType(WiFi.encryptionType(thisNet));
    Serial.flush();
  }
  Serial.print("\n");
}

void printEncryptionType(int thisType) {
  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;
  }
}

 

Il programma di Connessione ad una rete wifi conoscendone SSID e PASSWORD, realizza tale collegamento e, una volta effettuato, ne riporta sul Monitor Seriale i valori di SSID, IP Address assegnatogli dalla rete, RSSI e MAC Address della scheda wifi.

  • Connessione Rete WiFi

 /*
 Questo sketch realizza una connessione alla rete WiFi
 e ne stampa i dati sul Monitor Seriale
 */
 
#include <WiFi101.h>

char ssid[] = "telecom";   // SSID Network   
char pass[] = "dF3-y@7LXX";   // PASSWORD Network 
const int pinLED_CONNECTION = 6;           

int status = WL_IDLE_STATUS;

void setup() {    
  pinMode(pinLED_CONNECTION, OUTPUT); 
  digitalWrite(pinLED_CONNECTION, LOW);
  Serial.begin(9600);    
  while (!Serial) {
    ; // attende la apertura del Monitor Seriale
  }
  // attende il collegamento alla rete WiFi:
  while ( status != WL_CONNECTED) {
    Serial.print("In attesa del collegamento alla rete WiFi: ");
    Serial.println(ssid);                   //stampa a Monitor Seriale l'SSID di rete
    status = WiFi.begin(ssid, pass);        // connette alla rete WiFi con protocollo WPA/WPA2
    delay(10000);                           // attende 10 secondi che la connessione si realizzi
  }
  digitalWrite(pinLED_CONNECTION, HIGH);
  printWiFiStatus();                        // stampa lo stato della connessione sul Monitor Seriale
}

void loop() {
  ;
}

void printWiFiStatus() {
  // il MAC è un Array di valori
  byte mac[6];
  WiFi.macAddress(mac);
  Serial.print("MAC: ");
  Serial.print(mac[5], HEX);
  Serial.print(":");
  Serial.print(mac[4], HEX);
  Serial.print(":");
  Serial.print(mac[3], HEX);
  Serial.print(":");
  Serial.print(mac[2], HEX);
  Serial.print(":");
  Serial.print(mac[1], HEX);
  Serial.print(":");
  Serial.println(mac[0], HEX);
  // stampo l'SSID della rete a cui sono collegato:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());
  // stampo l'IP Address assegnato alla scheda wifi:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);
  // stampo la potenza del segnale wifi:
  long rssi = WiFi.RSSI();
  Serial.print("Potenza segnale (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
}

Link correlati: