// AP-directWeb.ino // // product: // ローカルアクセス型Web成績管理システム // Local access Web grading system for EPS32 or ESP32C6 // // ボード:"ESP32 Dev Module" // Pertirion Scheme:"Default with spiffs" // #include #include #include #include "LittleFS.h" #define DEBUG true #define CLUB true //Home Economics Vlub version //#define LED_BUILTIN 2 #define MK_COUNT 5 #ifdef ARDUINO_ESP32C6_DEV static const IPAddress apIP(192, 168, 202, 1); static const IPAddress apMASK(255, 255, 255, 0); static const char *WIFIMGR_ssid = "WebGradingC6"; static const char *WIFIMGR_pass = "xxxxxxxx"; #else //ESP32_DEV 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"; #endif static WebServer webServer(80); static DNSServer dnsServer; //定義ファイル static const String exFile = "/examiner.txt"; //審査員 static const String prFile = "/presenter.txt"; //発表者 //各審査員点数ファイル:mk-<審査員ID>.csv static const String scoreFile = "/score.csv"; //審査集計 void setup() { #ifdef DEBUG Serial.begin(115200); // while(!Serial) delay(200); //ターミナルを開くまで待つ(USBの単独電圧印加だと問題あり) delay(1000); #endif #ifdef ARDUINO_ESP32C6_DEV pinMode(3, OUTPUT); digitalWrite(3, LOW); //WiFi On delay(100); pinMode(14, OUTPUT); digitalWrite(14, LOW); //内蔵アンテナを使う #endif #ifdef LED_BUILTIN pinMode(LED_BUILTIN, OUTPUT); #endif #ifdef DEBUG Serial.println("AP and Web server start"); Serial.flush(); #endif //init filesystem if(!LittleFS.begin(true)) { Serial.println("LittleFS Mount Failed"); } #ifdef LED_BUILTIN digitalWrite(LED_BUILTIN, HIGH); #endif WiFi.mode(WIFI_AP); WiFi.softAP(WIFIMGR_ssid); // no password //WiFi.softAP(WIFIMGR_ssid,WIFIMGR_pass); // with password delay(200); //Important! This delay is necessary WiFi.softAPConfig(apIP, apIP, apMASK); dnsServer.setErrorReplyCode(DNSReplyCode::NoError); dnsServer.start(53, "*", apIP); webServer.on("/", top); webServer.on("/exchk", HTTP_GET, exchk); webServer.on("/admin", admin); webServer.on("/marking", marking); webServer.on("/totalling", totalling); webServer.on("/download", HTTP_GET, download); webServer.on("/uploadFile", uploadFile); //第2引数に完了時の応答ハンドラ、第3引数にデータ処理中のハンドラを指定 webServer.on("/upload", HTTP_POST, handleUploadResponse, handleFileUpload); webServer.on("/removemkFile", removemkFile); webServer.on("/delmkfile", delmkfile); webServer.on("/listFiles", listFiles); webServer.on("/viewFile", viewFile); webServer.on("/removeFile", removeFile); webServer.on("/deleteFile", deleteFile); //webServer.on("/wifiset", HTTP_GET, wifiset); //webServer.on("/reboot", reboot); //webServer.on("/doreboot", doreboot); webServer.onNotFound(top); webServer.begin(); } void loop() { delay(100); dnsServer.processNextRequest(); webServer.handleClient(); } //Web contents // static char html_header[] = "\ \ \ \ \ \ \ \ \

ローカル審査システム

\ "; //headder String Headder_str() { return(html_header); } //(/)root void top() { String html = Headder_str(); html += "
"; html += "

審査員選択

"; html += "
"; html += "
"; html += "
Password
"; html += ""; html += "
"; html += "
"; html += ""; webServer.send(200, "text/html", html); } //審査員選択 void exchk() { String exid = webServer.arg("exid"); if(exid.toInt() == 0) { //管理者「/admin」に転送 webServer.sendHeader("Location", String("/admin"), true); webServer.send(302, "text/plain", ""); return; } //審査画面 webServer.sendHeader("Location", String("/marking?prid=0&pprid=0&exid=") + exid, true); webServer.send(302, "text/plain", ""); } //審査ファイルの初期化(審査員単位) static void initmkfile(String exid, int prcnt) { String mkfilename = "/mk-" + exid + ".csv"; #ifdef DEBUG Serial.printf("LittleFS writing file: %s\n", mkfilename); #endif File fd = LittleFS.open(mkfilename, "w"); for(int row = 0; row < prcnt; row++) { fd.println("1,1,1,1,1"); //固定に注意 //for(int col = 0; col < MK_COUNT, col++) { // fd.print("1,"); //} //fd.println("1"); } fd.close(); } //点数文字列 static const char *strNum[] = { "1点", "2点", "3点", "4点", "5点", "6点", "7点", "8点", "9点", "10点" }; #ifdef CLUB //点数プルダウンメニュ文字列生成 static String strPullDown(String name, String def) { String str = "\n"; return(str); } #else //点数ラベル文字列生成 static String strLabel(String name, String def) { String str = ""; for(int n = 1; n <= 5; n++) { str += "