diff --git a/.gitignore b/.gitignore
index a2cde9a..58fa726 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@
/.metadata/
/ESP32/wifi-credentials.h
+/ESP32/src/wifi-credentials.h
diff --git a/ESP32/.cproject b/ESP32/.cproject
index 3f927c8..1753541 100644
--- a/ESP32/.cproject
+++ b/ESP32/.cproject
@@ -1,27 +1,591 @@
-
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ platformio
+ -f -c eclipse
+ run --target program
+ true
+ false
+ false
+
+
+ platformio
+ -f -c eclipse
+ run --target uploadfs
+ true
+ false
+ false
+
+
+ platformio
+ -f -c eclipse
+ run
+ true
+ false
+ false
+
+
+ platformio
+ -f -c eclipse
+ run --verbose
+ true
+ false
+ false
+
+
+ platformio
+ -f -c eclipse
+ run --target upload
+ true
+ false
+ false
+
+
+ platformio
+ -f -c eclipse
+ run --target upload --verbose
+ true
+ false
+ false
+
+
+ platformio
+ -f -c eclipse
+ run --target clean
+ true
+ false
+ false
+
+
+ platformio
+ -f -c eclipse
+ test
+ true
+ false
+ false
+
+
+ platformio
+ -f -c eclipse
+ remote run --target upload
+ true
+ false
+ false
+
+
+ platformio
+ -f -c eclipse
+ init --ide eclipse
+ true
+ false
+ false
+
+
+ platformio
+ -f -c eclipse
+ device list
+ true
+ false
+ false
+
+
+ platformio
+ -f -c eclipse
+ lib update
+ true
+ false
+ false
+
+
+ platformio
+ -f -c eclipse
+ update
+ true
+ false
+ false
+
+
+ platformio
+ -f -c eclipse
+ upgrade
+ true
+ false
+ false
+
+
-
\ No newline at end of file
+
diff --git a/ESP32/.gitignore b/ESP32/.gitignore
index 84c048a..03f4a3c 100644
--- a/ESP32/.gitignore
+++ b/ESP32/.gitignore
@@ -1 +1 @@
-/build/
+.pio
diff --git a/ESP32/.project b/ESP32/.project
index 978d3e4..3cb07a2 100644
--- a/ESP32/.project
+++ b/ESP32/.project
@@ -6,15 +6,22 @@
- org.eclipse.cdt.core.cBuilder
+ org.eclipse.cdt.managedbuilder.core.genmakebuilderclean,full,incremental,
+
+ org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder
+ full,incremental,
+
+
+ org.eclipse.cdt.core.cnatureorg.eclipse.cdt.core.ccnature
- org.eclipse.cdt.make.core.makeNature
+ org.eclipse.cdt.managedbuilder.core.managedBuildNature
+ org.eclipse.cdt.managedbuilder.core.ScannerConfigNature
diff --git a/ESP32/.settings/PlatformIO Debugger.launch b/ESP32/.settings/PlatformIO Debugger.launch
new file mode 100644
index 0000000..b887ec2
--- /dev/null
+++ b/ESP32/.settings/PlatformIO Debugger.launch
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ESP32/.settings/language.settings.xml b/ESP32/.settings/language.settings.xml
new file mode 100644
index 0000000..ae542cb
--- /dev/null
+++ b/ESP32/.settings/language.settings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ESP32/.settings/org.eclipse.cdt.core.prefs b/ESP32/.settings/org.eclipse.cdt.core.prefs
new file mode 100644
index 0000000..1d6eece
--- /dev/null
+++ b/ESP32/.settings/org.eclipse.cdt.core.prefs
@@ -0,0 +1,11 @@
+eclipse.preferences.version=1
+environment/project/0.910961921/PATH/delimiter=\:
+environment/project/0.910961921/PATH/operation=replace
+environment/project/0.910961921/PATH/value=/usr/local/bin\:/usr/bin\:/bin\:/usr/local/games\:/usr/games\:/home/youen/.platformio/penv/bin${PathDelimiter}${PATH}
+environment/project/0.910961921/append=true
+environment/project/0.910961921/appendContributed=true
+environment/project/0.910961921.1363900502/PATH/delimiter=\:
+environment/project/0.910961921.1363900502/PATH/operation=replace
+environment/project/0.910961921.1363900502/PATH/value=/usr/local/bin\:/usr/bin\:/bin\:/usr/local/games\:/usr/games\:/home/youen/.platformio/penv/bin${PathDelimiter}${PATH}
+environment/project/0.910961921.1363900502/append=true
+environment/project/0.910961921.1363900502/appendContributed=true
\ No newline at end of file
diff --git a/ESP32/ESP32.ino b/ESP32/ESP32.ino
deleted file mode 100644
index 34a67dc..0000000
--- a/ESP32/ESP32.ino
+++ /dev/null
@@ -1,3 +0,0 @@
-// This file only exists to make the Arduino IDE happy
-// The actual entry points are in vehicle-monitor.cpp (because .ino extension is non-standard)
-// Notice we don't even need to include anything as the Arduino IDE automatically compiles all .cpp files that are in the sketch folder
diff --git a/ESP32/calibration/adc-approx.ods b/ESP32/doc/calibration/adc-approx.ods
similarity index 100%
rename from ESP32/calibration/adc-approx.ods
rename to ESP32/doc/calibration/adc-approx.ods
diff --git a/ESP32/calibration/adc-measures.ods b/ESP32/doc/calibration/adc-measures.ods
similarity index 100%
rename from ESP32/calibration/adc-measures.ods
rename to ESP32/doc/calibration/adc-measures.ods
diff --git a/ESP32/include/README b/ESP32/include/README
new file mode 100644
index 0000000..194dcd4
--- /dev/null
+++ b/ESP32/include/README
@@ -0,0 +1,39 @@
+
+This directory is intended for project header files.
+
+A header file is a file containing C declarations and macro definitions
+to be shared between several project source files. You request the use of a
+header file in your project source file (C, C++, etc) located in `src` folder
+by including it, with the C preprocessing directive `#include'.
+
+```src/main.c
+
+#include "header.h"
+
+int main (void)
+{
+ ...
+}
+```
+
+Including a header file produces the same results as copying the header file
+into each source file that needs it. Such copying would be time-consuming
+and error-prone. With a header file, the related declarations appear
+in only one place. If they need to be changed, they can be changed in one
+place, and programs that include the header file will automatically use the
+new version when next recompiled. The header file eliminates the labor of
+finding and changing all the copies as well as the risk that a failure to
+find one copy will result in inconsistencies within a program.
+
+In C, the usual convention is to give header files names that end with `.h'.
+It is most portable to use only letters, digits, dashes, and underscores in
+header file names, and at most one dot.
+
+Read more about using header files in official GCC documentation:
+
+* Include Syntax
+* Include Operation
+* Once-Only Headers
+* Computed Includes
+
+https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html
diff --git a/ESP32/3rdparty/AsyncTCP/.github/scripts/install-arduino-core-esp32.sh b/ESP32/lib/AsyncTCP/.github/scripts/install-arduino-core-esp32.sh
similarity index 100%
rename from ESP32/3rdparty/AsyncTCP/.github/scripts/install-arduino-core-esp32.sh
rename to ESP32/lib/AsyncTCP/.github/scripts/install-arduino-core-esp32.sh
diff --git a/ESP32/3rdparty/AsyncTCP/.github/scripts/install-arduino-ide.sh b/ESP32/lib/AsyncTCP/.github/scripts/install-arduino-ide.sh
similarity index 100%
rename from ESP32/3rdparty/AsyncTCP/.github/scripts/install-arduino-ide.sh
rename to ESP32/lib/AsyncTCP/.github/scripts/install-arduino-ide.sh
diff --git a/ESP32/3rdparty/AsyncTCP/.github/scripts/install-platformio.sh b/ESP32/lib/AsyncTCP/.github/scripts/install-platformio.sh
similarity index 100%
rename from ESP32/3rdparty/AsyncTCP/.github/scripts/install-platformio.sh
rename to ESP32/lib/AsyncTCP/.github/scripts/install-platformio.sh
diff --git a/ESP32/3rdparty/AsyncTCP/.github/scripts/on-push.sh b/ESP32/lib/AsyncTCP/.github/scripts/on-push.sh
similarity index 100%
rename from ESP32/3rdparty/AsyncTCP/.github/scripts/on-push.sh
rename to ESP32/lib/AsyncTCP/.github/scripts/on-push.sh
diff --git a/ESP32/3rdparty/AsyncTCP/.github/stale.yml b/ESP32/lib/AsyncTCP/.github/stale.yml
similarity index 100%
rename from ESP32/3rdparty/AsyncTCP/.github/stale.yml
rename to ESP32/lib/AsyncTCP/.github/stale.yml
diff --git a/ESP32/3rdparty/AsyncTCP/.github/workflows/push.yml b/ESP32/lib/AsyncTCP/.github/workflows/push.yml
similarity index 100%
rename from ESP32/3rdparty/AsyncTCP/.github/workflows/push.yml
rename to ESP32/lib/AsyncTCP/.github/workflows/push.yml
diff --git a/ESP32/3rdparty/AsyncTCP/.gitignore b/ESP32/lib/AsyncTCP/.gitignore
similarity index 100%
rename from ESP32/3rdparty/AsyncTCP/.gitignore
rename to ESP32/lib/AsyncTCP/.gitignore
diff --git a/ESP32/3rdparty/AsyncTCP/.travis.yml b/ESP32/lib/AsyncTCP/.travis.yml
similarity index 100%
rename from ESP32/3rdparty/AsyncTCP/.travis.yml
rename to ESP32/lib/AsyncTCP/.travis.yml
diff --git a/ESP32/3rdparty/AsyncTCP/CMakeLists.txt b/ESP32/lib/AsyncTCP/CMakeLists.txt
similarity index 100%
rename from ESP32/3rdparty/AsyncTCP/CMakeLists.txt
rename to ESP32/lib/AsyncTCP/CMakeLists.txt
diff --git a/ESP32/3rdparty/AsyncTCP/Kconfig.projbuild b/ESP32/lib/AsyncTCP/Kconfig.projbuild
similarity index 100%
rename from ESP32/3rdparty/AsyncTCP/Kconfig.projbuild
rename to ESP32/lib/AsyncTCP/Kconfig.projbuild
diff --git a/ESP32/3rdparty/AsyncTCP/LICENSE b/ESP32/lib/AsyncTCP/LICENSE
similarity index 100%
rename from ESP32/3rdparty/AsyncTCP/LICENSE
rename to ESP32/lib/AsyncTCP/LICENSE
diff --git a/ESP32/3rdparty/AsyncTCP/README.md b/ESP32/lib/AsyncTCP/README.md
similarity index 100%
rename from ESP32/3rdparty/AsyncTCP/README.md
rename to ESP32/lib/AsyncTCP/README.md
diff --git a/ESP32/3rdparty/AsyncTCP/component.mk b/ESP32/lib/AsyncTCP/component.mk
similarity index 100%
rename from ESP32/3rdparty/AsyncTCP/component.mk
rename to ESP32/lib/AsyncTCP/component.mk
diff --git a/ESP32/3rdparty/AsyncTCP/library.json b/ESP32/lib/AsyncTCP/library.json
similarity index 100%
rename from ESP32/3rdparty/AsyncTCP/library.json
rename to ESP32/lib/AsyncTCP/library.json
diff --git a/ESP32/3rdparty/AsyncTCP/library.properties b/ESP32/lib/AsyncTCP/library.properties
similarity index 100%
rename from ESP32/3rdparty/AsyncTCP/library.properties
rename to ESP32/lib/AsyncTCP/library.properties
diff --git a/ESP32/3rdparty/AsyncTCP/src/AsyncTCP.cpp b/ESP32/lib/AsyncTCP/src/AsyncTCP.cpp
similarity index 100%
rename from ESP32/3rdparty/AsyncTCP/src/AsyncTCP.cpp
rename to ESP32/lib/AsyncTCP/src/AsyncTCP.cpp
diff --git a/ESP32/3rdparty/AsyncTCP/src/AsyncTCP.h b/ESP32/lib/AsyncTCP/src/AsyncTCP.h
similarity index 100%
rename from ESP32/3rdparty/AsyncTCP/src/AsyncTCP.h
rename to ESP32/lib/AsyncTCP/src/AsyncTCP.h
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/.github/scripts/install-arduino-core-esp32.sh b/ESP32/lib/ESPAsyncWebServer/.github/scripts/install-arduino-core-esp32.sh
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/.github/scripts/install-arduino-core-esp32.sh
rename to ESP32/lib/ESPAsyncWebServer/.github/scripts/install-arduino-core-esp32.sh
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/.github/scripts/install-arduino-core-esp8266.sh b/ESP32/lib/ESPAsyncWebServer/.github/scripts/install-arduino-core-esp8266.sh
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/.github/scripts/install-arduino-core-esp8266.sh
rename to ESP32/lib/ESPAsyncWebServer/.github/scripts/install-arduino-core-esp8266.sh
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/.github/scripts/install-arduino-ide.sh b/ESP32/lib/ESPAsyncWebServer/.github/scripts/install-arduino-ide.sh
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/.github/scripts/install-arduino-ide.sh
rename to ESP32/lib/ESPAsyncWebServer/.github/scripts/install-arduino-ide.sh
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/.github/scripts/install-platformio.sh b/ESP32/lib/ESPAsyncWebServer/.github/scripts/install-platformio.sh
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/.github/scripts/install-platformio.sh
rename to ESP32/lib/ESPAsyncWebServer/.github/scripts/install-platformio.sh
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/.github/scripts/on-push.sh b/ESP32/lib/ESPAsyncWebServer/.github/scripts/on-push.sh
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/.github/scripts/on-push.sh
rename to ESP32/lib/ESPAsyncWebServer/.github/scripts/on-push.sh
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/.github/stale.yml b/ESP32/lib/ESPAsyncWebServer/.github/stale.yml
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/.github/stale.yml
rename to ESP32/lib/ESPAsyncWebServer/.github/stale.yml
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/.github/workflows/push.yml b/ESP32/lib/ESPAsyncWebServer/.github/workflows/push.yml
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/.github/workflows/push.yml
rename to ESP32/lib/ESPAsyncWebServer/.github/workflows/push.yml
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/.gitignore b/ESP32/lib/ESPAsyncWebServer/.gitignore
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/.gitignore
rename to ESP32/lib/ESPAsyncWebServer/.gitignore
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/.travis.yml b/ESP32/lib/ESPAsyncWebServer/.travis.yml
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/.travis.yml
rename to ESP32/lib/ESPAsyncWebServer/.travis.yml
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/CMakeLists.txt b/ESP32/lib/ESPAsyncWebServer/CMakeLists.txt
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/CMakeLists.txt
rename to ESP32/lib/ESPAsyncWebServer/CMakeLists.txt
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/README.md b/ESP32/lib/ESPAsyncWebServer/README.md
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/README.md
rename to ESP32/lib/ESPAsyncWebServer/README.md
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/_config.yml b/ESP32/lib/ESPAsyncWebServer/_config.yml
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/_config.yml
rename to ESP32/lib/ESPAsyncWebServer/_config.yml
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/component.mk b/ESP32/lib/ESPAsyncWebServer/component.mk
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/component.mk
rename to ESP32/lib/ESPAsyncWebServer/component.mk
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/examples/CaptivePortal/CaptivePortal.ino b/ESP32/lib/ESPAsyncWebServer/examples/CaptivePortal/CaptivePortal.ino
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/examples/CaptivePortal/CaptivePortal.ino
rename to ESP32/lib/ESPAsyncWebServer/examples/CaptivePortal/CaptivePortal.ino
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/ESP_AsyncFSBrowser.ino b/ESP32/lib/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/ESP_AsyncFSBrowser.ino
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/ESP_AsyncFSBrowser.ino
rename to ESP32/lib/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/ESP_AsyncFSBrowser.ino
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/.exclude.files b/ESP32/lib/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/.exclude.files
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/.exclude.files
rename to ESP32/lib/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/.exclude.files
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/ace.js.gz b/ESP32/lib/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/ace.js.gz
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/ace.js.gz
rename to ESP32/lib/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/ace.js.gz
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/ext-searchbox.js.gz b/ESP32/lib/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/ext-searchbox.js.gz
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/ext-searchbox.js.gz
rename to ESP32/lib/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/ext-searchbox.js.gz
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/favicon.ico b/ESP32/lib/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/favicon.ico
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/favicon.ico
rename to ESP32/lib/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/favicon.ico
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/index.htm b/ESP32/lib/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/index.htm
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/index.htm
rename to ESP32/lib/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/index.htm
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/mode-css.js.gz b/ESP32/lib/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/mode-css.js.gz
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/mode-css.js.gz
rename to ESP32/lib/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/mode-css.js.gz
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/mode-html.js.gz b/ESP32/lib/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/mode-html.js.gz
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/mode-html.js.gz
rename to ESP32/lib/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/mode-html.js.gz
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/mode-javascript.js.gz b/ESP32/lib/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/mode-javascript.js.gz
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/mode-javascript.js.gz
rename to ESP32/lib/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/mode-javascript.js.gz
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/worker-html.js.gz b/ESP32/lib/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/worker-html.js.gz
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/worker-html.js.gz
rename to ESP32/lib/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/worker-html.js.gz
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/examples/regex_patterns/.test.build_flags b/ESP32/lib/ESPAsyncWebServer/examples/regex_patterns/.test.build_flags
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/examples/regex_patterns/.test.build_flags
rename to ESP32/lib/ESPAsyncWebServer/examples/regex_patterns/.test.build_flags
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/examples/regex_patterns/regex_patterns.ino b/ESP32/lib/ESPAsyncWebServer/examples/regex_patterns/regex_patterns.ino
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/examples/regex_patterns/regex_patterns.ino
rename to ESP32/lib/ESPAsyncWebServer/examples/regex_patterns/regex_patterns.ino
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/examples/simple_server/simple_server.ino b/ESP32/lib/ESPAsyncWebServer/examples/simple_server/simple_server.ino
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/examples/simple_server/simple_server.ino
rename to ESP32/lib/ESPAsyncWebServer/examples/simple_server/simple_server.ino
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/keywords.txt b/ESP32/lib/ESPAsyncWebServer/keywords.txt
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/keywords.txt
rename to ESP32/lib/ESPAsyncWebServer/keywords.txt
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/library.json b/ESP32/lib/ESPAsyncWebServer/library.json
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/library.json
rename to ESP32/lib/ESPAsyncWebServer/library.json
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/library.properties b/ESP32/lib/ESPAsyncWebServer/library.properties
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/library.properties
rename to ESP32/lib/ESPAsyncWebServer/library.properties
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/src/AsyncEventSource.cpp b/ESP32/lib/ESPAsyncWebServer/src/AsyncEventSource.cpp
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/src/AsyncEventSource.cpp
rename to ESP32/lib/ESPAsyncWebServer/src/AsyncEventSource.cpp
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/src/AsyncEventSource.h b/ESP32/lib/ESPAsyncWebServer/src/AsyncEventSource.h
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/src/AsyncEventSource.h
rename to ESP32/lib/ESPAsyncWebServer/src/AsyncEventSource.h
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/src/AsyncJson.h b/ESP32/lib/ESPAsyncWebServer/src/AsyncJson.h
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/src/AsyncJson.h
rename to ESP32/lib/ESPAsyncWebServer/src/AsyncJson.h
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/src/AsyncWebSocket.cpp b/ESP32/lib/ESPAsyncWebServer/src/AsyncWebSocket.cpp
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/src/AsyncWebSocket.cpp
rename to ESP32/lib/ESPAsyncWebServer/src/AsyncWebSocket.cpp
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/src/AsyncWebSocket.h b/ESP32/lib/ESPAsyncWebServer/src/AsyncWebSocket.h
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/src/AsyncWebSocket.h
rename to ESP32/lib/ESPAsyncWebServer/src/AsyncWebSocket.h
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/src/AsyncWebSynchronization.h b/ESP32/lib/ESPAsyncWebServer/src/AsyncWebSynchronization.h
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/src/AsyncWebSynchronization.h
rename to ESP32/lib/ESPAsyncWebServer/src/AsyncWebSynchronization.h
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/src/ESPAsyncWebServer.h b/ESP32/lib/ESPAsyncWebServer/src/ESPAsyncWebServer.h
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/src/ESPAsyncWebServer.h
rename to ESP32/lib/ESPAsyncWebServer/src/ESPAsyncWebServer.h
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/src/SPIFFSEditor.cpp b/ESP32/lib/ESPAsyncWebServer/src/SPIFFSEditor.cpp
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/src/SPIFFSEditor.cpp
rename to ESP32/lib/ESPAsyncWebServer/src/SPIFFSEditor.cpp
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/src/SPIFFSEditor.h b/ESP32/lib/ESPAsyncWebServer/src/SPIFFSEditor.h
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/src/SPIFFSEditor.h
rename to ESP32/lib/ESPAsyncWebServer/src/SPIFFSEditor.h
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/src/StringArray.h b/ESP32/lib/ESPAsyncWebServer/src/StringArray.h
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/src/StringArray.h
rename to ESP32/lib/ESPAsyncWebServer/src/StringArray.h
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/src/WebAuthentication.cpp b/ESP32/lib/ESPAsyncWebServer/src/WebAuthentication.cpp
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/src/WebAuthentication.cpp
rename to ESP32/lib/ESPAsyncWebServer/src/WebAuthentication.cpp
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/src/WebAuthentication.h b/ESP32/lib/ESPAsyncWebServer/src/WebAuthentication.h
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/src/WebAuthentication.h
rename to ESP32/lib/ESPAsyncWebServer/src/WebAuthentication.h
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/src/WebHandlerImpl.h b/ESP32/lib/ESPAsyncWebServer/src/WebHandlerImpl.h
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/src/WebHandlerImpl.h
rename to ESP32/lib/ESPAsyncWebServer/src/WebHandlerImpl.h
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/src/WebHandlers.cpp b/ESP32/lib/ESPAsyncWebServer/src/WebHandlers.cpp
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/src/WebHandlers.cpp
rename to ESP32/lib/ESPAsyncWebServer/src/WebHandlers.cpp
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/src/WebRequest.cpp b/ESP32/lib/ESPAsyncWebServer/src/WebRequest.cpp
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/src/WebRequest.cpp
rename to ESP32/lib/ESPAsyncWebServer/src/WebRequest.cpp
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/src/WebResponseImpl.h b/ESP32/lib/ESPAsyncWebServer/src/WebResponseImpl.h
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/src/WebResponseImpl.h
rename to ESP32/lib/ESPAsyncWebServer/src/WebResponseImpl.h
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/src/WebResponses.cpp b/ESP32/lib/ESPAsyncWebServer/src/WebResponses.cpp
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/src/WebResponses.cpp
rename to ESP32/lib/ESPAsyncWebServer/src/WebResponses.cpp
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/src/WebServer.cpp b/ESP32/lib/ESPAsyncWebServer/src/WebServer.cpp
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/src/WebServer.cpp
rename to ESP32/lib/ESPAsyncWebServer/src/WebServer.cpp
diff --git a/ESP32/3rdparty/ESPAsyncWebServer/src/edit.htm b/ESP32/lib/ESPAsyncWebServer/src/edit.htm
similarity index 100%
rename from ESP32/3rdparty/ESPAsyncWebServer/src/edit.htm
rename to ESP32/lib/ESPAsyncWebServer/src/edit.htm
diff --git a/ESP32/lib/README b/ESP32/lib/README
new file mode 100644
index 0000000..6debab1
--- /dev/null
+++ b/ESP32/lib/README
@@ -0,0 +1,46 @@
+
+This directory is intended for project specific (private) libraries.
+PlatformIO will compile them to static libraries and link into executable file.
+
+The source code of each library should be placed in a an own separate directory
+("lib/your_library_name/[here are source files]").
+
+For example, see a structure of the following two libraries `Foo` and `Bar`:
+
+|--lib
+| |
+| |--Bar
+| | |--docs
+| | |--examples
+| | |--src
+| | |- Bar.c
+| | |- Bar.h
+| | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
+| |
+| |--Foo
+| | |- Foo.c
+| | |- Foo.h
+| |
+| |- README --> THIS FILE
+|
+|- platformio.ini
+|--src
+ |- main.c
+
+and a contents of `src/main.c`:
+```
+#include
+#include
+
+int main (void)
+{
+ ...
+}
+
+```
+
+PlatformIO Library Dependency Finder will find automatically dependent
+libraries scanning project source files.
+
+More information about PlatformIO Library Dependency Finder
+- https://docs.platformio.org/page/librarymanager/ldf.html
diff --git a/ESP32/platformio.ini b/ESP32/platformio.ini
new file mode 100644
index 0000000..827a3e3
--- /dev/null
+++ b/ESP32/platformio.ini
@@ -0,0 +1,15 @@
+; PlatformIO Project Configuration File
+;
+; Build options: build flags, source filter
+; Upload options: custom upload port, speed and extra flags
+; Library options: dependencies, extra library storages
+; Advanced options: extra scripting
+;
+; Please visit documentation for the other options and examples
+; https://docs.platformio.org/page/projectconf.html
+
+[env:nodemcu-32s]
+platform = espressif32
+board = nodemcu-32s
+framework = arduino
+monitor_speed = 115200
diff --git a/ESP32/register-libraries.sh b/ESP32/register-libraries.sh
deleted file mode 100755
index 88eaed9..0000000
--- a/ESP32/register-libraries.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/sh
-DIR="$( cd "$( dirname "$0" )" && pwd )"
-
-rm -f -- ~/Arduino/libraries/AsyncTCP
-ln -s $DIR/3rdparty/AsyncTCP ~/Arduino/libraries/AsyncTCP
-
-rm -f -- ~/Arduino/libraries/ESPAsyncWebServer
-ln -s $DIR/3rdparty/ESPAsyncWebServer ~/Arduino/libraries/ESPAsyncWebServer
-
diff --git a/ESP32/ADC.cpp b/ESP32/src/ADC.cpp
similarity index 100%
rename from ESP32/ADC.cpp
rename to ESP32/src/ADC.cpp
diff --git a/ESP32/ADC.h b/ESP32/src/ADC.h
similarity index 100%
rename from ESP32/ADC.h
rename to ESP32/src/ADC.h
diff --git a/ESP32/IDECompat.h b/ESP32/src/IDECompat.h
similarity index 100%
rename from ESP32/IDECompat.h
rename to ESP32/src/IDECompat.h
diff --git a/ESP32/vehicle-monitor.cpp b/ESP32/src/vehicle-monitor.cpp
similarity index 100%
rename from ESP32/vehicle-monitor.cpp
rename to ESP32/src/vehicle-monitor.cpp
diff --git a/ESP32/wifi-credentials.h.template b/ESP32/src/wifi-credentials.h.template
similarity index 100%
rename from ESP32/wifi-credentials.h.template
rename to ESP32/src/wifi-credentials.h.template
diff --git a/ESP32/test/README b/ESP32/test/README
new file mode 100644
index 0000000..b94d089
--- /dev/null
+++ b/ESP32/test/README
@@ -0,0 +1,11 @@
+
+This directory is intended for PlatformIO Unit Testing and project tests.
+
+Unit Testing is a software testing method by which individual units of
+source code, sets of one or more MCU program modules together with associated
+control data, usage procedures, and operating procedures, are tested to
+determine whether they are fit for use. Unit testing finds problems early
+in the development cycle.
+
+More information about PlatformIO Unit Testing:
+- https://docs.platformio.org/page/plus/unit-testing.html