From 0c6d9e0b237e06bae24e9c10d34c1deb3c1dd429 Mon Sep 17 00:00:00 2001 From: Luthics Date: Sat, 12 Nov 2022 21:34:51 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20web?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 3 +- include/web.h | 8 ++++ index.html | 18 +++++++ platformio.ini | 1 + src/main.cpp | 3 ++ src/servo.cpp | 6 ++- src/web.cpp | 108 ++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 144 insertions(+), 3 deletions(-) create mode 100644 include/web.h create mode 100644 index.html create mode 100644 src/web.cpp diff --git a/.vscode/settings.json b/.vscode/settings.json index 930ff05..6121a52 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,6 @@ { "files.associations": { - "*.tcc": "cpp" + "*.tcc": "cpp", + "typeinfo": "cpp" } } \ No newline at end of file diff --git a/include/web.h b/include/web.h new file mode 100644 index 0000000..9ff99a0 --- /dev/null +++ b/include/web.h @@ -0,0 +1,8 @@ +#include +#include +#include +#include "ESPAsyncWebServer.h" + +void web_init(); +void web_loop(); +void ref_ret(AsyncWebServerRequest* request, String html); \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..d727216 --- /dev/null +++ b/index.html @@ -0,0 +1,18 @@ + + + + + Servo + + + +
+ + + +
+
+ + +
+ \ No newline at end of file diff --git a/platformio.ini b/platformio.ini index 2aaf9e4..6a35085 100644 --- a/platformio.ini +++ b/platformio.ini @@ -15,4 +15,5 @@ framework = arduino lib_deps = madhephaestus/ESP32Servo@^0.12.0 h2zero/NimBLE-Arduino@^1.4.1 + ottowinter/ESPAsyncWebServer-esphome@^3.0.0 monitor_speed = 115200 diff --git a/src/main.cpp b/src/main.cpp index 8aed1cd..e17e7cf 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,15 +1,18 @@ #include #include #include +#include void setup() { Serial.begin(115200); servo_init(); bt_init(); + web_init(); } void loop() { servo_loop(); bt_loop(); + web_loop(); delay(100); } \ No newline at end of file diff --git a/src/servo.cpp b/src/servo.cpp index 202e66c..71d0438 100644 --- a/src/servo.cpp +++ b/src/servo.cpp @@ -6,12 +6,11 @@ Servo servo[8]; ESP32PWM pwm; int servoPin[8] = {13, 12, 14, 26, 25, 33, 32, 15}; +int pos[8] = {0}; int minUs = 500; int maxUs = 2500; -int pos = 0; - void servo_init() { for (int i = 0; i < 8; i++) { ESP32PWM::allocateTimer(i); @@ -21,6 +20,7 @@ void servo_init() { servo[i].attach(servoPin[i], minUs, maxUs); } pwm.attachPin(27, 10000); + servo_deg(8, 0); } void servo_loop() { @@ -62,10 +62,12 @@ void servo_deg(int servoid, int deg) { if (servoid >= 8) { for (int i = 0; i < 8; i++) { servo[i].write(deg); + pos[i] = deg; Serial.println(deg); } } else { servo[servoid].write(deg); + pos[servoid] = deg; Serial.println(deg); } } \ No newline at end of file diff --git a/src/web.cpp b/src/web.cpp new file mode 100644 index 0000000..30fe2ba --- /dev/null +++ b/src/web.cpp @@ -0,0 +1,108 @@ +#include +#include +#include + +#include +#include +#include +#include "ESPAsyncWebServer.h" + +AsyncWebServer server(80); + +const char* ssid = "Luthics' WLAN"; +const char* password = "qwerasdf"; + +const char* PARAM_MESSAGE = "foo"; + +void notFound(AsyncWebServerRequest* request) { + request->send(404, "text/plain", "Not found"); +} + +void web_init() { + Serial.begin(115200); + WiFi.mode(WIFI_STA); + WiFi.begin(ssid, password); + if (WiFi.waitForConnectResult() != WL_CONNECTED) { + Serial.printf("WiFi Failed!\n"); + return; + } + + Serial.print("IP Address: "); + Serial.println(WiFi.localIP()); + + server.on("/", HTTP_GET, [](AsyncWebServerRequest* request) { + String mp = + "\ + \ + \ + \ + Servo\ + \ + \ +
\ + \ + \ + \ +
\ +
\ + \ + \ +
\ + "; + request->send(200, "text/html", mp); + }); + + // Send a GET request to /get?message= + // server.on("/get", HTTP_GET, [](AsyncWebServerRequest* request) { + // String message; + // if (request->hasParam(PARAM_MESSAGE)) { + // message = request->getParam(PARAM_MESSAGE)->value(); + // } else { + // message = "No message sent"; + // } + // request->send(200, "text/plain", "Hello, GET: " + message); + // }); + + // Send a POST request to /post with a form field message set to + // server.on("/post", HTTP_POST, [](AsyncWebServerRequest* request) { + // String message; + // if (request->hasParam(PARAM_MESSAGE, true)) { + // message = request->getParam(PARAM_MESSAGE, true)->value(); + // } else { + // message = "No message sent"; + // } + // request->send(200, "text/plain", "Hello, POST: " + message); + // }); + + server.on("/servo", HTTP_POST, [](AsyncWebServerRequest* request) { + int deg; + int servoid; + if (request->hasParam("deg", true)) { + deg = request->getParam("deg", true)->value().toInt(); + if (request->hasParam("id", true)) { + servoid = request->getParam("id", true)->value().toInt(); + } else { + servoid = 8; + } + servo_deg(servoid, deg); + ref_ret( + request, + "

Success. Back after 1 " + "sencond.

"); + } else { + notFound(request); + } + }); + + server.onNotFound(notFound); + + server.begin(); +} + +void web_loop() {} + +void ref_ret(AsyncWebServerRequest* request, String html) { + request->send(200, "text/html", html); +} \ No newline at end of file