當你將Arduino連接到網絡時,與之一起建立的電子設備將變得非常酷。

讓我們來看看如何將Arduino連接到WiFi網絡。

Arduino必須具備WiFi連接功能,例如我使用的Arduino MKR WiFi 1010,或者其他Arduino Uno WiFi Rev2等。

我們將使用庫WiFiNINA。這個庫非常方便,可以讓我們連接到WiFi網絡,還可以創建WiFi網絡。

在你的Arduino sketch中加入以下代碼:

#include <SPI.h>
#include <WiFiNINA.h>

WiFiNINA庫使用了SPI庫,因此也要加載SPI庫。SPI代表串行外設接口。

WiFiNINA庫為我們提供了訪問WiFi對象的功能,我們將使用它。

現在讓我們來編寫setup()函數的主體部分,這是我們需要實現的唯一的Arduino核心函數(我們將保持loop()函數空)。

void setup() {

}

首先,我們將定義兩個字符串變量來存儲網絡名稱(SSID)和網絡密碼。

我使用的是Arduino Create,所以我只是使用在Secret選項卡中單獨填充的常量。

char ssid[] = SECRET_SSID;
char pass[] = SECRET_PASS;

接下來,我們將初始化串口接口,以便將來自Arduino的信息傳回Arduino Create。

Serial.begin(9600);

然後,我們使用以下代碼等待串口就緒:

while (!Serial);

然後,我們將WiFi.begin()放入一個循環中,檢查其返回值是否為WL_CONNECTED,如果不是,則每隔2秒重試一次:

int status = WL_IDLE_STATUS;
while (status != WL_CONNECTED) {
 Serial.print("Connecting to ");
 Serial.println(ssid);
 status = WiFi.begin(ssid, pass);
 delay(2000);
}

首先,我們將其初始化為WL_IDLE_STATUS,這是WiFiNINA的另一個常量,但我們也可以將其初始化為空字符串。

一旦退出此循環,表示已成功連接,我們可以調用WiFi.localIP()方法獲取設備的IP地址並將其打印到串口:

Serial.print("IP address: ");
Serial.println(WiFi.localIP());

以下是完整的程式碼:

#include <SPI.h>
#include <WiFiNINA.h>

void setup() {
 char ssid[] = SECRET_SSID;
 char pass[] = SECRET_PASS;

 Serial.begin(9600);
 while (!Serial);

 int status = WL_IDLE_STATUS;
 while (status != WL_CONNECTED) {
 Serial.print("Connecting to ");
 Serial.println(ssid);
 status = WiFi.begin(ssid, pass);
 delay(5000);
 }

 Serial.print("IP address: ");
 Serial.println(WiFi.localIP());
}

void loop() {

}

你現在可以訪問其他信息,比如網絡的SSID可以使用WiFi.SSID()獲取,信號強度可以使用WiFi.RSSI()獲取:

Serial.print("Signal strength in dBm: ");
Serial.print(WiFi.RSSI());

到這一步,你已經連接成功,可以進行其他任務了。

注意:你可能可以升級NINA固件。在程式碼中添加以下檢查:

if (WiFi.firmwareVersion() < WIFI_FIRMWARE_LATEST_VERSION) {
 Serial.println("Firmware upgrade available");
}

如果有可用的固件升級,你可以使用Arduino IDE(我不知道如何從Arduino Create中執行此操作)連接到板子,然後加載範例程式碼 File -> Examples -> WiFiNINA -> Tools -> FirmwareUpdater

然後打開 Tools -> WiFi101 / WiFiNINA Firmware Updater 選單:

並點擊 Update Firmware 按鈕: