というわけで、ESP32の非同期 Webサーバーライブラリ ESPAsyncWebServer の実験。導入手順は以下が詳しいので参考にさせてもらった。
ESP32でWebサーバーを立てよう
但しこれは ESP32自体をルーターとして動作させ、その中に Webサーバーを置く形になるので注意が必要だ(私は最初、家庭内のルーターに接続させるものと誤解していた)。また前記事ではスケッチ内で HTMLを生成していたが、今回のものは ESP32のフラッシュメモリに HTMLファイルを書き込む形となる。手順はその分増えるが、スケッチと HTMLを分離出来るのでメンテ面では楽になる。
概略手順は以下の通り
- ライブラリのインストール(ESPAsyncWebServer, AsyncTCP, Sketch data upload)
- スケッチ及び HTML類の準備
- ESP32にスケッチ及び HTML類を書き込み
- PC(又はスマホ等)を ESP32に Wi-Fi接続
- ブラウザで動作確認
[ スケッチ:Esp32_AsyncWebServer ]
// ESP32 を Wi-Fiルーターとして動かす
// Hello World!
#include <WiFi.h>
#include "ESPAsyncWebServer.h"
#include "SPIFFS.h"
const char ssid[] = "ESP32AP-TEST"; // ここは家庭内ルーターIDでなく任意
const char pass[] = "12345678"; // パスワードは8文字以上
const IPAddress ip(192,168,3,17);
const IPAddress gateway(192,168,1,1); // デフォルトゲートウェイ
const IPAddress subnet(255,255,255,0);
AsyncWebServer server(80); // ポート設定
void setup()
{
Serial.begin(115200);
// SPIFFSのセットアップ
if(!SPIFFS.begin(true)){
Serial.println("An Error has occurred while mounting SPIFFS");
return;
}
WiFi.softAP(ssid, pass); // SSIDとパスの設定
delay(100); // このdelayを入れないと失敗する場合がある
WiFi.softAPConfig(ip, ip, subnet); // IPアドレス、ゲートウェイ、サブネットマスクの設定
IPAddress myIP = WiFi.softAPIP(); // WiFi.softAPIP()でWiFi起動
// 各種情報を表示
Serial.print("SSID: ");
Serial.println(ssid);
Serial.print("AP IP address: ");
Serial.println(myIP);
// GETリクエストに対するハンドラーを登録
// rootにアクセスされた時のレスポンス
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(SPIFFS, "/index.html");
});
// style.cssにアクセスされた時のレスポンス
server.on("/style.css", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(SPIFFS, "/style.css", "text/css");
});
// サーバースタート
server.begin();
Serial.println("Server start!");
}
void loop() {}
index.html、style.css は記事の通り
ESP32に書き込みが完了したら、PC(又はスマホ等)の Wi-Fi設定から上記ssid,passで接続し、ブラウザでIPアドレスのページを表示すると以下のようになる。
このソフトAP方式は ESP32自体をルーターに仕立てるので、自宅外で Wi-Fi環境の無い場所で運転する際などには有用と思われる。