如何使用Arduino连接到WiFi网络

623 阅读2分钟

你用Arduino建造的电子设备,当你把它们连接到网络上时,就开始变得非常酷了。

让我们看看如何将Arduino连接到WiFi网络。

Arduino必须有WiFi连接,例如我使用的Arduino MKR WiFi 1010,或者Arduino Uno WiFi Rev2和其他。

我们将使用这个库 WiFiNINA.这个库超级方便,可以让我们连接到WiFi网络,如果我们愿意,还可以创建一个WiFi网络。

启动你的Arduino草图,使用:

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

SPI库被WiFiNINA库使用,所以也要加载它。SPI是串行外设接口的缩写

WiFiNINA 库使我们能够访问我们要使用的WiFi 对象,以及其他东西。

现在让我们来处理setup() 函数的主体,这是我们要实现的唯一的Arduino核心函数(我们将把loop() 留空)。

首先,我们要定义2个字符串来保存网络名称、SSID和网络密码。

我使用Arduino Create,所以我只是使用常数,我将在Secret 标签中单独填写。

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

接下来我们要初始化串行接口,将信息从Arduino传回Arduino Create。

然后我们等待,直到它准备好使用

接下来我们把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() {

}

你现在可以获得其他信息,比如用WiFi.SSID() 获取网络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 按钮。