Wio Terminal 无线 WiFi 配置
本文主要介绍 Wio Terminal 的 WiFi 功能,并演示如何使用 SeeedStudio 的 Arduino 库来配置 WiFi 工作模式和建立无线连接。
Wio Terminal 配备的无线网卡是 Realtek RTL8720,在开始本次学习之前,请确保你已经阅读 Wio Terminal 网卡固件更新,并完成固件更新和 Arduino 依赖库的安装。
我们知道,WiFi 有两种工作模式:AP 模式和 STA 模式。
- AP(Access Point)也就是无线接入点,是一个无线网络的创建者,是网络的中心节点。一般家庭或办公室使用的无线路由器就一个 AP。
- STA(Station)也就是站点,每一个连接到无线网络中的终端(如笔记本电脑、PDA 及其它可以联网的用户设备)都可称为一个站点。
本文会分别介绍 STA 和 AP 模式的使用情况。
配置为 STA 模式
Wio Terminal 的 Wi-Fi 配置依赖 rpcWiFi 库,所以需要在 Arduino 中 添加 rpcWifi.h
头文件,然后就可以通过下面代码将无线网卡配置为 STA 模式。
WiFi.mode(WIFI_STA);
扫描 Wi-Fi 网络
下面示例将 Wio Terminal 配置为 Wi-Fi STA 模式,然后扫描所有可用的 WiFi 接入网络,并将其打印到串口监视器。
#include "rpcWiFi.h"
void setup() {
Serial.begin(115200);
while(!Serial); // Wait for Serial to be ready
delay(1000);
// Set WiFi to station mode and disconnect from an AP if it was previously connected
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
Serial.println("Setup done");
}
void loop() {
Serial.println("scan start");
// WiFi.scanNetworks will return the number of networks found
int n = WiFi.scanNetworks();
Serial.println("scan done");
if (n == 0) {
Serial.println("no networks found");
} else {
Serial.print(n);
Serial.println(" networks found");
for (int i = 0; i < n; ++i) {
// Print SSID and RSSI for each network found
Serial.print(i + 1);
Serial.print(": ");
Serial.print(WiFi.SSID(i));
Serial.print(" (");
Serial.print(WiFi.RSSI(i));
Serial.print(")");
Serial.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN) ? " " : "*");
delay(10);
}
}
Serial.println("");
// Wait a bit before scanning again
delay(5000);
}
连接 Wi-Fi 网络
下面示例将 Wio Terminal 连接到指定的 WiFi 网络。(需要将 ssid
和 password
修改为你的 WiFi 网络)
#include "rpcWiFi.h"
const char* ssid = "yourNetworkName";
const char* password = "yourNetworkPassword";
void setup() {
Serial.begin(115200);
while(!Serial); // Wait for Serial to be ready
// Set WiFi to station mode and disconnect from an AP if it was previously connected
WiFi.mode(WIFI_STA);
WiFi.disconnect();
Serial.println("Connecting to WiFi..");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Connecting to WiFi..");
WiFi.begin(ssid, password);
}
Serial.println("Connected to the WiFi network");
Serial.print("IP Address: ");
Serial.println (WiFi.localIP()); // prints out the device's IP address
}
void loop() {
}
Wi-Fi 多连接示例
有时候我们需要配置多个 WiFi 连接信息,以便设备自动扫描并连接最佳的 WiFi 网络。在 Wio Terminal 中,我们可以使用 WiFiMulti
类来达到这个目的。
wifiMulti.addAP("ssid", "password");
只需要将多个 AP(WiFi 接入点)添加到列表中,wifiMulti.run()
将尝试连接到信号最好的 WiFi。
注意:记得根据你的网络情况修改 SSID
和 Password
参数。
#include "rpcWiFi.h"
#include <WiFiMulti.h>
WiFiMulti wifiMulti;
void setup() {
Serial.begin(115200);
while(!Serial); // Wait for Serial to be ready
delay(1000);
wifiMulti.addAP("ssid_from_AP_1", "your_password_for_AP_1");
wifiMulti.addAP("ssid_from_AP_2", "your_password_for_AP_2");
wifiMulti.addAP("ssid_from_AP_3", "your_password_for_AP_3");
Serial.println("Connecting Wifi...");
if (wifiMulti.run() == WL_CONNECTED) {
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
}
void loop() {
if (wifiMulti.run() != WL_CONNECTED) {
Serial.println("WiFi not connected!");
delay(1000);
}
}