當你將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
按鈕: