From c8dfd366a19987274590312c5c928a7a38282d26 Mon Sep 17 00:00:00 2001 From: Toshan Luktuke Date: Tue, 8 Feb 2022 22:36:23 +0530 Subject: [PATCH 1/4] Added inverse kinematics implementation of webserver --- firmware/6_inverse_kinematics_webserver | 1 + 1 file changed, 1 insertion(+) create mode 160000 firmware/6_inverse_kinematics_webserver diff --git a/firmware/6_inverse_kinematics_webserver b/firmware/6_inverse_kinematics_webserver new file mode 160000 index 0000000..6e6c1db --- /dev/null +++ b/firmware/6_inverse_kinematics_webserver @@ -0,0 +1 @@ +Subproject commit 6e6c1db00a3322ef63d6334137b27b482a50c9ba From dab9d727130628f8a7331d55e6611524b85a2712 Mon Sep 17 00:00:00 2001 From: Toshan Luktuke Date: Tue, 8 Feb 2022 22:41:03 +0530 Subject: [PATCH 2/4] Revert "Added inverse kinematics implementation of webserver" This reverts commit c8dfd366a19987274590312c5c928a7a38282d26. --- firmware/6_inverse_kinematics_webserver | 1 - 1 file changed, 1 deletion(-) delete mode 160000 firmware/6_inverse_kinematics_webserver diff --git a/firmware/6_inverse_kinematics_webserver b/firmware/6_inverse_kinematics_webserver deleted file mode 160000 index 6e6c1db..0000000 --- a/firmware/6_inverse_kinematics_webserver +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6e6c1db00a3322ef63d6334137b27b482a50c9ba From 69afb0285efe5dcd4d78e4928bc0f7288dfd874a Mon Sep 17 00:00:00 2001 From: Toshan Luktuke Date: Tue, 8 Feb 2022 22:41:59 +0530 Subject: [PATCH 3/4] Added inverse kinematics webserver --- .../CMakeLists.txt | 9 + .../6_inverse_kinematics_webserver/README.md | 17 + .../frontend/index.html | 175 +++ .../frontend/inverse-kinematics.js | 207 +++ .../main/CMakeLists.txt | 10 + .../main/Kconfig | 31 + .../main/component.mk | 5 + .../main/include/inverse_kinematics.h | 25 + .../main/include/tuning_http_server.h | 47 + .../main/include/wifi_handler.h | 26 + .../main/inverse_kinematics.c | 99 ++ .../main/main.c | 67 + .../main/tuning_http_server.c | 318 +++++ .../main/wifi_handler.c | 118 ++ .../partition_table.csv | 6 + .../6_inverse_kinematics_webserver/sdkconfig | 1226 +++++++++++++++++ 16 files changed, 2386 insertions(+) create mode 100644 firmware/6_inverse_kinematics_webserver/CMakeLists.txt create mode 100644 firmware/6_inverse_kinematics_webserver/README.md create mode 100644 firmware/6_inverse_kinematics_webserver/frontend/index.html create mode 100644 firmware/6_inverse_kinematics_webserver/frontend/inverse-kinematics.js create mode 100644 firmware/6_inverse_kinematics_webserver/main/CMakeLists.txt create mode 100644 firmware/6_inverse_kinematics_webserver/main/Kconfig create mode 100644 firmware/6_inverse_kinematics_webserver/main/component.mk create mode 100644 firmware/6_inverse_kinematics_webserver/main/include/inverse_kinematics.h create mode 100644 firmware/6_inverse_kinematics_webserver/main/include/tuning_http_server.h create mode 100644 firmware/6_inverse_kinematics_webserver/main/include/wifi_handler.h create mode 100644 firmware/6_inverse_kinematics_webserver/main/inverse_kinematics.c create mode 100644 firmware/6_inverse_kinematics_webserver/main/main.c create mode 100644 firmware/6_inverse_kinematics_webserver/main/tuning_http_server.c create mode 100644 firmware/6_inverse_kinematics_webserver/main/wifi_handler.c create mode 100644 firmware/6_inverse_kinematics_webserver/partition_table.csv create mode 100644 firmware/6_inverse_kinematics_webserver/sdkconfig diff --git a/firmware/6_inverse_kinematics_webserver/CMakeLists.txt b/firmware/6_inverse_kinematics_webserver/CMakeLists.txt new file mode 100644 index 0000000..00c37d0 --- /dev/null +++ b/firmware/6_inverse_kinematics_webserver/CMakeLists.txt @@ -0,0 +1,9 @@ +# The following five lines of boilerplate have to be in your project's +# CMakeLists in this exact order for cmake to work correctly + +cmake_minimum_required(VERSION 3.5) + +set(EXTRA_COMPONENT_DIRS ../components) +include($ENV{IDF_PATH}/tools/cmake/project.cmake) + +project(servo_control) diff --git a/firmware/6_inverse_kinematics_webserver/README.md b/firmware/6_inverse_kinematics_webserver/README.md new file mode 100644 index 0000000..836bf8d --- /dev/null +++ b/firmware/6_inverse_kinematics_webserver/README.md @@ -0,0 +1,17 @@ +# Servo Webserver Inverse Kinematics +This code implements inverse kinematics functionality to the existing webserver +## Steps to Follow +- Configure the project + - `cd firmware/MARIO_Webserver` + - `idf.py menuconfig` + - `Component config -> MARIO testing -> WiFi Config -> Set SSID -> Set Password` +- Build and Flash the Code + - `idf.py build` + - `idf.py -p PORT flash` + - Monitor Logs + - `idf.py monitor` +- Access website via the ip shown in the `sta ip` part of the terminal. Paste `sta ip` in the browser to access the website +Note:- If it shows `cmake flash error`. Run the following: + - `sudo chmod 777 port` + - `idf.py -p port flash` + diff --git a/firmware/6_inverse_kinematics_webserver/frontend/index.html b/firmware/6_inverse_kinematics_webserver/frontend/index.html new file mode 100644 index 0000000..41985c5 --- /dev/null +++ b/firmware/6_inverse_kinematics_webserver/frontend/index.html @@ -0,0 +1,175 @@ + + + + + + Tuning page + + + +
+

MARIO SERVO TESTING

+
+

X

+ + + +
+
+

Y

+ + + +
+
+

Z

+ + + +
+
+ + + diff --git a/firmware/6_inverse_kinematics_webserver/frontend/inverse-kinematics.js b/firmware/6_inverse_kinematics_webserver/frontend/inverse-kinematics.js new file mode 100644 index 0000000..4b80db9 --- /dev/null +++ b/firmware/6_inverse_kinematics_webserver/frontend/inverse-kinematics.js @@ -0,0 +1,207 @@ +let inpArray = document.querySelectorAll("input[type='text']"); + +//function to determine precision of rounding + // const round = (number, decimalPlaces) => { + // const factorOfTen = Math.pow(10, decimalPlaces); + // return (Math.round(number * factorOfTen) / factorOfTen); + // } + // //function to convert radians to degrees + + // function radians_to_degrees(radians) + // { + // var pi = Math.PI; + // return radians * (180/pi); + // } + + function submitVals() { + const data = {}; + + + + + data["servo_a"] = parseFloat(document.getElementById("servo_a").value); + data["servo_b"] = parseFloat(document.getElementById("servo_b").value); + data["servo_c"] = parseFloat(document.getElementById("servo_c").value); + + // let res = inverseKinematics(data["servo_a"], data["servo_b"], data["servo_c"]); + + // console.log(res); + // let joint = computeAngle(res); + // data["servo_a"] = joint[0]; + // data["servo_b"] = joint[1]; + // data["servo_c"] = joint[2]; + // console.log(data); + + + + let finaldata = JSON.stringify(data); + // console.log(finaldata); + + let xhr = new XMLHttpRequest(); + + // Vedant! + let url = "/api/v1/servo"; + + // open a connection + xhr.open("POST", url, true); + + // Set the request header i.e. which type of content you are sending + xhr.setRequestHeader("Content-Type", "application/json"); + // Create a state change callback + xhr.onreadystatechange = function () { + if (xhr.readyState === 4) { + if (xhr.status == 400) { + console.log("Success!"); + } else { + console.log(xhr.status); + } + // Print received data from server + } + }; + + // Sending data with the request + xhr.send(finaldata); + } + + + for (let i = 0; i < inpArray.length; i++) { + inpArray[i].addEventListener("change", submitVals); + } + + let decrementButtons = document.querySelectorAll( + ".button-group button:first-of-type" + ); + let incrementButtons = document.querySelectorAll( + ".button-group button:last-of-type" + ); + function decrementVal(e) { + let test = e.target.parentNode.children[2].value; + if (!isNaN(Number(test))) { + e.target.parentNode.children[2].value = String( + (Number(test) - 0.01).toFixed(3) + ); + submitVals(); + } else { + e.target.parentNode.children[2].value = "0.000"; + } + } + + function incrementVal(e) { + let test = e.target.parentNode.children[2].value; + if (!isNaN(Number(test))) { + e.target.parentNode.children[2].value = String( + (Number(test) + 0.01).toFixed(3) + ); + submitVals(); + } else { + e.target.parentNode.children[2].value = "0.000"; + } + } + + for (button of decrementButtons) { + button.addEventListener("click", decrementVal); + } + for (button of incrementButtons) { + button.addEventListener("click", incrementVal); + } + + + // function inverseKinematics(x, y, z) { + // //let servoa, servob, servoc; + // let result = []; + // var d0 = 2.5; //Base to shoulder link length + // var a1 = 12.0; //Shoulder to elbow link length + // var d3 = 9.5; //Elbow to end effector link length + // const ROUNDING_ERROR = 10; + // let theta_base = round(Math.atan2(y,x), ROUNDING_ERROR); + // let theta_shoulder, theta_shoulder_possible, theta_elbow, theta_elbow_possible; + // sin_theta_elbow = round(((x * x + y * y + (z - d0) * (z - d0)) - a1 * a1 - d3 * d3) / (2 * a1 * d3), ROUNDING_ERROR) + + // if(sin_theta_elbow <= 1 && (sin_theta_elbow) >= -1){ + // theta_elbow = round(Math.asin(sin_theta_elbow), ROUNDING_ERROR); + // theta_elbow_possible = round(Math.PI - theta_elbow, ROUNDING_ERROR); + + // let denominator = x*x + y*y + (z - d0) * (z - d0); + + // if(theta_base != 90){ + // let numerator_theta_shoulder = (z - d0)*(a1 + d3 * Math.sin(theta_elbow)) + d3 * Math.cos(theta_elbow)*x / Math.cos(theta_base); + + // let numerator_theta_shoulder_possible = (z - d0)*(a1 + d3*Math.sin(theta_elbow)) + d3*Math.cos(theta_elbow_possible) * x/ Math.cos(theta_base); + + // theta_shoulder = round(Math.asin(numerator_theta_shoulder/denominator), ROUNDING_ERROR); + // theta_shoulder_possible = round(Math.asin(numerator_theta_shoulder_possible/denominator), ROUNDING_ERROR) + // } + // else if(theta_base != 0){ + // let numerator_theta_shoulder = (z-d0)*(a1 + d3 * Math.sin(theta_elbow)) + d3*Math.cos(theta_elbow)* y/ Math.sin(theta_base); + // let numerator_theta_shoulder_possible = (z-d0)*(a1 + d3 * Math.sin(theta_elbow_possible)) + d3*Math.cos(theta_elbow_possible)* y/ Math.sin(theta_base); + + // theta_shoulder = round(Math.asin(numerator_theta_shoulder / denominator), ROUNDING_ERROR); + // theta_shoulder_possible = round(Math.asin(numerator_theta_shoulder_possible / denominator), ROUNDING_ERROR); + + // } + + // } + // else{ + // console.log("Point isn't in range due to constraints in link length"); + // result = [null, null, null, null, null, null]; + // return result; + // } + // result = [radians_to_degrees(theta_base), radians_to_degrees(theta_shoulder), radians_to_degrees(theta_elbow), radians_to_degrees(theta_base), radians_to_degrees(theta_shoulder_possible), radians_to_degrees(theta_elbow_possible)]; + // return result; + + // //let sin_theta_elbow = Math.round() + // // servo-c (theta-base) = tan^-1(y/z) + // // servo-b (theta-shoulder) = + // // servo-c != 90 then servo-b = sin^-1((z-d0)*(a1+d3*sin(theta-elbow)) + d3*cos(theta-elbow)*x/cos(theta-base) / x^2 + y^2 + (z - d0)^2) + // // servo-c != 0 then servo-b = sin^-1((z-d0)*(a1+d3*sin(theta-elbow)) + d3*cos(theta-elbow)*y/sin(theta-base) / x^2 + y^2 + (z - d0)^2) + // // servo-a (theta-elbow) = sin^-1(x^2 + y^2 + (z - d0)^2 - a1^2 - d3^2 / 2*a1*d3) + // } + + // function computeAngle(res) + // { + // let index =-1; + // let count =0; + // if (res[0] !=null && res[1]!=null && res[2]!=null) + // { + // if ( (0.0 <= res[0] && res[0] <= 180.0) && (0.0 <= res[1] && res[1] <= 180.0) && (0.0 <= res[2] && res[2] <= 180.0)) + // { + // index =0; + // count +=1; + // } + // if( (0.0 <= res[3] && res[3] <= 180.0) && (0.0 <= res[4] && res[4] <= 180.0) && (0.0 <= res[5] && res[5] <= 180.0)) + // { + // index = 3; + // count += 1; + // } + // } + // if(index!= -1) + // { + // if(count ==2) + // { + // if (((res[1] + res[2]) % (2 * 180)) != 0 && (((res[1] + res[2]) % 180) == 0)) + // { + // index = 0; + // } + // else if (((res[3] + res[4]) % (2 * 180)) != 0 && (((res[3] + res[4]) % 180) == 0)) + // { + // index = 3; + // } + // } + // let joint = []; + // joint.push(res[index + 0]); + // joint.push(res[index + 1]); + // joint.push(res[index + 2]); + + // return joint; + + // } + // else + // { + // console.log("Invalid values"); + // return [null,null,null]; + // } + // } + + + + diff --git a/firmware/6_inverse_kinematics_webserver/main/CMakeLists.txt b/firmware/6_inverse_kinematics_webserver/main/CMakeLists.txt new file mode 100644 index 0000000..94e18f9 --- /dev/null +++ b/firmware/6_inverse_kinematics_webserver/main/CMakeLists.txt @@ -0,0 +1,10 @@ +# Edit following two lines to set component requirements (see docs) +set(COMPONENT_REQUIRES ) +set(COMPONENT_PRIV_REQUIRES ) + +set(COMPONENT_SRCS "main.c" "tuning_http_server.c" "wifi_handler.c" "inverse_kinematics.c") +set(COMPONENT_ADD_INCLUDEDIRS "include") + +register_component() + +spiffs_create_partition_image(www "${CMAKE_CURRENT_SOURCE_DIR}/../frontend" FLASH_IN_PROJECT) diff --git a/firmware/6_inverse_kinematics_webserver/main/Kconfig b/firmware/6_inverse_kinematics_webserver/main/Kconfig new file mode 100644 index 0000000..01269aa --- /dev/null +++ b/firmware/6_inverse_kinematics_webserver/main/Kconfig @@ -0,0 +1,31 @@ +menu "MARIO testing" + +menu "WiFi Config" + config WIFI_SSID + string "WiFi SSID" + default "myssid" + help + SSID (network name) for the example to connect to. + + config WIFI_PASSWORD + string "WiFi Password" + default "mypassword" + help + WiFi password (WPA or WPA2) for the example to use. + + config MAXIMUM_RETRY + int "Maximum retry" + default 5 + help + Set the Maximum retry to avoid station reconnecting to the AP unlimited when the AP is really inexistent. +endmenu + +menu "mDNS Config" + config MDNS_HOST_NAME + string "mDNS host name (< 15 chars)" + default "Mario testing" + help + mDNS hostname used to access the tuning webpage, it should be less than 15 chars +endmenu + +endmenu diff --git a/firmware/6_inverse_kinematics_webserver/main/component.mk b/firmware/6_inverse_kinematics_webserver/main/component.mk new file mode 100644 index 0000000..0b9d758 --- /dev/null +++ b/firmware/6_inverse_kinematics_webserver/main/component.mk @@ -0,0 +1,5 @@ +# +# "main" pseudo-component makefile. +# +# (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.) + diff --git a/firmware/6_inverse_kinematics_webserver/main/include/inverse_kinematics.h b/firmware/6_inverse_kinematics_webserver/main/include/inverse_kinematics.h new file mode 100644 index 0000000..1fd8710 --- /dev/null +++ b/firmware/6_inverse_kinematics_webserver/main/include/inverse_kinematics.h @@ -0,0 +1,25 @@ +//Header File for Inverse Kinematics Module +#ifndef INVERSE_KINEMATICS_H +#define INVERSE_KINEMATICS_H + +#include + +//Sturcture to store data of X,Y,Z co-ordinates received from webserver +typedef struct invK_coords +{ + double x; + double y; + double z; +} xyz_coords; + +//Rounding Function +double Round(double n); + +//Takes X,Y,Z co-ordinates as input and returns an array of all possible angles of base,shoulder and elbow +double* applyInverseKinematics(double,double,double); + +//Radians to Degrees Function +double degrees(double rad); + + +#endif diff --git a/firmware/6_inverse_kinematics_webserver/main/include/tuning_http_server.h b/firmware/6_inverse_kinematics_webserver/main/include/tuning_http_server.h new file mode 100644 index 0000000..f747ab9 --- /dev/null +++ b/firmware/6_inverse_kinematics_webserver/main/include/tuning_http_server.h @@ -0,0 +1,47 @@ +#ifndef TUNING_HTTP_SERVER_H +#define TUNING_HTTP_SERVER_H + +#include +#include +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "driver/gpio.h" +#include "esp_spiffs.h" +#include "nvs_flash.h" +#include "esp_netif.h" +#include "esp_event.h" +#include "esp_log.h" +#include "mdns.h" +#include "lwip/apps/netbiosns.h" +#include "esp_http_server.h" +#include "esp_system.h" +#include "esp_vfs.h" +#include "cJSON.h" +#include "sdkconfig.h" +#include "wifi_handler.h" + +#define MDNS_INSTANCE "MARIO servo testing web server" +#define MDNS_HOST_NAME CONFIG_MDNS_HOST_NAME +#define WEB_MOUNT_POINT "/www" +#define FILE_PATH_MAX (ESP_VFS_PATH_MAX + 128) +#define SCRATCH_BUFSIZE (10240) +#define CHECK_FILE_EXTENSION(filename, ext) (strcasecmp(&filename[strlen(filename) - strlen(ext)], ext) == 0) + +// Structure to store the Base,Shoulder,Elbow angles +typedef struct pid_const +{ + double servo_a; // Elbow Angle + double servo_b; // Shoulder Angle + double servo_c; // Base Angle +} servo_const_t; + +// Returns the feasible angles from all the possible Joint angles +servo_const_t computeAngles(double*); + +// Returns the three servo angles +servo_const_t read_servo_const(); + + +void start_tuning_http_server(); + +#endif \ No newline at end of file diff --git a/firmware/6_inverse_kinematics_webserver/main/include/wifi_handler.h b/firmware/6_inverse_kinematics_webserver/main/include/wifi_handler.h new file mode 100644 index 0000000..44c01e7 --- /dev/null +++ b/firmware/6_inverse_kinematics_webserver/main/include/wifi_handler.h @@ -0,0 +1,26 @@ +#ifndef WIFI_HANDLER_H +#define WIFI_HANDLER_H + +#include +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/event_groups.h" +#include "esp_system.h" +#include "esp_wifi.h" +#include "esp_event.h" +#include "esp_log.h" +#include "nvs_flash.h" +#include "lwip/err.h" +#include "lwip/sys.h" +#include "sdkconfig.h" + +#define WIFI_CONNECTED_BIT BIT0 +#define WIFI_FAIL_BIT BIT1 + +#define WIFI_SSID CONFIG_WIFI_SSID +#define WIFI_PASS CONFIG_WIFI_PASSWORD +#define MAXIMUM_RETRY CONFIG_MAXIMUM_RETRY + +void connect_to_wifi(); + +#endif \ No newline at end of file diff --git a/firmware/6_inverse_kinematics_webserver/main/inverse_kinematics.c b/firmware/6_inverse_kinematics_webserver/main/inverse_kinematics.c new file mode 100644 index 0000000..dd578d3 --- /dev/null +++ b/firmware/6_inverse_kinematics_webserver/main/inverse_kinematics.c @@ -0,0 +1,99 @@ +#include "inverse_kinematics.h" +#include "tuning_http_server.h" + +static double allPossibleAngles[6]; // Array to store all possible values of angles +const double d0 = 2.5; // Base to shoulder link length +const double a1 = 12.0; // Shoulder to elbow link length +const double d3 = 9.5; // Elbow to end effector link length +const double ROUNDING_ERROR = 2; + + +double Round(double n) +{ + int i = ROUNDING_ERROR; + return floor(pow(10, i) * n) / pow(10, i); +} + + +double degrees(double rad) +{ + return (rad * (180 / 3.1415)); +} + +/* +X = cos(0_base) [d3 * cos(0_shoulder)sin(0_elbow) + d3 * sin(0_shoulder)cos(0_elbow) + a1 * cos(0_shoulder)] +Y = sin(0_base) [d3 * cos(0_shoulder)sin(0_elbow) + d3 * sin(0_shoulder)cos(0_elbow) + a1 * cos(0_shoulder)] +Z = d3 * sin(0_shoulder)sin(0_elbow) - d3 * cos(0_shoulder)cos(0_elbow) + a1 * sin(0_shoulder) + d0 + +--------------------------------------------------------------------------------------------------------------------- +On applying Inverse Kinematics calculations : + +θbase = tan-1 (y / x) +θelbow = sin-1( [x² + y² + (z - d0)² - a1² - d3²] / [2 * a1 * d3] ) + +If 0_base is not 90: +θshoulder = sin-1( [(z - d0) * (a1 + d3 * sin(θ_elbow) + d3 * cos(θ_elbow) * x / cos(θ_base)] / [x² + y² + (z - d0)²] ) + +If 0_base is not 0: +θshoulder = sin-1( [(z - d0) * (a1 + d3 * sin(θ_elbow) + d3 * cos(θ_elbow) * y / sin(θ_base)] / [x² + y² + (z - d0)²] ) + +*/ +double *applyInverseKinematics(double X, double Y, double Z) +{ + double theta_base = Round(atan2(Y, X)); + double sin_theta_elbow = Round(((X * X + Y * Y + (Z - d0) * (Z - d0)) - a1 * a1 - d3 * d3) / (2 * a1 * d3)); + double theta_shoulder = 0, theta_shoulder_possible = 0, theta_elbow = 0, theta_elbow_possible = 0; + + if (sin_theta_elbow <= 1 && sin_theta_elbow >= -1) + { + ESP_LOGI("First if passed \n","%f\n",sin_theta_elbow); + + theta_elbow = Round(asin(sin_theta_elbow)); + theta_elbow_possible = Round(3.1415 - theta_elbow); + + double denominator = X * X + Y * Y + (Z - d0) * (Z - d0); + + if (theta_base != 90) + { + ESP_LOGI("Entered if theta_base != 90\n" , "%f %f\n", degrees(theta_elbow),degrees(theta_elbow_possible)); + // Calculate x / cos(theta_base) + double numerator_theta_shoulder = (Z - d0) * (a1 + d3 * sin(theta_elbow)) + d3 * cos(theta_elbow) * X / cos(theta_base); + + double numerator_theta_shoulder_possible = (Z - d0) * (a1 + d3 * sin(theta_elbow_possible)) + d3 * cos(theta_elbow_possible) * X / cos(theta_base); + + theta_shoulder = Round(asin(numerator_theta_shoulder / denominator)); + theta_shoulder_possible = Round(asin(numerator_theta_shoulder_possible / denominator)); + } + else if (theta_base != 0) + { + ESP_LOGI("Entered if theta_base != 0\n", "%f %f\n", degrees(theta_elbow),degrees(theta_elbow_possible)); + // Calculate y / sin(theta_base) + double numerator_theta_shoulder = (Z - d0) * (a1 + d3 * sin(theta_elbow)) + d3 * cos(theta_elbow) * Y / sin(theta_base); + + double numerator_theta_shoulder_possible = (Z - d0) * (a1 + d3 * sin(theta_elbow_possible)) + d3 * cos(theta_elbow_possible) * Y / sin(theta_base); + + theta_shoulder = Round(asin(numerator_theta_shoulder / denominator)); + theta_shoulder_possible = Round(asin(numerator_theta_shoulder_possible / denominator)); + } + } + else + { + // Point is not in range of constraints + for (int i = 0; i < 6; i++) + { + allPossibleAngles[i] = -9.0; + } + return allPossibleAngles; + } + ESP_LOGI("AppInvK Function : ", "%f %f %f %f %f %f\n",degrees(theta_base),degrees(theta_shoulder),degrees(theta_elbow),degrees(theta_base),degrees(theta_shoulder_possible),degrees(theta_elbow_possible)); + + // Store all possible values of angles after converting to degrees + allPossibleAngles[0] = degrees(theta_base); + allPossibleAngles[1] = degrees(theta_shoulder); + allPossibleAngles[2] = degrees(theta_elbow); + allPossibleAngles[3] = degrees(theta_base); + allPossibleAngles[4] = degrees(theta_shoulder_possible); + allPossibleAngles[5] = degrees(theta_elbow_possible); + + return allPossibleAngles; +} \ No newline at end of file diff --git a/firmware/6_inverse_kinematics_webserver/main/main.c b/firmware/6_inverse_kinematics_webserver/main/main.c new file mode 100644 index 0000000..120d955 --- /dev/null +++ b/firmware/6_inverse_kinematics_webserver/main/main.c @@ -0,0 +1,67 @@ +#include "servo.h" +#include "freertos/task.h" + +#include "sra_board.h" + +#include +#include + +#include "tuning_http_server.h" + + +#define TAG "MCPWM_SERVO_CONTROL" + +servo_config servo_a = { + .servo_pin = SERVO_A, + .min_pulse_width = CONFIG_SERVO_A_MIN_PULSEWIDTH, + .max_pulse_width = CONFIG_SERVO_A_MAX_PULSEWIDTH, + .max_degree = CONFIG_SERVO_A_MAX_DEGREE, + .mcpwm_num = MCPWM_UNIT_0, + .timer_num = MCPWM_TIMER_0, + .gen = MCPWM_OPR_A, +}; + +servo_config servo_b = { + .servo_pin = SERVO_B, + .min_pulse_width = CONFIG_SERVO_B_MIN_PULSEWIDTH, + .max_pulse_width = CONFIG_SERVO_B_MAX_PULSEWIDTH, + .max_degree = CONFIG_SERVO_B_MAX_DEGREE, + .mcpwm_num = MCPWM_UNIT_0, + .timer_num = MCPWM_TIMER_0, + .gen = MCPWM_OPR_B, +}; + +servo_config servo_c = { + .servo_pin = SERVO_C, + .min_pulse_width = CONFIG_SERVO_C_MIN_PULSEWIDTH, + .max_pulse_width = CONFIG_SERVO_C_MAX_PULSEWIDTH, + .max_degree = CONFIG_SERVO_C_MAX_DEGREE, + .mcpwm_num = MCPWM_UNIT_0, + .timer_num = MCPWM_TIMER_1, + .gen = MCPWM_OPR_A, +}; + +static void mcpwm_servo_control(void *arg) +{ + enable_servo(); + + while(1) + { + + set_angle_servo(&servo_a,(read_servo_const().servo_a)); + vTaskDelay(100); + set_angle_servo(&servo_b,(read_servo_const().servo_b)); + vTaskDelay(100); + set_angle_servo(&servo_c,(read_servo_const().servo_c)); + vTaskDelay(100); + + } +} + +void app_main() +{ + ESP_LOGD(TAG,"Testing servo motors\n"); + xTaskCreate(mcpwm_servo_control, "mcpwm_example_servo_control", 4096, NULL, 5, NULL); + start_tuning_http_server(); +} + diff --git a/firmware/6_inverse_kinematics_webserver/main/tuning_http_server.c b/firmware/6_inverse_kinematics_webserver/main/tuning_http_server.c new file mode 100644 index 0000000..fa2acf8 --- /dev/null +++ b/firmware/6_inverse_kinematics_webserver/main/tuning_http_server.c @@ -0,0 +1,318 @@ +#include "tuning_http_server.h" +#include "inverse_kinematics.h" + +static const char *TAG = "tuning_http_server"; +static char scratch[SCRATCH_BUFSIZE]; +static servo_const_t servo_constants = {.servo_a = 0.0, .servo_b = 0.0, .servo_c = 0.0}; +static xyz_coords xyz_coordinates = {.x =0.0 , .y = 0.0 , .z =24.0}; +double tx,ty,tz; + +static void initialise_mdns(void) +{ + mdns_init(); + mdns_hostname_set(MDNS_HOST_NAME); + mdns_instance_name_set(MDNS_INSTANCE); + + mdns_txt_item_t serviceTxtData[] = { + {"board", "esp32"}, + {"path", "/"}}; + + ESP_ERROR_CHECK(mdns_service_add("ESP32-WebServer", "_http", "_tcp", 80, serviceTxtData, + sizeof(serviceTxtData) / sizeof(serviceTxtData[0]))); +} + +static esp_err_t init_fs(void) +{ + esp_vfs_spiffs_conf_t conf = { + .base_path = WEB_MOUNT_POINT, + .partition_label = NULL, + .max_files = 5, + .format_if_mount_failed = false}; + esp_err_t ret = esp_vfs_spiffs_register(&conf); + + if (ret != ESP_OK) + { + if (ret == ESP_FAIL) + { + ESP_LOGE(TAG, "Failed to mount or format filesystem"); + } + else if (ret == ESP_ERR_NOT_FOUND) + { + ESP_LOGE(TAG, "Failed to find SPIFFS partition"); + } + else + { + ESP_LOGE(TAG, "Failed to initialize SPIFFS (%s)", esp_err_to_name(ret)); + } + return ESP_FAIL; + } + + size_t total = 0, used = 0; + ret = esp_spiffs_info(NULL, &total, &used); + if (ret != ESP_OK) + { + ESP_LOGE(TAG, "Failed to get SPIFFS partition information (%s)", esp_err_to_name(ret)); + } + else + { + ESP_LOGI(TAG, "Partition size: total: %d, used: %d", total, used); + } + return ESP_OK; +} + +/* Set HTTP response content type according to file extension */ +static esp_err_t set_content_type_from_file(httpd_req_t *req, const char *filepath) +{ + const char *type = "text/plain"; + if (CHECK_FILE_EXTENSION(filepath, ".html")) + { + type = "text/html"; + } + else if (CHECK_FILE_EXTENSION(filepath, ".js")) + { + type = "application/javascript"; + } + else if (CHECK_FILE_EXTENSION(filepath, ".css")) + { + type = "text/css"; + } + else if (CHECK_FILE_EXTENSION(filepath, ".png")) + { + type = "image/png"; + } + else if (CHECK_FILE_EXTENSION(filepath, ".ico")) + { + type = "image/x-icon"; + } + else if (CHECK_FILE_EXTENSION(filepath, ".svg")) + { + type = "text/xml"; + } + return httpd_resp_set_type(req, type); +} + +/* Send HTTP response with the contents of the requested file */ +static esp_err_t rest_common_get_handler(httpd_req_t *req) +{ + char filepath[FILE_PATH_MAX] = WEB_MOUNT_POINT; + + if (strlen(req->uri) > 0 && req->uri[strlen(req->uri) - 1] == '/') + { + strlcat(filepath, "/index.html", sizeof(filepath)); + } + else + { + strlcat(filepath, req->uri, sizeof(filepath)); + } + + int fd = open(filepath, O_RDONLY, 0); + if (fd == -1) + { + ESP_LOGE(TAG, "Failed to open file : %s", filepath); + /* Respond with 500 Internal Server Error */ + httpd_resp_send_err(req, HTTPD_500_INTERNAL_SERVER_ERROR, "Failed to read existing file"); + return ESP_FAIL; + } + + set_content_type_from_file(req, filepath); + + char *chunk = scratch; + memset(scratch, '\0', SCRATCH_BUFSIZE); + ssize_t read_bytes; + do + { + /* Read file in chunks into the scratch buffer */ + read_bytes = read(fd, chunk, SCRATCH_BUFSIZE); + if (read_bytes == -1) + { + ESP_LOGE(TAG, "Failed to read file : %s", filepath); + } + else if (read_bytes > 0) + { + /* Send the buffer contents as HTTP response chunk */ + if (httpd_resp_send_chunk(req, chunk, read_bytes) != ESP_OK) + { + close(fd); + ESP_LOGE(TAG, "File sending failed!"); + /* Abort sending file */ + httpd_resp_sendstr_chunk(req, NULL); + /* Respond with 500 Internal Server Error */ + httpd_resp_send_err(req, HTTPD_500_INTERNAL_SERVER_ERROR, "Failed to send file"); + return ESP_FAIL; + } + } + } while (read_bytes > 0); + /* Close file after sending complete */ + close(fd); + ESP_LOGI(TAG, "File sending complete"); + /* Respond with an empty chunk to signal HTTP response completion */ + httpd_resp_send_chunk(req, NULL, 0); + return ESP_OK; +} + +/* Simple handler for light brightness control */ +static esp_err_t tuning_servo_post_handler(httpd_req_t *req) +{ + int total_len = req->content_len; + int cur_len = 0; + char *buf = scratch; + memset(scratch, '\0', SCRATCH_BUFSIZE); + int received = 0; + if (total_len >= SCRATCH_BUFSIZE) + { + /* Respond with 500 Internal Server Error */ + httpd_resp_send_err(req, HTTPD_500_INTERNAL_SERVER_ERROR, "content too long"); + return ESP_FAIL; + } + while (cur_len < total_len) + { + received = httpd_req_recv(req, buf + cur_len, total_len); + if (received <= 0) + { + /* Respond with 500 Internal Server Error */ + httpd_resp_send_err(req, HTTPD_500_INTERNAL_SERVER_ERROR, "Failed to post control value"); + return ESP_FAIL; + } + cur_len += received; + } + buf[total_len] = '\0'; + + cJSON *root = cJSON_Parse(buf); + if (root == NULL) + { + ESP_LOGE(TAG, "invalid json response"); + return ESP_FAIL; + } + + if (!cJSON_HasObjectItem(root, "servo_a") || !cJSON_HasObjectItem(root, "servo_b") || !cJSON_HasObjectItem(root, "servo_c")) + { + ESP_LOGE(TAG, "invalid json response"); + return ESP_FAIL; + } + + // Reads values from server + xyz_coordinates.x = (double)cJSON_GetObjectItem(root, "servo_a")->valuedouble; + xyz_coordinates.y = (double)cJSON_GetObjectItem(root, "servo_b")->valuedouble; + xyz_coordinates.z = (double)cJSON_GetObjectItem(root, "servo_c")->valuedouble; + + cJSON_Delete(root); + httpd_resp_sendstr(req, "Post control value successfully"); + return ESP_OK; +} + +static esp_err_t start_tuning_http_server_private() +{ + httpd_handle_t server = NULL; + httpd_config_t config = HTTPD_DEFAULT_CONFIG(); + config.uri_match_fn = httpd_uri_match_wildcard; + + ESP_LOGI(TAG, "Starting HTTP Server"); + if (httpd_start(&server, &config) != ESP_OK) + { + ESP_LOGE(TAG, "start server failed"); + return ESP_FAIL; + } + + httpd_uri_t tuning_servo_post_uri = { + .uri = "/api/v1/servo", + .method = HTTP_POST, + .handler = tuning_servo_post_handler, + .user_ctx = NULL}; + if (httpd_register_uri_handler(server, &tuning_servo_post_uri) != ESP_OK) + { + ESP_LOGE(TAG, "register post uri failed"); + return ESP_FAIL; + } + + httpd_uri_t common_get_uri = { + .uri = "/*", + .method = HTTP_GET, + .handler = rest_common_get_handler, + .user_ctx = NULL}; + if (httpd_register_uri_handler(server, &common_get_uri) != ESP_OK) + { + ESP_LOGE(TAG, "register get uri failed"); + return ESP_FAIL; + } + + return ESP_OK; +} + +servo_const_t computeAngles(double *angles) +{ + int index = -1; + // Index = 0 denotes set of first three angles ; Index = 3 denotes set of last three angles ; Index = -1 denotes Invalid values + int count = 0; + if (angles[0] != -9.0 && angles[1] != -9.0 && angles[2] != -9.0) + { + if ((0.0 <= angles[0] && angles[0] <= 180.0) && (0.0 <= angles[1] && angles[1] <= 180.0) && (0.0 <= angles[2] && angles[2] <= 180.0)) + { + index = 0; + count += 1; + } + if ((0.0 <= angles[3] && angles[3] <= 180.0) && (0.0 <= angles[4] && angles[4] <= 180.0) && (0.0 <= angles[5] && angles[5] <= 180.0)) + { + index = 3; + count += 1; + } + } + if (index != -1) + { + if (count == 2) + { + // To handle redundancy + // Always sending those angles having approach vector as (0, 0, 1) + // Condition for that is theta_shoulder + theta_elbow should be odd multiple of 180 + if ((((int)(angles[1] + angles[2]) % (2 * 180)) != 0) && (((int)(angles[1] + angles[2]) % 180) == 0)) + { + index = 0; + } + else if (((int)(angles[3] + angles[4]) % (2 * 180)) != 0 && (((int)(angles[3] + angles[4]) % 180) == 0)) + { + index = 3; + } + } + + // Sets servo angles + servo_constants.servo_a = (angles[index + 0]); + servo_constants.servo_b = (angles[index + 1]); + servo_constants.servo_c = (angles[index + 2]); + ESP_LOGE("VALUES : "," %f %f %f \n",servo_constants.servo_a,servo_constants.servo_b,servo_constants.servo_c); + return servo_constants; + } + else + { + ESP_LOGE("Kinematics","Invalid Values\n"); + return servo_constants; + } +} + +servo_const_t read_servo_const() +{ + // To avoid repeated calculations for same angles + if(tx!=xyz_coordinates.x || ty!=xyz_coordinates.y || tz != xyz_coordinates.z) + { + tx = xyz_coordinates.x; + ty = xyz_coordinates.y; + tz = xyz_coordinates.z; + return computeAngles(applyInverseKinematics(xyz_coordinates.x,xyz_coordinates.y,xyz_coordinates.z)); + } + else + return servo_constants; +} + +void start_tuning_http_server() +{ + ESP_ERROR_CHECK(nvs_flash_init()); + ESP_ERROR_CHECK(esp_netif_init()); + ESP_ERROR_CHECK(esp_event_loop_create_default()); + initialise_mdns(); + netbiosns_init(); + netbiosns_set_name(MDNS_HOST_NAME); + + connect_to_wifi(); + ESP_ERROR_CHECK(init_fs()); + ESP_ERROR_CHECK(start_tuning_http_server_private()); + + vTaskDelete(NULL); +} diff --git a/firmware/6_inverse_kinematics_webserver/main/wifi_handler.c b/firmware/6_inverse_kinematics_webserver/main/wifi_handler.c new file mode 100644 index 0000000..f533532 --- /dev/null +++ b/firmware/6_inverse_kinematics_webserver/main/wifi_handler.c @@ -0,0 +1,118 @@ +#include "wifi_handler.h" + +static EventGroupHandle_t s_wifi_event_group; +static const char *TAG = "wifi station"; +static int s_retry_num = 0; + +static void event_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data) +{ + if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) + { + esp_wifi_connect(); + } + else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) + { + if (s_retry_num < MAXIMUM_RETRY) { + esp_wifi_connect(); + s_retry_num++; + ESP_LOGI(TAG, "retry to connect to the AP"); + } else { + xEventGroupSetBits(s_wifi_event_group, WIFI_FAIL_BIT); + } + ESP_LOGI(TAG,"connect to the AP fail"); + } + else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) + { + ip_event_got_ip_t* event = (ip_event_got_ip_t*) event_data; + ESP_LOGI(TAG, "got ip:" IPSTR, IP2STR(&event->ip_info.ip)); + s_retry_num = 0; + xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT); + } +} + +void wifi_init_sta(void) +{ + s_wifi_event_group = xEventGroupCreate(); + + ESP_ERROR_CHECK(esp_netif_init()); + + esp_netif_create_default_wifi_sta(); + + wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); + ESP_ERROR_CHECK(esp_wifi_init(&cfg)); + + esp_event_handler_instance_t instance_any_id; + esp_event_handler_instance_t instance_got_ip; + ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT, + ESP_EVENT_ANY_ID, + &event_handler, + NULL, + &instance_any_id)); + ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT, + IP_EVENT_STA_GOT_IP, + &event_handler, + NULL, + &instance_got_ip)); + + wifi_config_t wifi_config = { + .sta = { + .ssid = WIFI_SSID, + .password = WIFI_PASS, + /* Setting a password implies station will connect to all security modes including WEP/WPA. + * However these modes are deprecated and not advisable to be used. Incase your Access point + * doesn't support WPA2, these mode can be enabled by commenting below line */ + .threshold.authmode = WIFI_AUTH_WPA2_PSK, + + .pmf_cfg = { + .capable = true, + .required = false + }, + }, + }; + ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA) ); + ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config) ); + ESP_ERROR_CHECK(esp_wifi_start() ); + + ESP_LOGI(TAG, "wifi_init_sta finished."); + + /* Waiting until either the connection is established (WIFI_CONNECTED_BIT) or connection failed for the maximum + * number of re-tries (WIFI_FAIL_BIT). The bits are set by event_handler() (see above) */ + EventBits_t bits = xEventGroupWaitBits(s_wifi_event_group, + WIFI_CONNECTED_BIT | WIFI_FAIL_BIT, + pdFALSE, + pdFALSE, + portMAX_DELAY); + + /* xEventGroupWaitBits() returns the bits before the call returned, hence we can test which event actually + * happened. */ + if (bits & WIFI_CONNECTED_BIT) + { + ESP_LOGI(TAG, "connected to ap SSID: %s", WIFI_SSID); + } + else if (bits & WIFI_FAIL_BIT) + { + ESP_LOGI(TAG, "Failed to connect to SSID: %s", WIFI_SSID); + } + else + { + ESP_LOGE(TAG, "UNEXPECTED EVENT"); + } + + ESP_ERROR_CHECK(esp_event_handler_instance_unregister(IP_EVENT, IP_EVENT_STA_GOT_IP, instance_got_ip)); + ESP_ERROR_CHECK(esp_event_handler_instance_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, instance_any_id)); + vEventGroupDelete(s_wifi_event_group); +} + +void connect_to_wifi() +{ + esp_err_t ret = nvs_flash_init(); + if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) + { + ESP_ERROR_CHECK(nvs_flash_erase()); + ret = nvs_flash_init(); + } + ESP_ERROR_CHECK(ret); + + ESP_LOGI(TAG, "ESP_WIFI_MODE_STA"); + wifi_init_sta(); +} diff --git a/firmware/6_inverse_kinematics_webserver/partition_table.csv b/firmware/6_inverse_kinematics_webserver/partition_table.csv new file mode 100644 index 0000000..0ac1978 --- /dev/null +++ b/firmware/6_inverse_kinematics_webserver/partition_table.csv @@ -0,0 +1,6 @@ +# Name, Type, SubType, Offset, Size, Flags +# Note: if you have increased the bootloader size, make sure to update the offsets to avoid overlap +nvs, data, nvs, 0x9000, 0x6000, +phy_init, data, phy, 0xf000, 0x1000, +factory, app, factory, 0x10000, 1M, +www, data, spiffs, , 1M, diff --git a/firmware/6_inverse_kinematics_webserver/sdkconfig b/firmware/6_inverse_kinematics_webserver/sdkconfig new file mode 100644 index 0000000..8622b3b --- /dev/null +++ b/firmware/6_inverse_kinematics_webserver/sdkconfig @@ -0,0 +1,1226 @@ +# +# Automatically generated file. DO NOT EDIT. +# Espressif IoT Development Framework (ESP-IDF) Project Configuration +# +CONFIG_IDF_CMAKE=y +CONFIG_IDF_TARGET="esp32" +CONFIG_IDF_TARGET_ESP32=y +CONFIG_IDF_FIRMWARE_CHIP_ID=0x0000 + +# +# SDK tool configuration +# +CONFIG_SDK_TOOLPREFIX="xtensa-esp32-elf-" +# CONFIG_SDK_TOOLCHAIN_SUPPORTS_TIME_WIDE_64_BITS is not set +# end of SDK tool configuration + +# +# Build type +# +CONFIG_APP_BUILD_TYPE_APP_2NDBOOT=y +# CONFIG_APP_BUILD_TYPE_ELF_RAM is not set +CONFIG_APP_BUILD_GENERATE_BINARIES=y +CONFIG_APP_BUILD_BOOTLOADER=y +CONFIG_APP_BUILD_USE_FLASH_SECTIONS=y +# end of Build type + +# +# Application manager +# +CONFIG_APP_COMPILE_TIME_DATE=y +# CONFIG_APP_EXCLUDE_PROJECT_VER_VAR is not set +# CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR is not set +# CONFIG_APP_PROJECT_VER_FROM_CONFIG is not set +CONFIG_APP_RETRIEVE_LEN_ELF_SHA=16 +# end of Application manager + +# +# Bootloader config +# +CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y +# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG is not set +# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_PERF is not set +# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_NONE is not set +# CONFIG_BOOTLOADER_LOG_LEVEL_NONE is not set +# CONFIG_BOOTLOADER_LOG_LEVEL_ERROR is not set +# CONFIG_BOOTLOADER_LOG_LEVEL_WARN is not set +CONFIG_BOOTLOADER_LOG_LEVEL_INFO=y +# CONFIG_BOOTLOADER_LOG_LEVEL_DEBUG is not set +# CONFIG_BOOTLOADER_LOG_LEVEL_VERBOSE is not set +CONFIG_BOOTLOADER_LOG_LEVEL=3 +# CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_8V is not set +CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_9V=y +# CONFIG_BOOTLOADER_FACTORY_RESET is not set +# CONFIG_BOOTLOADER_APP_TEST is not set +CONFIG_BOOTLOADER_WDT_ENABLE=y +# CONFIG_BOOTLOADER_WDT_DISABLE_IN_USER_CODE is not set +CONFIG_BOOTLOADER_WDT_TIME_MS=9000 +# CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE is not set +# CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP is not set +CONFIG_BOOTLOADER_RESERVE_RTC_SIZE=0 +# CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC is not set +# end of Bootloader config + +# +# Security features +# +# CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT is not set +# CONFIG_SECURE_BOOT is not set +# CONFIG_SECURE_FLASH_ENC_ENABLED is not set +# end of Security features + +# +# Serial flasher config +# +CONFIG_ESPTOOLPY_BAUD_OTHER_VAL=115200 +CONFIG_ESPTOOLPY_WITH_STUB=y +# CONFIG_ESPTOOLPY_FLASHMODE_QIO is not set +# CONFIG_ESPTOOLPY_FLASHMODE_QOUT is not set +CONFIG_ESPTOOLPY_FLASHMODE_DIO=y +# CONFIG_ESPTOOLPY_FLASHMODE_DOUT is not set +CONFIG_ESPTOOLPY_FLASHMODE="dio" +# CONFIG_ESPTOOLPY_FLASHFREQ_80M is not set +CONFIG_ESPTOOLPY_FLASHFREQ_40M=y +# CONFIG_ESPTOOLPY_FLASHFREQ_26M is not set +# CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set +CONFIG_ESPTOOLPY_FLASHFREQ="40m" +# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_2MB is not set +CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y +# CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set +CONFIG_ESPTOOLPY_FLASHSIZE="4MB" +CONFIG_ESPTOOLPY_FLASHSIZE_DETECT=y +CONFIG_ESPTOOLPY_BEFORE_RESET=y +# CONFIG_ESPTOOLPY_BEFORE_NORESET is not set +CONFIG_ESPTOOLPY_BEFORE="default_reset" +CONFIG_ESPTOOLPY_AFTER_RESET=y +# CONFIG_ESPTOOLPY_AFTER_NORESET is not set +CONFIG_ESPTOOLPY_AFTER="hard_reset" +# CONFIG_ESPTOOLPY_MONITOR_BAUD_9600B is not set +# CONFIG_ESPTOOLPY_MONITOR_BAUD_57600B is not set +CONFIG_ESPTOOLPY_MONITOR_BAUD_115200B=y +# CONFIG_ESPTOOLPY_MONITOR_BAUD_230400B is not set +# CONFIG_ESPTOOLPY_MONITOR_BAUD_921600B is not set +# CONFIG_ESPTOOLPY_MONITOR_BAUD_2MB is not set +# CONFIG_ESPTOOLPY_MONITOR_BAUD_OTHER is not set +CONFIG_ESPTOOLPY_MONITOR_BAUD_OTHER_VAL=115200 +CONFIG_ESPTOOLPY_MONITOR_BAUD=115200 +# end of Serial flasher config + +# +# Partition Table +# +# CONFIG_PARTITION_TABLE_SINGLE_APP is not set +# CONFIG_PARTITION_TABLE_TWO_OTA is not set +CONFIG_PARTITION_TABLE_CUSTOM=y +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partition_table.csv" +CONFIG_PARTITION_TABLE_FILENAME="partition_table.csv" +CONFIG_PARTITION_TABLE_OFFSET=0x8000 +CONFIG_PARTITION_TABLE_MD5=y +# end of Partition Table + +# +# Compiler options +# +CONFIG_COMPILER_OPTIMIZATION_DEFAULT=y +# CONFIG_COMPILER_OPTIMIZATION_SIZE is not set +# CONFIG_COMPILER_OPTIMIZATION_PERF is not set +# CONFIG_COMPILER_OPTIMIZATION_NONE is not set +CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y +# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set +# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE is not set +# CONFIG_COMPILER_CXX_EXCEPTIONS is not set +# CONFIG_COMPILER_CXX_RTTI is not set +CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y +# CONFIG_COMPILER_STACK_CHECK_MODE_NORM is not set +# CONFIG_COMPILER_STACK_CHECK_MODE_STRONG is not set +# CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set +# CONFIG_COMPILER_WARN_WRITE_STRINGS is not set +# CONFIG_COMPILER_DISABLE_GCC8_WARNINGS is not set +# end of Compiler options + +# +# Component config +# + +# +# Application Level Tracing +# +# CONFIG_APPTRACE_DEST_TRAX is not set +CONFIG_APPTRACE_DEST_NONE=y +CONFIG_APPTRACE_LOCK_ENABLE=y +# end of Application Level Tracing + +# +# Bluetooth +# +# CONFIG_BT_ENABLED is not set +CONFIG_BTDM_CTRL_BR_EDR_SCO_DATA_PATH_EFF=0 +CONFIG_BTDM_CTRL_PCM_ROLE_EFF=0 +CONFIG_BTDM_CTRL_PCM_POLAR_EFF=0 +CONFIG_BTDM_CTRL_BLE_MAX_CONN_EFF=0 +CONFIG_BTDM_CTRL_BR_EDR_MAX_ACL_CONN_EFF=0 +CONFIG_BTDM_CTRL_BR_EDR_MAX_SYNC_CONN_EFF=0 +CONFIG_BTDM_CTRL_PINNED_TO_CORE=0 +CONFIG_BTDM_BLE_SLEEP_CLOCK_ACCURACY_INDEX_EFF=1 +CONFIG_BT_RESERVE_DRAM=0 +# end of Bluetooth + +# +# CoAP Configuration +# +CONFIG_COAP_MBEDTLS_PSK=y +# CONFIG_COAP_MBEDTLS_PKI is not set +# CONFIG_COAP_MBEDTLS_DEBUG is not set +CONFIG_COAP_LOG_DEFAULT_LEVEL=0 +# end of CoAP Configuration + +# +# Driver configurations +# + +# +# ADC configuration +# +# CONFIG_ADC_FORCE_XPD_FSM is not set +CONFIG_ADC_DISABLE_DAC=y +# end of ADC configuration + +# +# SPI configuration +# +# CONFIG_SPI_MASTER_IN_IRAM is not set +CONFIG_SPI_MASTER_ISR_IN_IRAM=y +# CONFIG_SPI_SLAVE_IN_IRAM is not set +CONFIG_SPI_SLAVE_ISR_IN_IRAM=y +# end of SPI configuration + +# +# UART configuration +# +# CONFIG_UART_ISR_IN_IRAM is not set +# end of UART configuration + +# +# RTCIO configuration +# +# CONFIG_RTCIO_SUPPORT_RTC_GPIO_DESC is not set +# end of RTCIO configuration +# end of Driver configurations + +# +# eFuse Bit Manager +# +# CONFIG_EFUSE_CUSTOM_TABLE is not set +# CONFIG_EFUSE_VIRTUAL is not set +# CONFIG_EFUSE_CODE_SCHEME_COMPAT_NONE is not set +CONFIG_EFUSE_CODE_SCHEME_COMPAT_3_4=y +# CONFIG_EFUSE_CODE_SCHEME_COMPAT_REPEAT is not set +CONFIG_EFUSE_MAX_BLK_LEN=192 +# end of eFuse Bit Manager + +# +# ESP-TLS +# +CONFIG_ESP_TLS_USING_MBEDTLS=y +# CONFIG_ESP_TLS_USE_SECURE_ELEMENT is not set +# CONFIG_ESP_TLS_SERVER is not set +# CONFIG_ESP_TLS_PSK_VERIFICATION is not set +# end of ESP-TLS + +# +# ESP32-specific +# +CONFIG_ESP32_REV_MIN_0=y +# CONFIG_ESP32_REV_MIN_1 is not set +# CONFIG_ESP32_REV_MIN_2 is not set +# CONFIG_ESP32_REV_MIN_3 is not set +CONFIG_ESP32_REV_MIN=0 +CONFIG_ESP32_DPORT_WORKAROUND=y +# CONFIG_ESP32_DEFAULT_CPU_FREQ_80 is not set +CONFIG_ESP32_DEFAULT_CPU_FREQ_160=y +# CONFIG_ESP32_DEFAULT_CPU_FREQ_240 is not set +CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=160 +# CONFIG_ESP32_SPIRAM_SUPPORT is not set +# CONFIG_ESP32_TRAX is not set +CONFIG_ESP32_TRACEMEM_RESERVE_DRAM=0x0 +# CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_TWO is not set +CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_FOUR=y +CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES=4 +# CONFIG_ESP32_ULP_COPROC_ENABLED is not set +CONFIG_ESP32_ULP_COPROC_RESERVE_MEM=0 +CONFIG_ESP32_DEBUG_OCDAWARE=y +CONFIG_ESP32_BROWNOUT_DET=y +CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_0=y +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_1 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_2 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_6 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_7 is not set +CONFIG_ESP32_BROWNOUT_DET_LVL=0 +CONFIG_ESP32_REDUCE_PHY_TX_POWER=y +CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y +# CONFIG_ESP32_TIME_SYSCALL_USE_RTC is not set +# CONFIG_ESP32_TIME_SYSCALL_USE_FRC1 is not set +# CONFIG_ESP32_TIME_SYSCALL_USE_NONE is not set +CONFIG_ESP32_RTC_CLK_SRC_INT_RC=y +# CONFIG_ESP32_RTC_CLK_SRC_EXT_CRYS is not set +# CONFIG_ESP32_RTC_CLK_SRC_EXT_OSC is not set +# CONFIG_ESP32_RTC_CLK_SRC_INT_8MD256 is not set +CONFIG_ESP32_RTC_CLK_CAL_CYCLES=1024 +CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY=2000 +CONFIG_ESP32_XTAL_FREQ_40=y +# CONFIG_ESP32_XTAL_FREQ_26 is not set +# CONFIG_ESP32_XTAL_FREQ_AUTO is not set +CONFIG_ESP32_XTAL_FREQ=40 +# CONFIG_ESP32_DISABLE_BASIC_ROM_CONSOLE is not set +# CONFIG_ESP32_NO_BLOBS is not set +# CONFIG_ESP32_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set +# CONFIG_ESP32_USE_FIXED_STATIC_RAM_SIZE is not set +CONFIG_ESP32_DPORT_DIS_INTERRUPT_LVL=5 +# end of ESP32-specific + +# +# Power Management +# +# CONFIG_PM_ENABLE is not set +# end of Power Management + +# +# ADC-Calibration +# +CONFIG_ADC_CAL_EFUSE_TP_ENABLE=y +CONFIG_ADC_CAL_EFUSE_VREF_ENABLE=y +CONFIG_ADC_CAL_LUT_ENABLE=y +# end of ADC-Calibration + +# +# Common ESP-related +# +CONFIG_ESP_ERR_TO_NAME_LOOKUP=y +CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE=32 +CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=2304 +CONFIG_ESP_MAIN_TASK_STACK_SIZE=3584 +CONFIG_ESP_IPC_TASK_STACK_SIZE=1024 +CONFIG_ESP_IPC_USES_CALLERS_PRIORITY=y +CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE=2048 +CONFIG_ESP_CONSOLE_UART_DEFAULT=y +# CONFIG_ESP_CONSOLE_UART_CUSTOM is not set +# CONFIG_ESP_CONSOLE_UART_NONE is not set +CONFIG_ESP_CONSOLE_UART_NUM=0 +CONFIG_ESP_CONSOLE_UART_TX_GPIO=1 +CONFIG_ESP_CONSOLE_UART_RX_GPIO=3 +CONFIG_ESP_CONSOLE_UART_BAUDRATE=115200 +CONFIG_ESP_INT_WDT=y +CONFIG_ESP_INT_WDT_TIMEOUT_MS=300 +CONFIG_ESP_INT_WDT_CHECK_CPU1=y +CONFIG_ESP_TASK_WDT=y +# CONFIG_ESP_TASK_WDT_PANIC is not set +CONFIG_ESP_TASK_WDT_TIMEOUT_S=5 +CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=y +CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1=y +# CONFIG_ESP_PANIC_HANDLER_IRAM is not set +CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_STA=y +CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_AP=y +CONFIG_ESP_MAC_ADDR_UNIVERSE_BT=y +CONFIG_ESP_MAC_ADDR_UNIVERSE_BT_OFFSET=2 +CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH=y +# end of Common ESP-related + +# +# Ethernet +# +CONFIG_ETH_ENABLED=y +CONFIG_ETH_USE_ESP32_EMAC=y +CONFIG_ETH_PHY_INTERFACE_RMII=y +# CONFIG_ETH_PHY_INTERFACE_MII is not set +CONFIG_ETH_RMII_CLK_INPUT=y +# CONFIG_ETH_RMII_CLK_OUTPUT is not set +CONFIG_ETH_RMII_CLK_IN_GPIO=0 +CONFIG_ETH_DMA_BUFFER_SIZE=512 +CONFIG_ETH_DMA_RX_BUFFER_NUM=10 +CONFIG_ETH_DMA_TX_BUFFER_NUM=10 +CONFIG_ETH_USE_SPI_ETHERNET=y +# CONFIG_ETH_SPI_ETHERNET_DM9051 is not set +# CONFIG_ETH_USE_OPENETH is not set +# end of Ethernet + +# +# Event Loop Library +# +# CONFIG_ESP_EVENT_LOOP_PROFILING is not set +CONFIG_ESP_EVENT_POST_FROM_ISR=y +CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR=y +# end of Event Loop Library + +# +# GDB Stub +# +# end of GDB Stub + +# +# ESP HTTP client +# +CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=y +# CONFIG_ESP_HTTP_CLIENT_ENABLE_BASIC_AUTH is not set +# end of ESP HTTP client + +# +# HTTP Server +# +CONFIG_HTTPD_MAX_REQ_HDR_LEN=512 +CONFIG_HTTPD_MAX_URI_LEN=512 +CONFIG_HTTPD_ERR_RESP_NO_DELAY=y +CONFIG_HTTPD_PURGE_BUF_LEN=32 +# CONFIG_HTTPD_LOG_PURGE_DATA is not set +# CONFIG_HTTPD_WS_SUPPORT is not set +# end of HTTP Server + +# +# ESP HTTPS OTA +# +# CONFIG_OTA_ALLOW_HTTP is not set +# end of ESP HTTPS OTA + +# +# ESP HTTPS server +# +# CONFIG_ESP_HTTPS_SERVER_ENABLE is not set +# end of ESP HTTPS server + +# +# ESP NETIF Adapter +# +CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL=120 +CONFIG_ESP_NETIF_TCPIP_LWIP=y +# CONFIG_ESP_NETIF_LOOPBACK is not set +CONFIG_ESP_NETIF_TCPIP_ADAPTER_COMPATIBLE_LAYER=y +# end of ESP NETIF Adapter + +# +# ESP System Settings +# +# CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT is not set +CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y +# CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set +# CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set +# end of ESP System Settings + +# +# High resolution timer (esp_timer) +# +# CONFIG_ESP_TIMER_PROFILING is not set +CONFIG_ESP_TIMER_TASK_STACK_SIZE=3584 +# CONFIG_ESP_TIMER_IMPL_FRC2 is not set +CONFIG_ESP_TIMER_IMPL_TG0_LAC=y +# end of High resolution timer (esp_timer) + +# +# Wi-Fi +# +CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10 +CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=32 +# CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set +CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y +CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1 +CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32 +# CONFIG_ESP32_WIFI_CSI_ENABLED is not set +CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y +CONFIG_ESP32_WIFI_TX_BA_WIN=6 +CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y +CONFIG_ESP32_WIFI_RX_BA_WIN=6 +CONFIG_ESP32_WIFI_NVS_ENABLED=y +CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0=y +# CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_1 is not set +CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752 +CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32 +# CONFIG_ESP32_WIFI_DEBUG_LOG_ENABLE is not set +CONFIG_ESP32_WIFI_IRAM_OPT=y +CONFIG_ESP32_WIFI_RX_IRAM_OPT=y +CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE=y +# end of Wi-Fi + +# +# PHY +# +CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y +# CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set +CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 +CONFIG_ESP32_PHY_MAX_TX_POWER=20 +# end of PHY + +# +# Core dump +# +# CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set +# CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set +CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y +# end of Core dump + +# +# FAT Filesystem support +# +# CONFIG_FATFS_CODEPAGE_DYNAMIC is not set +CONFIG_FATFS_CODEPAGE_437=y +# CONFIG_FATFS_CODEPAGE_720 is not set +# CONFIG_FATFS_CODEPAGE_737 is not set +# CONFIG_FATFS_CODEPAGE_771 is not set +# CONFIG_FATFS_CODEPAGE_775 is not set +# CONFIG_FATFS_CODEPAGE_850 is not set +# CONFIG_FATFS_CODEPAGE_852 is not set +# CONFIG_FATFS_CODEPAGE_855 is not set +# CONFIG_FATFS_CODEPAGE_857 is not set +# CONFIG_FATFS_CODEPAGE_860 is not set +# CONFIG_FATFS_CODEPAGE_861 is not set +# CONFIG_FATFS_CODEPAGE_862 is not set +# CONFIG_FATFS_CODEPAGE_863 is not set +# CONFIG_FATFS_CODEPAGE_864 is not set +# CONFIG_FATFS_CODEPAGE_865 is not set +# CONFIG_FATFS_CODEPAGE_866 is not set +# CONFIG_FATFS_CODEPAGE_869 is not set +# CONFIG_FATFS_CODEPAGE_932 is not set +# CONFIG_FATFS_CODEPAGE_936 is not set +# CONFIG_FATFS_CODEPAGE_949 is not set +# CONFIG_FATFS_CODEPAGE_950 is not set +CONFIG_FATFS_CODEPAGE=437 +CONFIG_FATFS_LFN_NONE=y +# CONFIG_FATFS_LFN_HEAP is not set +# CONFIG_FATFS_LFN_STACK is not set +CONFIG_FATFS_FS_LOCK=0 +CONFIG_FATFS_TIMEOUT_MS=10000 +CONFIG_FATFS_PER_FILE_CACHE=y +# end of FAT Filesystem support + +# +# Modbus configuration +# +CONFIG_FMB_COMM_MODE_RTU_EN=y +CONFIG_FMB_COMM_MODE_ASCII_EN=y +CONFIG_FMB_MASTER_TIMEOUT_MS_RESPOND=150 +CONFIG_FMB_MASTER_DELAY_MS_CONVERT=200 +CONFIG_FMB_QUEUE_LENGTH=20 +CONFIG_FMB_SERIAL_TASK_STACK_SIZE=2048 +CONFIG_FMB_SERIAL_BUF_SIZE=256 +CONFIG_FMB_SERIAL_ASCII_BITS_PER_SYMB=8 +CONFIG_FMB_SERIAL_ASCII_TIMEOUT_RESPOND_MS=1000 +CONFIG_FMB_SERIAL_TASK_PRIO=10 +# CONFIG_FMB_CONTROLLER_SLAVE_ID_SUPPORT is not set +CONFIG_FMB_CONTROLLER_NOTIFY_TIMEOUT=20 +CONFIG_FMB_CONTROLLER_NOTIFY_QUEUE_SIZE=20 +CONFIG_FMB_CONTROLLER_STACK_SIZE=4096 +CONFIG_FMB_EVENT_QUEUE_TIMEOUT=20 +CONFIG_FMB_TIMER_PORT_ENABLED=y +CONFIG_FMB_TIMER_GROUP=0 +CONFIG_FMB_TIMER_INDEX=0 +# CONFIG_FMB_TIMER_ISR_IN_IRAM is not set +# end of Modbus configuration + +# +# FreeRTOS +# +# CONFIG_FREERTOS_UNICORE is not set +CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF +CONFIG_FREERTOS_CORETIMER_0=y +# CONFIG_FREERTOS_CORETIMER_1 is not set +CONFIG_FREERTOS_HZ=100 +CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION=y +# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set +# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set +CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y +# CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set +CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_ASSERT_FAIL_ABORT=y +# CONFIG_FREERTOS_ASSERT_FAIL_PRINT_CONTINUE is not set +# CONFIG_FREERTOS_ASSERT_DISABLE is not set +CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1536 +CONFIG_FREERTOS_ISR_STACKSIZE=1536 +# CONFIG_FREERTOS_LEGACY_HOOKS is not set +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 +# CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION is not set +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +# CONFIG_FREERTOS_USE_TRACE_FACILITY is not set +# CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set +CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER=y +CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y +# CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set +CONFIG_FREERTOS_DEBUG_OCDAWARE=y +# CONFIG_FREERTOS_FPU_IN_ISR is not set +# end of FreeRTOS + +# +# Heap memory debugging +# +CONFIG_HEAP_POISONING_DISABLED=y +# CONFIG_HEAP_POISONING_LIGHT is not set +# CONFIG_HEAP_POISONING_COMPREHENSIVE is not set +CONFIG_HEAP_TRACING_OFF=y +# CONFIG_HEAP_TRACING_STANDALONE is not set +# CONFIG_HEAP_TRACING_TOHOST is not set +# CONFIG_HEAP_ABORT_WHEN_ALLOCATION_FAILS is not set +# end of Heap memory debugging + +# +# jsmn +# +# CONFIG_JSMN_PARENT_LINKS is not set +# CONFIG_JSMN_STRICT is not set +# end of jsmn + +# +# libsodium +# +# end of libsodium + +# +# Log output +# +# CONFIG_LOG_DEFAULT_LEVEL_NONE is not set +# CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set +# CONFIG_LOG_DEFAULT_LEVEL_WARN is not set +CONFIG_LOG_DEFAULT_LEVEL_INFO=y +# CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set +# CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set +CONFIG_LOG_DEFAULT_LEVEL=3 +CONFIG_LOG_COLORS=y +CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y +# CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set +# end of Log output + +# +# LWIP +# +CONFIG_LWIP_LOCAL_HOSTNAME="espressif" +CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y +# CONFIG_LWIP_L2_TO_L3_COPY is not set +# CONFIG_LWIP_IRAM_OPTIMIZATION is not set +CONFIG_LWIP_TIMERS_ONDEMAND=y +CONFIG_LWIP_MAX_SOCKETS=10 +# CONFIG_LWIP_USE_ONLY_LWIP_SELECT is not set +# CONFIG_LWIP_SO_LINGER is not set +CONFIG_LWIP_SO_REUSE=y +CONFIG_LWIP_SO_REUSE_RXTOALL=y +# CONFIG_LWIP_SO_RCVBUF is not set +# CONFIG_LWIP_NETBUF_RECVINFO is not set +CONFIG_LWIP_IP4_FRAG=y +CONFIG_LWIP_IP6_FRAG=y +# CONFIG_LWIP_IP4_REASSEMBLY is not set +# CONFIG_LWIP_IP6_REASSEMBLY is not set +# CONFIG_LWIP_IP_FORWARD is not set +# CONFIG_LWIP_STATS is not set +# CONFIG_LWIP_ETHARP_TRUST_IP_MAC is not set +CONFIG_LWIP_ESP_GRATUITOUS_ARP=y +CONFIG_LWIP_GARP_TMR_INTERVAL=60 +CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32 +CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y +# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set + +# +# DHCP server +# +CONFIG_LWIP_DHCPS_LEASE_UNIT=60 +CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8 +# end of DHCP server + +# CONFIG_LWIP_AUTOIP is not set +# CONFIG_LWIP_IPV6_AUTOCONFIG is not set +CONFIG_LWIP_NETIF_LOOPBACK=y +CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 + +# +# TCP +# +CONFIG_LWIP_MAX_ACTIVE_TCP=16 +CONFIG_LWIP_MAX_LISTENING_TCP=16 +CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y +CONFIG_LWIP_TCP_MAXRTX=12 +CONFIG_LWIP_TCP_SYNMAXRTX=12 +CONFIG_LWIP_TCP_MSS=1440 +CONFIG_LWIP_TCP_TMR_INTERVAL=250 +CONFIG_LWIP_TCP_MSL=60000 +CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744 +CONFIG_LWIP_TCP_WND_DEFAULT=5744 +CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 +CONFIG_LWIP_TCP_QUEUE_OOSEQ=y +# CONFIG_LWIP_TCP_SACK_OUT is not set +# CONFIG_LWIP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES is not set +CONFIG_LWIP_TCP_OVERSIZE_MSS=y +# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set +# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set +CONFIG_LWIP_TCP_RTO_TIME=1500 +# end of TCP + +# +# UDP +# +CONFIG_LWIP_MAX_UDP_PCBS=16 +CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 +# end of UDP + +CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072 +CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY=y +# CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU0 is not set +# CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU1 is not set +CONFIG_LWIP_TCPIP_TASK_AFFINITY=0x7FFFFFFF +# CONFIG_LWIP_PPP_SUPPORT is not set +CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3 +CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 + +# +# ICMP +# +# CONFIG_LWIP_MULTICAST_PING is not set +# CONFIG_LWIP_BROADCAST_PING is not set +# end of ICMP + +# +# LWIP RAW API +# +CONFIG_LWIP_MAX_RAW_PCBS=16 +# end of LWIP RAW API + +# +# SNTP +# +CONFIG_LWIP_DHCP_MAX_NTP_SERVERS=1 +CONFIG_LWIP_SNTP_UPDATE_DELAY=3600000 +# end of SNTP + +CONFIG_LWIP_ESP_LWIP_ASSERT=y +# end of LWIP + +# +# mbedTLS +# +CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC=y +# CONFIG_MBEDTLS_DEFAULT_MEM_ALLOC is not set +# CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC is not set +CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=y +CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=16384 +CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096 +# CONFIG_MBEDTLS_DYNAMIC_BUFFER is not set +# CONFIG_MBEDTLS_DEBUG is not set + +# +# Certificate Bundle +# +CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y +CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL=y +# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_CMN is not set +# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_NONE is not set +# CONFIG_MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE is not set +# end of Certificate Bundle + +# CONFIG_MBEDTLS_ECP_RESTARTABLE is not set +# CONFIG_MBEDTLS_CMAC_C is not set +CONFIG_MBEDTLS_HARDWARE_AES=y +CONFIG_MBEDTLS_HARDWARE_MPI=y +CONFIG_MBEDTLS_HARDWARE_SHA=y +# CONFIG_MBEDTLS_ATCA_HW_ECDSA_SIGN is not set +# CONFIG_MBEDTLS_ATCA_HW_ECDSA_VERIFY is not set +CONFIG_MBEDTLS_HAVE_TIME=y +# CONFIG_MBEDTLS_HAVE_TIME_DATE is not set +CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y +CONFIG_MBEDTLS_SHA512_C=y +CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y +# CONFIG_MBEDTLS_TLS_SERVER_ONLY is not set +# CONFIG_MBEDTLS_TLS_CLIENT_ONLY is not set +# CONFIG_MBEDTLS_TLS_DISABLED is not set +CONFIG_MBEDTLS_TLS_SERVER=y +CONFIG_MBEDTLS_TLS_CLIENT=y +CONFIG_MBEDTLS_TLS_ENABLED=y + +# +# TLS Key Exchange Methods +# +# CONFIG_MBEDTLS_PSK_MODES is not set +CONFIG_MBEDTLS_KEY_EXCHANGE_RSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA=y +# end of TLS Key Exchange Methods + +CONFIG_MBEDTLS_SSL_RENEGOTIATION=y +# CONFIG_MBEDTLS_SSL_PROTO_SSL3 is not set +CONFIG_MBEDTLS_SSL_PROTO_TLS1=y +CONFIG_MBEDTLS_SSL_PROTO_TLS1_1=y +CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y +# CONFIG_MBEDTLS_SSL_PROTO_DTLS is not set +CONFIG_MBEDTLS_SSL_ALPN=y +CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS=y +CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS=y + +# +# Symmetric Ciphers +# +CONFIG_MBEDTLS_AES_C=y +# CONFIG_MBEDTLS_CAMELLIA_C is not set +# CONFIG_MBEDTLS_DES_C is not set +CONFIG_MBEDTLS_RC4_DISABLED=y +# CONFIG_MBEDTLS_RC4_ENABLED_NO_DEFAULT is not set +# CONFIG_MBEDTLS_RC4_ENABLED is not set +# CONFIG_MBEDTLS_BLOWFISH_C is not set +# CONFIG_MBEDTLS_XTEA_C is not set +CONFIG_MBEDTLS_CCM_C=y +CONFIG_MBEDTLS_GCM_C=y +# end of Symmetric Ciphers + +# CONFIG_MBEDTLS_RIPEMD160_C is not set + +# +# Certificates +# +CONFIG_MBEDTLS_PEM_PARSE_C=y +CONFIG_MBEDTLS_PEM_WRITE_C=y +CONFIG_MBEDTLS_X509_CRL_PARSE_C=y +CONFIG_MBEDTLS_X509_CSR_PARSE_C=y +# end of Certificates + +CONFIG_MBEDTLS_ECP_C=y +CONFIG_MBEDTLS_ECDH_C=y +CONFIG_MBEDTLS_ECDSA_C=y +# CONFIG_MBEDTLS_ECJPAKE_C is not set +CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=y +CONFIG_MBEDTLS_ECP_NIST_OPTIM=y +# CONFIG_MBEDTLS_POLY1305_C is not set +# CONFIG_MBEDTLS_CHACHA20_C is not set +# CONFIG_MBEDTLS_HKDF_C is not set +# CONFIG_MBEDTLS_THREADING_C is not set +# CONFIG_MBEDTLS_SECURITY_RISKS is not set +# end of mbedTLS + +# +# mDNS +# +CONFIG_MDNS_MAX_SERVICES=10 +CONFIG_MDNS_TASK_PRIORITY=1 +CONFIG_MDNS_TASK_STACK_SIZE=4096 +# CONFIG_MDNS_TASK_AFFINITY_NO_AFFINITY is not set +CONFIG_MDNS_TASK_AFFINITY_CPU0=y +# CONFIG_MDNS_TASK_AFFINITY_CPU1 is not set +CONFIG_MDNS_TASK_AFFINITY=0x0 +CONFIG_MDNS_SERVICE_ADD_TIMEOUT_MS=2000 +CONFIG_MDNS_TIMER_PERIOD_MS=100 +# end of mDNS + +# +# ESP-MQTT Configurations +# +CONFIG_MQTT_PROTOCOL_311=y +CONFIG_MQTT_TRANSPORT_SSL=y +CONFIG_MQTT_TRANSPORT_WEBSOCKET=y +CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE=y +# CONFIG_MQTT_USE_CUSTOM_CONFIG is not set +# CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED is not set +# CONFIG_MQTT_CUSTOM_OUTBOX is not set +# end of ESP-MQTT Configurations + +# +# Newlib +# +CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y +# CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF is not set +# CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR is not set +# CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF is not set +# CONFIG_NEWLIB_STDIN_LINE_ENDING_LF is not set +CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y +# CONFIG_NEWLIB_NANO_FORMAT is not set +# end of Newlib + +# +# NVS +# +# end of NVS + +# +# OpenSSL +# +# CONFIG_OPENSSL_DEBUG is not set +# CONFIG_OPENSSL_ASSERT_DO_NOTHING is not set +CONFIG_OPENSSL_ASSERT_EXIT=y +# end of OpenSSL + +# +# PThreads +# +CONFIG_PTHREAD_TASK_PRIO_DEFAULT=5 +CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 +CONFIG_PTHREAD_STACK_MIN=768 +CONFIG_PTHREAD_DEFAULT_CORE_NO_AFFINITY=y +# CONFIG_PTHREAD_DEFAULT_CORE_0 is not set +# CONFIG_PTHREAD_DEFAULT_CORE_1 is not set +CONFIG_PTHREAD_TASK_CORE_DEFAULT=-1 +CONFIG_PTHREAD_TASK_NAME_DEFAULT="pthread" +# end of PThreads + +# +# SPI Flash driver +# +# CONFIG_SPI_FLASH_VERIFY_WRITE is not set +# CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set +CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y +CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS=y +# CONFIG_SPI_FLASH_DANGEROUS_WRITE_FAILS is not set +# CONFIG_SPI_FLASH_DANGEROUS_WRITE_ALLOWED is not set +# CONFIG_SPI_FLASH_USE_LEGACY_IMPL is not set +# CONFIG_SPI_FLASH_SHARE_SPI1_BUS is not set +# CONFIG_SPI_FLASH_BYPASS_BLOCK_ERASE is not set +CONFIG_SPI_FLASH_YIELD_DURING_ERASE=y +CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS=20 +CONFIG_SPI_FLASH_ERASE_YIELD_TICKS=1 + +# +# Auto-detect flash chips +# +CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP=y +CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP=y +CONFIG_SPI_FLASH_SUPPORT_GD_CHIP=y +# end of Auto-detect flash chips +# end of SPI Flash driver + +# +# SPIFFS Configuration +# +CONFIG_SPIFFS_MAX_PARTITIONS=3 + +# +# SPIFFS Cache Configuration +# +CONFIG_SPIFFS_CACHE=y +CONFIG_SPIFFS_CACHE_WR=y +# CONFIG_SPIFFS_CACHE_STATS is not set +# end of SPIFFS Cache Configuration + +CONFIG_SPIFFS_PAGE_CHECK=y +CONFIG_SPIFFS_GC_MAX_RUNS=10 +# CONFIG_SPIFFS_GC_STATS is not set +CONFIG_SPIFFS_PAGE_SIZE=256 +CONFIG_SPIFFS_OBJ_NAME_LEN=32 +# CONFIG_SPIFFS_FOLLOW_SYMLINKS is not set +CONFIG_SPIFFS_USE_MAGIC=y +CONFIG_SPIFFS_USE_MAGIC_LENGTH=y +CONFIG_SPIFFS_META_LENGTH=4 +CONFIG_SPIFFS_USE_MTIME=y + +# +# Debug Configuration +# +# CONFIG_SPIFFS_DBG is not set +# CONFIG_SPIFFS_API_DBG is not set +# CONFIG_SPIFFS_GC_DBG is not set +# CONFIG_SPIFFS_CACHE_DBG is not set +# CONFIG_SPIFFS_CHECK_DBG is not set +# CONFIG_SPIFFS_TEST_VISUALISATION is not set +# end of Debug Configuration +# end of SPIFFS Configuration + +# +# TinyUSB +# + +# +# Descriptor configuration +# +CONFIG_USB_DESC_CUSTOM_VID=0x1234 +CONFIG_USB_DESC_CUSTOM_PID=0x5678 +# end of Descriptor configuration +# end of TinyUSB + +# +# Unity unit testing library +# +CONFIG_UNITY_ENABLE_FLOAT=y +CONFIG_UNITY_ENABLE_DOUBLE=y +# CONFIG_UNITY_ENABLE_COLOR is not set +CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=y +# CONFIG_UNITY_ENABLE_FIXTURE is not set +# CONFIG_UNITY_ENABLE_BACKTRACE_ON_FAIL is not set +# end of Unity unit testing library + +# +# Virtual file system +# +CONFIG_VFS_SUPPORT_IO=y +CONFIG_VFS_SUPPORT_DIR=y +CONFIG_VFS_SUPPORT_SELECT=y +CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT=y +CONFIG_VFS_SUPPORT_TERMIOS=y + +# +# Host File System I/O (Semihosting) +# +CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS=1 +CONFIG_VFS_SEMIHOSTFS_HOST_PATH_MAX_LEN=128 +# end of Host File System I/O (Semihosting) +# end of Virtual file system + +# +# Wear Levelling +# +# CONFIG_WL_SECTOR_SIZE_512 is not set +CONFIG_WL_SECTOR_SIZE_4096=y +CONFIG_WL_SECTOR_SIZE=4096 +# end of Wear Levelling + +# +# Wi-Fi Provisioning Manager +# +CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES=16 +CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT=30 +# end of Wi-Fi Provisioning Manager + +# +# Supplicant +# +CONFIG_WPA_MBEDTLS_CRYPTO=y +# CONFIG_WPA_DEBUG_PRINT is not set +# CONFIG_WPA_TESTING_OPTIONS is not set +# CONFIG_WPA_WPS_WARS is not set +# end of Supplicant + +# +# MARIO testing +# + +# +# WiFi Config +# +CONFIG_WIFI_SSID="myssid" +CONFIG_WIFI_PASSWORD="mypassword" +CONFIG_MAXIMUM_RETRY=5 +# end of WiFi Config + +# +# mDNS Config +# +CONFIG_MDNS_HOST_NAME="walle-tuning" +# end of mDNS Config +# end of MARIO testing + +# +# MARIO-Rosserial +# +CONFIG_ROSSERIAL_OVER_WIFI=y +CONFIG_ROSSERVER_AP="myssid" +CONFIG_ROSSERVER_PASS="mypass" +CONFIG_ROSSERVER_IP="192.168.0.1" +CONFIG_ROSSERVER_PORT=11411 +# end of MARIO-Rosserial + +# +# SRA Board Component Config +# + +# +# Servo motor configuration +# + +# +# Servo A +# +CONFIG_SERVO_A_MIN_PULSEWIDTH=500 +CONFIG_SERVO_A_MAX_PULSEWIDTH=3000 +CONFIG_SERVO_A_MAX_DEGREE=180 +# end of Servo A + +# +# Servo B +# +CONFIG_SERVO_B_MIN_PULSEWIDTH=500 +CONFIG_SERVO_B_MAX_PULSEWIDTH=3000 +CONFIG_SERVO_B_MAX_DEGREE=180 +# end of Servo B + +# +# Servo C +# +CONFIG_SERVO_C_MIN_PULSEWIDTH=500 +CONFIG_SERVO_C_MAX_PULSEWIDTH=3000 +CONFIG_SERVO_C_MAX_DEGREE=180 +# end of Servo C +# end of Servo motor configuration + +CONFIG_NUMBER_OF_SAMPLES=64 +# end of SRA Board Component Config +# end of Component config + +# +# Compatibility options +# +# CONFIG_LEGACY_INCLUDE_COMMON_HEADERS is not set +# end of Compatibility options + +# Deprecated options for backward compatibility +CONFIG_TOOLPREFIX="xtensa-esp32-elf-" +# CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set +CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y +# CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set +CONFIG_LOG_BOOTLOADER_LEVEL=3 +# CONFIG_APP_ROLLBACK_ENABLE is not set +# CONFIG_FLASH_ENCRYPTION_ENABLED is not set +# CONFIG_FLASHMODE_QIO is not set +# CONFIG_FLASHMODE_QOUT is not set +CONFIG_FLASHMODE_DIO=y +# CONFIG_FLASHMODE_DOUT is not set +# CONFIG_MONITOR_BAUD_9600B is not set +# CONFIG_MONITOR_BAUD_57600B is not set +CONFIG_MONITOR_BAUD_115200B=y +# CONFIG_MONITOR_BAUD_230400B is not set +# CONFIG_MONITOR_BAUD_921600B is not set +# CONFIG_MONITOR_BAUD_2MB is not set +# CONFIG_MONITOR_BAUD_OTHER is not set +CONFIG_MONITOR_BAUD_OTHER_VAL=115200 +CONFIG_MONITOR_BAUD=115200 +CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG=y +# CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE is not set +CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y +# CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set +# CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set +# CONFIG_CXX_EXCEPTIONS is not set +CONFIG_STACK_CHECK_NONE=y +# CONFIG_STACK_CHECK_NORM is not set +# CONFIG_STACK_CHECK_STRONG is not set +# CONFIG_STACK_CHECK_ALL is not set +# CONFIG_WARN_WRITE_STRINGS is not set +# CONFIG_DISABLE_GCC8_WARNINGS is not set +# CONFIG_ESP32_APPTRACE_DEST_TRAX is not set +CONFIG_ESP32_APPTRACE_DEST_NONE=y +CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y +CONFIG_BTDM_CONTROLLER_BLE_MAX_CONN_EFF=0 +CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_ACL_CONN_EFF=0 +CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_SYNC_CONN_EFF=0 +CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE=0 +CONFIG_ADC2_DISABLE_DAC=y +# CONFIG_SPIRAM_SUPPORT is not set +CONFIG_TRACEMEM_RESERVE_DRAM=0x0 +# CONFIG_TWO_UNIVERSAL_MAC_ADDRESS is not set +CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y +CONFIG_NUMBER_OF_UNIVERSAL_MAC_ADDRESS=4 +# CONFIG_ULP_COPROC_ENABLED is not set +CONFIG_ULP_COPROC_RESERVE_MEM=0 +CONFIG_BROWNOUT_DET=y +CONFIG_BROWNOUT_DET_LVL_SEL_0=y +# CONFIG_BROWNOUT_DET_LVL_SEL_1 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_7 is not set +CONFIG_BROWNOUT_DET_LVL=0 +CONFIG_REDUCE_PHY_TX_POWER=y +CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC=y +# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL is not set +# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_OSC is not set +# CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_8MD256 is not set +# CONFIG_DISABLE_BASIC_ROM_CONSOLE is not set +# CONFIG_NO_BLOBS is not set +# CONFIG_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set +CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 +CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2304 +CONFIG_MAIN_TASK_STACK_SIZE=3584 +CONFIG_IPC_TASK_STACK_SIZE=1024 +CONFIG_CONSOLE_UART_DEFAULT=y +# CONFIG_CONSOLE_UART_CUSTOM is not set +# CONFIG_CONSOLE_UART_NONE is not set +CONFIG_CONSOLE_UART_NUM=0 +CONFIG_CONSOLE_UART_TX_GPIO=1 +CONFIG_CONSOLE_UART_RX_GPIO=3 +CONFIG_CONSOLE_UART_BAUDRATE=115200 +CONFIG_INT_WDT=y +CONFIG_INT_WDT_TIMEOUT_MS=300 +CONFIG_INT_WDT_CHECK_CPU1=y +CONFIG_TASK_WDT=y +# CONFIG_TASK_WDT_PANIC is not set +CONFIG_TASK_WDT_TIMEOUT_S=5 +CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=y +CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1=y +# CONFIG_EVENT_LOOP_PROFILING is not set +CONFIG_POST_EVENTS_FROM_ISR=y +CONFIG_POST_EVENTS_FROM_IRAM_ISR=y +# CONFIG_ESP32S2_PANIC_PRINT_HALT is not set +CONFIG_ESP32S2_PANIC_PRINT_REBOOT=y +# CONFIG_ESP32S2_PANIC_SILENT_REBOOT is not set +# CONFIG_ESP32S2_PANIC_GDBSTUB is not set +CONFIG_TIMER_TASK_STACK_SIZE=3584 +CONFIG_MB_MASTER_TIMEOUT_MS_RESPOND=150 +CONFIG_MB_MASTER_DELAY_MS_CONVERT=200 +CONFIG_MB_QUEUE_LENGTH=20 +CONFIG_MB_SERIAL_TASK_STACK_SIZE=2048 +CONFIG_MB_SERIAL_BUF_SIZE=256 +CONFIG_MB_SERIAL_TASK_PRIO=10 +# CONFIG_MB_CONTROLLER_SLAVE_ID_SUPPORT is not set +CONFIG_MB_CONTROLLER_NOTIFY_TIMEOUT=20 +CONFIG_MB_CONTROLLER_NOTIFY_QUEUE_SIZE=20 +CONFIG_MB_CONTROLLER_STACK_SIZE=4096 +CONFIG_MB_EVENT_QUEUE_TIMEOUT=20 +CONFIG_MB_TIMER_PORT_ENABLED=y +CONFIG_MB_TIMER_GROUP=0 +CONFIG_MB_TIMER_INDEX=0 +# CONFIG_SUPPORT_STATIC_ALLOCATION is not set +CONFIG_TIMER_TASK_PRIORITY=1 +CONFIG_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_TIMER_QUEUE_LENGTH=10 +# CONFIG_L2_TO_L3_COPY is not set +# CONFIG_USE_ONLY_LWIP_SELECT is not set +CONFIG_ESP_GRATUITOUS_ARP=y +CONFIG_GARP_TMR_INTERVAL=60 +CONFIG_TCPIP_RECVMBOX_SIZE=32 +CONFIG_TCP_MAXRTX=12 +CONFIG_TCP_SYNMAXRTX=12 +CONFIG_TCP_MSS=1440 +CONFIG_TCP_MSL=60000 +CONFIG_TCP_SND_BUF_DEFAULT=5744 +CONFIG_TCP_WND_DEFAULT=5744 +CONFIG_TCP_RECVMBOX_SIZE=6 +CONFIG_TCP_QUEUE_OOSEQ=y +# CONFIG_ESP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES is not set +CONFIG_TCP_OVERSIZE_MSS=y +# CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set +# CONFIG_TCP_OVERSIZE_DISABLE is not set +CONFIG_UDP_RECVMBOX_SIZE=6 +CONFIG_TCPIP_TASK_STACK_SIZE=3072 +CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY=y +# CONFIG_TCPIP_TASK_AFFINITY_CPU0 is not set +# CONFIG_TCPIP_TASK_AFFINITY_CPU1 is not set +CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF +# CONFIG_PPP_SUPPORT is not set +CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT=5 +CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 +CONFIG_ESP32_PTHREAD_STACK_MIN=768 +CONFIG_ESP32_DEFAULT_PTHREAD_CORE_NO_AFFINITY=y +# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_0 is not set +# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_1 is not set +CONFIG_ESP32_PTHREAD_TASK_CORE_DEFAULT=-1 +CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT="pthread" +CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y +# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_FAILS is not set +# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ALLOWED is not set +CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT=y +CONFIG_SUPPORT_TERMIOS=y +CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS=1 +CONFIG_SEMIHOSTFS_HOST_PATH_MAX_LEN=128 +# End of deprecated options From 7e847c0e1896a26c8f3ea9d9f5a7d316842b7fec Mon Sep 17 00:00:00 2001 From: Toshan Luktuke Date: Tue, 8 Feb 2022 22:43:21 +0530 Subject: [PATCH 4/4] Updated readme with new path --- firmware/6_inverse_kinematics_webserver/README.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/firmware/6_inverse_kinematics_webserver/README.md b/firmware/6_inverse_kinematics_webserver/README.md index 836bf8d..c8e5c27 100644 --- a/firmware/6_inverse_kinematics_webserver/README.md +++ b/firmware/6_inverse_kinematics_webserver/README.md @@ -1,17 +1,19 @@ # Servo Webserver Inverse Kinematics + This code implements inverse kinematics functionality to the existing webserver + ## Steps to Follow + - Configure the project - - `cd firmware/MARIO_Webserver` + - `cd firmware/6_inverse_kinematics_webserver` - `idf.py menuconfig` - `Component config -> MARIO testing -> WiFi Config -> Set SSID -> Set Password` - Build and Flash the Code - `idf.py build` - - `idf.py -p PORT flash` - - Monitor Logs - - `idf.py monitor` + - `idf.py -p PORT flash` +- Monitor Logs + - `idf.py monitor` - Access website via the ip shown in the `sta ip` part of the terminal. Paste `sta ip` in the browser to access the website -Note:- If it shows `cmake flash error`. Run the following: + Note:- If it shows `cmake flash error`. Run the following: - `sudo chmod 777 port` - `idf.py -p port flash` -