シンプルなWebサーバーを動かす

シンプルな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 で操作します。
    1. まずはカレントディレクトリを解凍したフォルダに移動します
      例:cd d:\ambd_flash_tool-master
    2. 次のコマンドを入力して初期ファームウエアを削除します。
      例:.\ambd_flash_tool.exe erase
      注1:最初に点があることに注意
      注2:Arduino IDEを起動して Wio Terminal が接続されていると失敗します。
    3. 少々時間がかかります。(数分)
      緑色で Success! と表示されます。
    4. 次のコマンドを入力して、最新のファームウエアをフラッシュします。
      例:.\ambd_flash_tool.exe flash
      Wio Terminal の液晶に「Burn RTL8720 fw」と表示されます。
    5. 少々時間がかかります。(数分)
      緑色で Success! と表示されます。
    6. Power Shell を閉じます。
    7. 次のコードを書き込んで確認できます。
      ※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() {
      }
    8. 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できます。
LED制御のサンプルコード
#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();
}