带有 Arduino 的 WiFi – 连接到网络

为了将 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 库的一个内置示例 - Connect withWPA.You可以在此处找到示例。

您遇到的大多数网络都具有 WPA2 加密。如果您使用手机创建热点字段,您通常会选择 WPA2 加密并设置密码。

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

#include <SPI.h>

#include <WiFi.h>

接下来,我们定义一些全局变量,包括 SSID、您打算将 Arduino 连接到的网络的密码以及一个状态int。

char ssid[] = "yourNetwork";     // 您的网络 SSID(名称)

char pass[] = "secretPassword";  // 你的网络密码

int status = WL_IDLE_STATUS;    // the Wifi radio's status

在设置中,我们执行以下操作 -

  • 初始化串口

  • 检查 WiFi 屏蔽是否存在

  • 检查屏蔽的fw_version是否正确或需要升级

  • 尝试连接到网络使用 WiFi.begin()

  • 连接后,打印网络的详细信息(SSID、BSSID(路由器的 MAC 地址)、信号强度或 RSSI 以及加密类型),使用 printCurrentNet()

  • 此外,使用打印 WiFi 详细信息(本地 IP 和 MAC 地址) printWifiData()

在循环中,我们每 10 秒使用一次保存网络详细信息 printCurrentNet()

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 presence of the shield:

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

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

      // don't continue:

      while (true);

   }

   String fv = WiFi.firmwareVersion();

   if (fv != "1.1.0") {

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

   }

   // attempt to connect to Wifi network:

   while (status != WL_CONNECTED) {

      Serial.print("Attempting to connect to WPA SSID: ");

      Serial.println(ssid);

      // Connect to WPA/WPA2 network:

      status = WiFi.begin(ssid, pass);

      // wait 10 seconds for connection:

      delay(10000);

   }

   // you're connected now, so print out the data:

   Serial.print("You're connected to the network");

   printCurrentNet();

   printWifiData();

}

void loop() {

   // check the network connection once every 10 seconds:

   delay(10000);

   printCurrentNet();

}

void printWifiData() {

   // print your WiFi shield's IP Address:

   IPAddress ip = WiFi.localIP();

   Serial.print("IP Address: ");

   Serial.println(ip);

   Serial.println(ip);

   // print your MAC address:

   byte mac[6];

   WiFi.macAddress(mac);

   Serial.print("MAC address: ");

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

}

void printCurrentNet() {

   // print the SSID of the network you're attached to:

   Serial.print("SSID: ");

   Serial.println(WiFi.SSID());

   // print the MAC address of the router you're attached to:

   byte bssid[6];

   WiFi.BSSID(bssid);

   Serial.print("BSSID: ");

   Serial.print(bssid[5], HEX);

   Serial.print(":");

   Serial.print(bssid[4], HEX);

   Serial.print(":");

   Serial.print(bssid[3], HEX);

   Serial.print(":");

   Serial.print(bssid[2], HEX);

   Serial.print(":");

   Serial.print(bssid[1], HEX);

   Serial.print(":");

   Serial.println(bssid[0], HEX);

   // print the received signal strength:

   long rssi = WiFi.RSSI();

   Serial.print("signal strength (RSSI):");

   Serial.println(rssi);

   // print the Encryption Type:

   byte encryption = WiFi.encryptionType();

   Serial.print("Encryption Type:");

   Serial.println(encryption, HEX);

   Serial.println();

}

注意WiFi和路由器的MAC地址(和)存储在6字节数组中,每个字节都以十六进制格式一一打印出来。两者之间的区别在于,为您提供设备的 MAC 地址(带有 WiFi扩展板的 Arduino),而为您提供路由器的 MAC 地址或设备所连接的接入点。WiFi.macAddress()WiFi.BSSID()WiFi.macAddress()WiFi.BSSID()

以上是 带有 Arduino 的 WiFi – 连接到网络 的全部内容, 来源链接: utcz.com/z/353635.html

回到顶部