From ed718374865ad275487e676be97b2242e73d43eb Mon Sep 17 00:00:00 2001 From: jglueck Date: Fri, 17 Apr 2020 16:09:28 +0200 Subject: [PATCH] new version with webcontroller --- vsode/coderacer_mkII/platformio.ini | 2 + .../coderacer_mkII/src/Webcontroller_main.cpp | 215 ++++++++++++++++++ vsode/coderacer_mkII/src/coderacer_main.cpp | 4 +- 3 files changed, 219 insertions(+), 2 deletions(-) create mode 100644 vsode/coderacer_mkII/src/Webcontroller_main.cpp diff --git a/vsode/coderacer_mkII/platformio.ini b/vsode/coderacer_mkII/platformio.ini index fa532b9..4d838d8 100644 --- a/vsode/coderacer_mkII/platformio.ini +++ b/vsode/coderacer_mkII/platformio.ini @@ -12,4 +12,6 @@ platform = espressif32 board = esp32dev framework = arduino +monitor_speed= 115200 + diff --git a/vsode/coderacer_mkII/src/Webcontroller_main.cpp b/vsode/coderacer_mkII/src/Webcontroller_main.cpp new file mode 100644 index 0000000..f070437 --- /dev/null +++ b/vsode/coderacer_mkII/src/Webcontroller_main.cpp @@ -0,0 +1,215 @@ +#include "CodeRacer_MKII.h" +#include +#include "esp32-hal-ledc.h" +#include + +// Replace with your network credentials +const char* ssid = "WLAN-318091"; +const char* password = "peter4004"; + +// Set web server port number to 80 +WiFiServer server(80); + +// Variable to store the HTTP request +String header; + +// Auxiliar variables to store the current output state +String output32State= "off"; +String output33State="off"; +String output25State = "off"; +String output27State = "off"; +String output14State= "off"; +String output12State= "off"; + +// Assign output variables to GPIO pins +const int output25 = 25; +const int output27 = 27; +const int output32=32; +const int output33= 33; +const int output14= 14; +const int output12= 12; +CodeRacerMKII Coderacer; +unsigned long Distance; +void setup() { + Coderacer.begin(); + Serial.begin(115200); + // Initialize the output variables as outputs + pinMode(output25, OUTPUT); + pinMode(output27, OUTPUT); + pinMode(output32, OUTPUT); + pinMode(output33, OUTPUT); + pinMode(output14, OUTPUT); + pinMode(output12, OUTPUT); + // Set outputs to LOW + digitalWrite(output25, LOW); + digitalWrite(output27, LOW); + digitalWrite(output32, LOW); + digitalWrite(output33, LOW); + digitalWrite(output14, LOW); + digitalWrite(output12, LOW); + + // Connect to Wi-Fi network with SSID and password + Serial.print("Connecting to "); + Serial.println(ssid); + WiFi.begin(ssid, password); + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + } + // Print local IP address and start web server + Serial.println(""); + Serial.println("WiFi connected."); + Serial.println("IP address: "); + Serial.println(WiFi.localIP()); + server.begin(); +} + +void loop(){ + WiFiClient client = server.available(); // Listen for incoming clients + if (client) { // If a new client connects, + Serial.println("New Client detected."); // print a message out in the serial port + String currentLine = ""; // make a String to hold incoming data from the client + while (client.connected()) { // loop while the client's connected + if (client.available()) { // if there's bytes to read from the client, + char c = client.read(); // read a byte, then + Serial.write(c); // print it out the serial monitor + header += c; + if (c == '\n') { // if the byte is a newline character + // if the current line is blank, you got two newline characters in a row. + // that's the end of the client HTTP request, so send a response: + if (currentLine.length() == 0) { + // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK) + // and a content-type so the client knows what's coming, then a blank line: + client.println("HTTP/1.1 200 OK"); + client.println("Content-type:text/html"); + client.println("Connection: close"); + client.println(); + + // turns the GPIOs on and off + if (header.indexOf("GET /25/on") >= 0) { + Serial.println("GPIO 25 on"); + output25State = "on"; + digitalWrite(output25, HIGH); + } else if (header.indexOf("GET /25/off") >= 0) { + Serial.println("GPIO 25 off"); + output25State = "off"; + digitalWrite(output25, LOW); + } else if (header.indexOf("GET /27/on") >= 0) { + Serial.println("GPIO 27 on"); + output27State = "on"; + digitalWrite(output27, HIGH); + } else if (header.indexOf("GET /27/off") >= 0) { + Serial.println("GPIO 27 off"); + output27State = "off"; + digitalWrite(output27, LOW); + } else if(header.indexOf("GET /32/off") >=0) { + Serial.println("GPIO 32 off"); + output32State= "off"; + digitalWrite(output32, LOW); + } else if(header.indexOf("GET /32/on") >=0) { + Serial.println("GPIO 32 on"); + output32State= "on"; + digitalWrite(output32, HIGH); + } else if (header.indexOf("GET /33/on") >= 0) { + Serial.println("GPIO 33 on"); + output33State = "on"; + digitalWrite(output33, HIGH); + } else if (header.indexOf("GET /33/off") >= 0) { + Serial.println("GPIO 33 off"); + output33State = "off"; + digitalWrite(output33, LOW); + } else if (header.indexOf("GET /MeasureDistance") >=0) { + Distance= Coderacer.usonic_measure_cm(); + + } else if (header.indexOf("GET /DriveForward") >=0) { + Serial.printf("header: '%s'\n", header.c_str()); + if(header.indexOf("=") >=0) {int Position= header.indexOf("="); + String Substring= header.substring(Position+1); + int iSpeed= Substring.toInt(); + Coderacer.speed_settings(iSpeed, iSpeed); + Coderacer.servo_set_position_wait(iSpeed); + } + //Coderacer.drive_forward(); + } else if(header.indexOf("GET /DriveBackward") >=0) { + Coderacer.drive_backward(); + } + // Display the HTML web page + client.println(""); + client.println(""); + client.println(""); + // CSS to style the on/off buttons + // Feel free to change the background-color and font-size attributes to fit your preferences + client.println(""); + + // Web Page Heading + client.println("

ESP32 Web Server

"); + + client.println("

GPIO 32 - State " + output32State ); + // If the output27State is off, it displays the ON button + if (output32State=="off") { + client.println(""); + } else { + client.println(""); + } + + client.println("GPIO 33 - State " + output33State ); + // If the output27State is off, it displays the ON button + if (output33State=="off") { + client.println("

"); + } else { + client.println("

"); + } + // Display current state, and ON/OFF buttons for GPIO 26 + client.println("

GPIO 25 - State " + output25State ); + // If the output26State is off, it displays the ON button + if (output25State=="off") { + client.println(""); + } else { + client.println(""); + } + + // Display current state, and ON/OFF buttons for GPIO 27 + client.println("GPIO 27 - State " + output27State ); + // If the output27State is off, it displays the ON button + if (output27State=="off") { + client.println("

"); + } else { + client.println("

"); + } + + client.println("

"); + client.printf("

", Distance); + client.println("

"); + client.println(""); + + client.println("

"); + client.println("

"); + client.println(""); + client.println(""); + client.println(""); + + // The HTTP response ends with another blank line + client.println(); + // Break out of the while loop + break; + } else { // if you got a newline, then clear currentLine + currentLine = ""; + } + } else if (c != '\r') { // if you got anything else but a carriage return character, + currentLine += c; // add it to the end of the currentLine + } + } + } + // Clear the header variable + header = ""; + // Close the connection + client.stop(); + Serial.println("Client disconnected."); + Serial.println(""); + } +} \ No newline at end of file diff --git a/vsode/coderacer_mkII/src/coderacer_main.cpp b/vsode/coderacer_mkII/src/coderacer_main.cpp index f26b53a..28e718d 100644 --- a/vsode/coderacer_mkII/src/coderacer_main.cpp +++ b/vsode/coderacer_mkII/src/coderacer_main.cpp @@ -37,7 +37,7 @@ const bool RIGHT = false; const unsigned int IN_MAX = 255; //---- Hier startet der Code zum Einstellen aller wichtigen Dinge. Setup() wird einmal ausgeführt. ---- -void setup() { +void setup1() { // Monitor Serial.begin(9600); // Serial Monitor aktivieren. Mit dem Monitor kann man sich Werte und Meldungen anzeigen lassen. @@ -58,7 +58,7 @@ void setup() { } //---- Hier startet unsere endlose Schleife - die immer wieder von vorn angefangen wird, wenn wir am Ende angekommen sind. Da ist unser "Fahr"Code drin, der den CodeRacer steuert -void loop() +void loop1() { bool started = false; while(coderacer.start_stop()== 1)