シンプルなWebサーバーを動かす
はじめに
- https://lab.seeed.co.jp/entry/2021/05/11/120000
- eRPCファームウェア用のライブラリ「Seeed_Arduino_rpcWiFi」には、WebServerクラスを収録しています。 このライブラリを使うことでシンプルなWebServerを実装することができます。 今回はLEDを点灯・消灯することができる簡易なサーバーを実装してみました。
ファームウェアのアップデート
- ファームウェアのアップデート
https://wiki.seeedstudio.com/Wio-Terminal-Network-Overview/ - またはここからダウンロードする
https://github.com/Seeed-Studio/ambd_flash_tool コピー - 以下の通りに Windows の PowerShell で操作します。
- まずはカレントディレクトリを解凍したフォルダに移動します
例:cd d:\ambd_flash_tool-master - 次のコマンドを入力して初期ファームウエアを削除します。
例:.\ambd_flash_tool.exe erase
注1:最初に点があることに注意
注2:Arduino IDEを起動して Wio Terminal が接続されていると失敗します。 - 少々時間がかかります。(数分)
緑色で Success! と表示されます。 - 次のコマンドを入力して、最新のファームウエアをフラッシュします。
例:.\ambd_flash_tool.exe flash
Wio Terminal の液晶に「Burn RTL8720 fw」と表示されます。 - 少々時間がかかります。(数分)
緑色で Success! と表示されます。 - Power Shell を閉じます。
- 次のコードを書き込んで確認できます。
※rpcWiFi.hライブラリがない場合は、ライブラリマネージャーからrpcWiFiを検索してインストールしてください。
#include "rpcWiFi.h" void setup() { Serial.begin(115200); while(!Serial); // Wait to open Serial Monitor Serial.printf("RTL8720 Firmware Version: %s", rpc_system_version()); } void loop() { } - Serial Monitorを開くと、ファームウェアのバージョンが表示されるはずです。
setupに書かれているので、起動時1回しか表示されません。
Wio Tarminalをつなぎっぱなしの場合は、シリアルモニタを起動してから Wio Terminal の電源を入れなおしてください。
2023/12/10現在は、RTL8720 Firmware Version:2.1.3 と表示されました。 - Seeed SAMD ArduinoCore を最新バージョン にアップデートします。
ボードマネージャで Wio Terminal を検索して、Seeed SAMD Boards のバージョンを確認してください。(2023/12/10現在は最新バージョンが 1.8.5 でした)
もし、古いバージョンである場合は、新しいバージョンをインストールします。 - ワイヤレス接続に必要な Arduino ライブラリをインストールします。
ライブラリマネージャーで下記のライブラリをインストールします。
※rpcwifi をインストールするだけで、すべてのライブラリがインストールされます。- Seeed_Arduino_rpcWiFi
- Seeed_Arduino_rpcUnified
- Seeed_Arduino_mbedtls
- Seeed_Arduino_FS
- Seeed_Arduino_SFUD
WiFiに接続
- 下記サンプルコードの"ssid"と"password"は利用するネットワークに合わせて変更が必要になります。
- 接続の可否
接続可 2.4GHz WPA2-PSK
接続可 5GHz WPA2-PSK
WPA3-SAEはつながりませんでした。 - Wio Terminalに書き込んで実行すると、IPアドレスが表示されるのでアクセスしてみます。

- Webブラウザでアクセスすると、下図のような表示になります。 「LED ON」、「LED OFF」ボタンをクリックすることで、Wio TerminalのLEDをON/OFFできます。
#include <TFT_eSPI.h>
TFT_eSPI tft;
#include <rpcWiFi.h>
#include <WebServer.h>
WebServer server(80);
const char* ssid = "your-network-name";
const char* password = "your-network-password";
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
tft.begin();
tft.setRotation(3);
tft.fillScreen(TFT_BLACK);
tft.setTextFont(2);
tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.print("Connecting to ");
tft.print(ssid);
tft.print(" .. ");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED);
tft.println("OK");
tft.print("IP Address: ");
tft.println(WiFi.localIP());
server.on("/", []() {
tft.setTextFont(4);
tft.setTextColor(TFT_GREEN, TFT_BLACK);
tft.setTextDatum(MC_DATUM);
String action = server.arg("action");
if (action == "LED ON") {
digitalWrite(LED_BUILTIN, HIGH);
tft.drawString(" ON ", tft.width() / 2, tft.height() / 2);
} else {
digitalWrite(LED_BUILTIN, LOW);
tft.drawString(" OFF ", tft.width() / 2, tft.height() / 2);
}
String message = "<html><head></head><body>";
message += "<h1>Wio Terminal</h1>";
message += "<form action='/' method='POST'>";
message += " <input type='submit' name='action' value='LED ON'>";
message += "</form>";
message += "<form action='/' method='POST'>";
message += " <input type='submit' name='action' value='LED OFF'>";
message += "</form>";
message += "</body></html>";
server.send(200, "text/html", message);
});
server.begin();
}
void loop() {
server.handleClient();
}