ESP32のAP+Web機能を試す
ESP32でネットワークに接続する場合,通常は無線LANのAPに接続するSTA(ステーションモード)を使うが,ESP32をAP(アクセスポイントモード)にしてAPにすることもできる
しかしESP32をAPにして接続してもネットワークにならず,大抵はESP32に接続されたセンサ類の情報をHTTPなどで取り出すようなことになる
そこでESP32をAP+Webサーバにして,性能・問題点など評価のためスマホから接続できれば利用できる独立型審査システムを作ってみた
審査システム
審査システムは何かというと,何らかの発表大会で審査員が審査して点数を付ける簡単な物で,こういった発表の場はそのたびに都合のよい場所で開催される場合が多く,大抵は審査用紙を利用することとなり手間がかかるらしいのを電子化するという試みである
予算があれば簡単に構築できるところを,ESP32とスマホで安価に完結させてやろうとしている(実際の運用ではPC1台は必要かな)
ESP32
コンパクトな「ESP32-C3 Super Mini」は技適マークがないので,技適を取得している「ESP32-WROOM」を使う

後に「Seed studio ESP32-C6」(左)を購入して使用

AP+Web化
まずはESP32のAP化となるが,先駆者の情報が多いので特に問題なく動作した
(例:AP)
#include <WiFi.h>
・・・
static const IPAddress apIP(192, 168, 201, 1);
static const IPAddress apMASK(255, 255, 255, 0);
static const char *WIFIMGR_ssid = "WebGradingSystem";
static const char *WIFIMGR_pass = "xxxxxxxx";
・・・
void setup() {
・・・
WiFi.mode(WIFI_AP);
WiFi.softAP(WIFIMGR_ssid);
WiFi.softAPConfig(apIP, apIP, apMASK);
・・・
}
次にWeb化では,URLを指定するのにmDNSを利用する手もあるが,接続先が1つしかないのでDNSによる名前解決は全てESP32を返すようにするとAP接続でESP32のトップページが開くので便利になるようだ
(例:Web)
#include <WebServer.h>
・・・
static WebServer webServer(80);
・・・
void setup() {
・・・
webServer.on("/", top);
webServer.onNotFound(top);
webServer.begin();
・・・
}
(例:DNS)
#include <DNSServer.h>
・・・
static DNSServer dnsServer;
・・・
void setup() {
・・・
dnsServer.setErrorReplyCode(DNSReplyCode::NoError);
dnsServer.start(53, "*", apIP);
・・・
}
(例:mDNS)
void setup() {
・・・
if(!MDNS.begin("esp32")) {
//回復不能エラーのため停止
for(;;); //halt
}
MDNS.addService("http", "tcp", 80); //サービス登録
・・・
}
画面(参考)
(AP選択)

(TOP画面)→(審査員選択)


(発表者を選択して審査)



(管理者)


(集計)(審査員と発表者の名簿アップロード)(審査初期化)



(デバッグでファイル確認)



システム構成

- ESP32-C6
- モバイルバッテリ(省電力なのでスマホのUSBからでも可)
- 手持ちのスマホ
- 管理者用にPC(スマホでも可)
スケッチ(参考)
AP-directWeb.txt(SJIS,LF,TAB4)
評価
- ESP32ではやや厳しい性能も,デュアルコアのC6だとそこそこ使える
- Web画面がほとんどダイナミック生成になるため大変(LittleFSを活用,もしくはツールが欲しいところだ)
- メモリが厳しいかと思ったがdataは余裕があった
問題点
- APの接続数(問題点)
softAPの接続数の最大数は4台となっているため最大数を増やすか運用で接続断をする必要がある
ハード的にESP32は10台程度,ESP32C6で14台にできることが実証されているようだ
最大数が4台になっているのは性能面の問題があるためのようなので確認が必要
- csvファイルのコード変換
csvはSJISなのでダウンロードで変換する必要がある
- 未対応箇所
パスワード対応
点数指定を10点と5点に切替できるようにする(当初5点で設計しトグルしてあった)
cssを外部ファイル化(LittleFSにおく)してデザイン変更可能にする

























