ESPAsyncWebServerの使い方

技術関連

ESPAsyncWebServer自体は問題ないと思うのだが、ライブラリが古いとエラーが出るらしい。

エラーはこちら

d:\mydoc\Arduino\libraries\ESPAsyncWebServer\src\WebAuthentication.cpp: In function 'bool getMD5(uint8_t*, uint16_t, char*)':
d:\mydoc\Arduino\libraries\ESPAsyncWebServer\src\WebAuthentication.cpp:74:3: error: 'mbedtls_md5_starts_ret' was not declared in this scope; did you mean 'mbedtls_md5_starts'?
   74 |   mbedtls_md5_starts_ret(&_ctx);
      |   ^~~~~~~~~~~~~~~~~~~~~~
      |   mbedtls_md5_starts
d:\mydoc\Arduino\libraries\ESPAsyncWebServer\src\WebAuthentication.cpp:75:3: error: 'mbedtls_md5_update_ret' was not declared in this scope; did you mean 'mbedtls_md5_update'?
   75 |   mbedtls_md5_update_ret(&_ctx, data, len);
      |   ^~~~~~~~~~~~~~~~~~~~~~
      |   mbedtls_md5_update
d:\mydoc\Arduino\libraries\ESPAsyncWebServer\src\WebAuthentication.cpp:76:3: error: 'mbedtls_md5_finish_ret' was not declared in this scope; did you mean 'mbedtls_md5_finish'?
   76 |   mbedtls_md5_finish_ret(&_ctx, _buf);
      |   ^~~~~~~~~~~~~~~~~~~~~~
      |   mbedtls_md5_finish
Multiple libraries were found for "ESPAsyncWebServer.h"
  Used: D:\mydoc\Arduino\libraries\ESPAsyncWebServer
  Not used: D:\mydoc\Arduino\libraries\ESP_Async_WebServer
exit status 1

Compilation error: exit status 1

解決法

方法: 新しいフォーク版を使う(推奨)

古いライブラリを削除して、メンテナンスされている新しいバージョンをインストールします。

  1. Arduino IDEのライブラリマネージャーからESPAsyncWebServerとAsyncTCPを削除
  2. 以下のGitHubから新しいバージョンをZIPでダウンロード
https://github.com/mathieucarbou/ESPAsyncWebServer
GitHub - mathieucarbou/AsyncTCP: Async TCP Library for ESP32
Async TCP Library for ESP32. Contribute to mathieucarbou/AsyncTCP development by creating an account on GitHub.
  1. Arduino IDEで「スケッチ」→「ライブラリをインクルード」→「.ZIP形式のライブラリをインストール」

解決しない場合

古いライブラリが残っていて、そちらが使われています。

Used: D:\mydoc\Arduino\libraries\ESPAsyncWebServer        ← 古い方が使われている
Not used: D:\mydoc\Arduino\libraries\ESP_Async_WebServer  ← 新しい方

解決手順

  1. Arduino IDEを閉じる
  2. 以下のフォルダを削除してください
D:\mydoc\Arduino\libraries\ESPAsyncWebServer
D:\mydoc\Arduino\libraries\AsyncTCP
  1. 新しい方のフォルダ名を確認
D:\mydoc\Arduino\libraries\ESP_Async_WebServer  ← これが残っていればOK
D:\mydoc\Arduino\libraries\AsyncTCP            ← 新しい版があるか確認
  1. AsyncTCPも新しい版をインストール(まだなら)
https://github.com/mathieucarbou/AsyncTCP

こちらからZIPをダウンロードして同様にインストール

  1. Arduino IDEを再起動してコンパイル

古いフォルダを削除すれば新しいESP_Async_WebServerが使われるようになります。

確認ソース

#include <WiFi.h>
#include <ESPAsyncWebServer.h>

const char* ssid = "ESP32-AP";
const char* password = "12345678";

AsyncWebServer server(80);

void setup() {
  Serial.begin(115200);
  
  WiFi.softAP(ssid, password, 1, false, 1);
  Serial.print("IPアドレス: ");
  Serial.println(WiFi.softAPIP());
  
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
    request->send(200, "text/html", "<h1>Hello from ESPAsyncWebServer!</h1>");
  });
  
  server.begin();
  Serial.println("Asyncサーバー開始");
}

void loop() {
  // 何も書かなくてOK
}

WebServerの違い

標準WebServer(同期型)

Copyvoid loop() {
  server.handleClient();  // ここでリクエストを待ち続ける
  // 他の処理がブロックされる可能性あり
}

リクエストが来るたびにloop()内で順番に処理します。重い処理があると他のリクエストが待たされます。

ESPAsyncWebServer(非同期型)

Copyvoid loop() {
  // 何も書かなくていい
  // センサー読み取りなど他の処理に集中できる
}

リクエストはバックグラウンドで自動処理されます。loop()を専有しません。

具体的な違い

項目WebServerESPAsyncWebServer
loop()での呼び出し必要不要
同時接続1つずつ処理複数同時処理可
WebSocket非対応対応
メモリ使用量少なめ多め
複雑さシンプルやや複雑

どちらを選ぶべきか

標準WebServerで十分な場合

  • 簡単な設定画面を作りたいだけ
  • 同時アクセスが少ない
  • シンプルに済ませたい

ESPAsyncWebServerが向いている場合

  • センサー読み取りなど他の処理と並行したい
  • WebSocketでリアルタイム通信したい
  • 複数クライアントから同時アクセスがある
タイトルとURLをコピーしました