带有 Arduino 的 WiFi – 连接到网络
为了将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库的一个内置示例-ConnectwithWPA.You可以在此处找到示例。
您遇到的大多数网络都具有WPA2加密。如果您使用手机创建热点字段,您通常会选择WPA2加密并设置密码。
我们从包含SPI和WiFi库(SPI因为屏蔽使用SPI进行通信)开始。
#include#include
接下来,我们定义一些全局变量,包括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() {
//Initializeserialandwaitforporttoopen:
Serial.begin(9600);
while (!Serial) {
; //waitforserialporttoconnect.NeededfornativeUSBportonly
}
//checkforthepresenceoftheshield:
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("WiFi shield not present");
//don'tcontinue:
while (true);
}
String fv = WiFi.firmwareVersion();
if (fv != "1.1.0") {
Serial.println("Please upgrade the firmware");
}
//attempttoconnecttoWifinetwork:
while (status != WL_CONNECTED) {
Serial.print("AttemptingtoconnecttoWPASSID: ");
Serial.println(ssid);
//ConnecttoWPA/WPA2network:
status = WiFi.begin(ssid, pass);
//wait10secondsforconnection:
delay(10000);
}
//you'reconnectednow,soprintoutthedata:
Serial.print("You're connected to the network");
printCurrentNet();
printWifiData();
}
void loop() {
//checkthenetworkconnectiononceevery10seconds:
delay(10000);
printCurrentNet();
}
void printWifiData() {
//printyourWiFishield'sIPAddress:
IPAddress ip = WiFi.localIP();
Serial.print("IPAddress: ");
Serial.println(ip);
Serial.println(ip);
//printyourMACaddress:
byte mac[6];
WiFi.macAddress(mac);
Serial.print("MACaddress: ");
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() {
//printtheSSIDofthenetworkyou'reattachedto:
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
//printtheMACaddressoftherouteryou'reattachedto:
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);
//printthereceivedsignalstrength:
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):");
Serial.println(rssi);
//printtheEncryptionType:
byte encryption = WiFi.encryptionType();
Serial.print("EncryptionType:");
Serial.println(encryption, HEX);
Serial.println();
}注意WiFi和路由器的MAC地址(和)存储在6字节数组中,每个字节都以十六进制格式一一打印出来。两者之间的区别在于,为您提供设备的MAC地址(带有WiFi扩展板的Arduino),而为您提供路由器的MAC地址或设备所连接的接入点。WiFi.macAddress()WiFi.BSSID()WiFi.macAddress()WiFi.BSSID()