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("