跳到主要内容

Wio Terminal Web 服务器

Wio Terminal Web 服务器

本文主要介绍 WebServer 库的使用,这意味着你可以将 Wio Terminal 变成一台 Web 服务器,让同一个局域网中的其他计算机运行浏览器访问该服务器,甚至可以实现从网页控制 Wio Terminal 上的硬件、读取传感器数据等等。

简单的 HelloServer 示例

下面是在 Wio Terminal 上设置一个 Web 服务器的简单示例。

提示:将下面代码中的 ssidpassword 替换成你的 WiFi 网络。

#include <rpcWiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>

const char *ssid = "yourNetwork";
const char *password = "yourPassword";

WebServer server(80);

const int led = 13;

void handleRoot() {
digitalWrite(led, 1);
server.send(200, "text/plain", "hello from Wio Terminal!");
digitalWrite(led, 0);
}

void handleNotFound() {
digitalWrite(led, 1);
String message = "File Not Found\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += (server.method() == HTTP_GET) ? "GET" : "POST";
message += "\nArguments: ";
message += server.args();
message += "\n";
for (uint8_t i = 0; i < server.args(); i++) {
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}
server.send(404, "text/plain", message);
digitalWrite(led, 0);
}

void setup(void) {
pinMode(led, OUTPUT);
digitalWrite(led, 0);
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);

// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());

server.on("/", handleRoot);

server.on("/inline", []() {
server.send(200, "text/plain", "this works as well");
});

server.onNotFound(handleNotFound);

server.begin();
Serial.println("HTTP server started");
}

void loop(void) {
server.handleClient();
}

使用同一网络的计算机,打开浏览器输入 Wio Terminal 的 IP 地址,即可访问该 Web 服务器。

身份验证 Web 服务器

下面这个示例设置了一个需要身份验证(Authentication)过程的 Web 服务器,这是出于安全目的的常见功能,在某些情况下非常有用。

提示:将下面代码中的 ssidpassword 替换成你的 WiFi 网络。

#include <rpcWiFi.h>
#include <WebServer.h>

const char *ssid = "yourNetwork";
const char *password = "yourPassword";

WebServer server(80);

const char* www_username = "admin";
const char* www_password = "password";

void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
if (WiFi.waitForConnectResult() != WL_CONNECTED) {
Serial.println("WiFi Connect Failed! Rebooting...");
delay(1000);
NVIC_SystemReset(); // Reset Wio Terminal
}

server.on("/", []() {
if (!server.authenticate(www_username, www_password)) {
return server.requestAuthentication();
}
server.send(200, "text/plain", "Login OK");
});
server.begin();

Serial.print("Open http://");
Serial.print(WiFi.localIP());
Serial.println("/ in your browser to see it working");
}

void loop() {
server.handleClient();
}

使用同一网络的计算机,打开浏览器输入 Wio Terminal 的 IP 地址,然后输入预设的用户名和密码登录。

Wio Terminal 身份验证 Web 服务器