WiFi 与 Arduino – 扫描网络
为了将WiFi与ArduinoUno或任何其他开发板一起使用,您可能需要一个WiFi扩展板(除非您使用的是具有内置WiFi功能的开发板,例如ArduinoUnoWiFi)。WiFi扩展板与任何其他扩展板一样,堆叠在您的板上,并提供对扩展板本身上Arduino引脚的访问。
您可以在此处阅读有关WiFi屏蔽的更多信息-
https://www.arduino.cc/en/pmwiki.php?n=Main/ArduinoWiFiShield
https://www.arduino.cc/en/Guide/ArduinoWiFiShield
假设你有一个WiFi盾牌,你需要WiFi库才能开始。您无需单独下载;它将内置在您的IDE中。如果你没有收到编译错误
#include
那么您的IDE包含该库。
在本文中,我们将介绍WiFi库的一个内置示例——扫描网络。代码可以在这里找到。
我们从包含SPI和WiFi库(SPI因为屏蔽使用SPI进行通信)开始。
#include#include
在设置中,我们检查屏蔽的存在,检查其固件版本,并打印其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");
}
//打印WiFiMAC地址:
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