Eine großartige Funktion des Arduino UNO WiFi Rev2 ist die Möglichkeit, nahegelegene WLAN-Netzwerke zu scannen. Dies geschieht mit dem NINA-W102-Funkmodul, und in diesem Tutorial werden wir einige einfache Schritte ausführen, damit dies funktioniert.
Ziele dieses Projekts ist:
- Scannen die umliegende Netzwerke.
- Liste die verfügbare Netzwerke im Serial Monitor auf.
- Lass weitere zusätzliche Informationen zu diesen Netzwerken anzeigen.
Benötigte Hardware & Software
- Arduino-IDE (online oder offline)
- WiFiNINA-Bibliothek
- Arduino UNO WiFi Rev2 (Link zum Shop)
Scannen von Netzwerken
Das Scannen nach Wi-Fi-Netzwerken ist ein recht einfacher Vorgang. Ein Gerät mit einem Wi-Fi-Modul wie Smartphones, Computer oder Entwicklungsboards wie das Arduino UNO WiFi Rev2 durchsuchen seine Umgebung und erhalten eine Antwort von nahegelegenen Netzwerken.
Das Gerät, das nach einem Netzwerk oder dem Client sucht, sendet eine Probe-Anfrage, während nahegelegene Netzwerke Probe-Antworten senden. Diese Antworten enthalten Informationen wie den Namen des Netzwerks, die Signalstärke in dBm (Dezibel Milliwatt) und den Verschlüsselungstyp.
Programmierung des Boards
- Zuerst müssen wir sicherstellen, dass die Abhängigkeiten installiert sind. Für dieses Tutorial müssen wir die WiFiNINA-Bibliothek installieren. Wenn wir den Offline-Editor verwenden, finden wir diese Bibliothek unter Extras > Bibliotheken verwalten…. Wenn wir den Web-Editor verwenden, ist er bereits installiert.
- Wenn wir den Offline-Editor verwenden, müssen wir sicherstellen, dass die Treiber für das Arduino UNO WiFi Rev2-Board installiert sind. Navigieren Sie im Editor zu Tools > Board > Board Manager… und installieren Sie den Arduino avrMEGA Boards-Kern.
- Werfen wir nun einen Blick auf einige der Kernfunktionen der Skizze, die wir verwenden werden.
WiFi.macAddress() – erhält die MAC-Adresse der Karte.
WiFi.scanNetworks() – sucht nach Netzwerken in der Nähe.
WiFi.encryptionType() – Ruft den Verschlüsselungstyp des gefundenen Netzwerks ab.
WiFi.SSID() – ruft die SSID (Netzwerkname) des gefundenen Netzwerks ab.
WiFi.RSSI() – ruft RSSI (Signalstärke) des gefundenen Netzwerks ab (gemessen in dBm).
Wir können nun den Code, der im folgenden Snippet zu finden ist, auf unser Arduino UNO WiFi Rev2 Board hochladen.[/vc_column_text]
#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); } void loop() { // scan for existing networks: Serial.println("Scanning available networks..."); listNetworks(); delay(10000); } 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); Serial.print(") "); Serial.print(WiFi.SSID(thisNet)); Serial.print("\tSignal: "); Serial.print(WiFi.RSSI(thisNet)); Serial.print(" dBm"); Serial.print("\tEncryption: "); printEncryptionType(WiFi.encryptionType(thisNet)); } } void printEncryptionType(int thisType) { // read the encryption type and print out the title: 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; case ENC_TYPE_UNKNOWN: default: Serial.println("Unknown"); break; } } 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(); }
Auflistung aller verfügbaren Netzwerke im Serial Monitor.
Aber wenn wir uns die anderen Netzwerke ansehen, können wir sehen, dass das Signal bis auf -94 dBm absinkt, was sehr schwach ist. Wenn wir versuchen würden, einen Computer mit diesem Netzwerk zu verbinden, würde dies höchstwahrscheinlich fehlschlagen.
Router mit entsprechender Signalstärke.
- Wir haben die WiFiNINA-Bibliothek nicht installiert.
- Wir haben die Treiber für das Arduino UNO WiFi Rev2 nicht installiert
- Wir haben nicht den richtigen Port ausgewählt.