WiFi 与 Arduino – 扫描网络

为了将 WiFi 与 Arduino Uno 或任何其他开发板一起使用,您可能需要一个 WiFi 扩展板(除非您使用的是具有内置 WiFi 功能的开发板,例如 Arduino Uno WiFi)。WiFi 扩展板与任何其他扩展板一样,堆叠在您的板上,并提供对扩展板本身上 Arduino 引脚的访问。

您可以在此处阅读有关 WiFi 屏蔽的更多信息 -

  • https://www.arduino.cc/en/pmwiki.php?n=Main/ArduinoWiFiShield

  • https://www.arduino.cc/en/Guide/ArduinoWiFiShield

假设你有一个 WiFi 盾牌,你需要 WiFi 库才能开始。您无需单独下载;它将内置在您的 IDE 中。如果你没有收到编译错误

#include <WiFi.h>

那么您的 IDE 包含该库。

在本文中,我们将介绍WiFi 库的一个内置示例——扫描网络。代码可以在这里找到。

我们从包含 SPI 和 WiFi 库(SPI 因为屏蔽使用 SPI 进行通信)开始。

#include <SPI.h>

#include <WiFi.h>

在设置中,我们检查屏蔽的存在,检查其固件版本,并打印其 MAC 地址,

void setup() {

   //初始化串口并等待端口打开:

   Serial.begin(9600);

   while (!Serial) {

      ; //等待串口连接。仅本地 USB 端口需要

   }

   // 检查盾牌的存在:

   if (WiFi.status() == WL_NO_SHIELD) {

      Serial.println("WiFi shield not present");

      // 不要继续:

      while (true);

   }

   String fv = WiFi.firmwareVersion();

   if (fv != "1.1.0") {

      Serial.println("Please upgrade the firmware");

   }

   // 打印 WiFi MAC 地址:

   printMacAddress();

}

该printMacAddress()功能将在后面介绍。

在循环中,我们只是每 10 秒列出一次所有网络。

void loop() {

   // 扫描现有网络:

   Serial.println("正在扫描可用网络...");

   listNetworks();

   delay(10000);

}

现在,printMacAddress函数简单地使用该函数将macAddress复制到一个 6 字节的数组中,然后逐字节打印出值。WiFi.macAddress()

void printMacAddress() {

   // 您的 Wifi 屏蔽的 MAC 地址

   byte mac[6];

   // 打印您的 MAC 地址:

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

}

该listNetworks()功能使得使用的功能。如果此函数未找到 SSID,则返回 -1,否则返回找到的 SSID 数。SSID 的值、它们的信号强度指示符、RSSI 和它们的加密类型可以使用、和分别为每个网络获得。WiFi.scanNetworks()WiFi.SSID()WiFi.RSSI()WiFi.encryptionType()

void listNetworks() {

   // 扫描附近的网络:

   Serial.println("** Scan Networks **");

   int numSsid = WiFi.scanNetworks();

   if (numSsid == -1) {

      Serial.println("Couldn't get a wifi connection");

      while (true);

   }

   // 打印看到的网络列表:

   Serial.print("可用网络数量:");

   Serial.println(numSsid);

   // 打印找到的每个网络的网络号和名称:

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

   }

}

该printEncryptionType函数基本上是一个开关的情况下,打印出的加密类型的文本,根据传递的数值。

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;

   }

}

有关 WiFi 库的更多信息,请参阅https://www.arduino.cc/en/Reference/WiFi

以上是 WiFi 与 Arduino – 扫描网络 的全部内容, 来源链接: utcz.com/z/349163.html

回到顶部