diff --git a/code-snippets/client/ESPcam/.gitignore b/client/ESPcam/.gitignore
similarity index 100%
rename from code-snippets/client/ESPcam/.gitignore
rename to client/ESPcam/.gitignore
diff --git a/client/ESPcam/.idea/.gitignore b/client/ESPcam/.idea/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..13566b81b018ad684f3a35fee301741b2734c8f4
--- /dev/null
+++ b/client/ESPcam/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/client/ESPcam/.idea/ESPcam.iml b/client/ESPcam/.idea/ESPcam.iml
new file mode 100644
index 0000000000000000000000000000000000000000..f08604bb65b25149b195f9e9f282f9683a428592
--- /dev/null
+++ b/client/ESPcam/.idea/ESPcam.iml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module classpath="CMake" type="CPP_MODULE" version="4" />
\ No newline at end of file
diff --git a/client/ESPcam/.idea/discord.xml b/client/ESPcam/.idea/discord.xml
new file mode 100644
index 0000000000000000000000000000000000000000..30bab2abb1a9fd88a1356176a99648e4468caba2
--- /dev/null
+++ b/client/ESPcam/.idea/discord.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="DiscordProjectSettings">
+    <option name="show" value="ASK" />
+    <option name="description" value="" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/client/ESPcam/.idea/misc.xml b/client/ESPcam/.idea/misc.xml
new file mode 100644
index 0000000000000000000000000000000000000000..79b3c94830bab93d40d0770f2765540fe24ed423
--- /dev/null
+++ b/client/ESPcam/.idea/misc.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
+</project>
\ No newline at end of file
diff --git a/client/ESPcam/.idea/modules.xml b/client/ESPcam/.idea/modules.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5dc8c6afd1cd54a025dc08b230a4469e7ecc7a26
--- /dev/null
+++ b/client/ESPcam/.idea/modules.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/ESPcam.iml" filepath="$PROJECT_DIR$/.idea/ESPcam.iml" />
+    </modules>
+  </component>
+</project>
\ No newline at end of file
diff --git a/client/ESPcam/.idea/vcs.xml b/client/ESPcam/.idea/vcs.xml
new file mode 100644
index 0000000000000000000000000000000000000000..def3818fd57157e5cf005ff21c7c47ab5e24c8d2
--- /dev/null
+++ b/client/ESPcam/.idea/vcs.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$/../../.." vcs="Git" />
+    <mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/code-snippets/client/ESPcam/.vscode/extensions.json b/client/ESPcam/.vscode/extensions.json
similarity index 100%
rename from code-snippets/client/ESPcam/.vscode/extensions.json
rename to client/ESPcam/.vscode/extensions.json
diff --git a/client/ESPcam/CMakeLists.txt b/client/ESPcam/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..09129ea1d8cb31d661b5f0903019ed910e3d1483
--- /dev/null
+++ b/client/ESPcam/CMakeLists.txt
@@ -0,0 +1,33 @@
+# !!! WARNING !!! AUTO-GENERATED FILE, PLEASE DO NOT MODIFY IT AND USE
+# https://docs.platformio.org/page/projectconf/section_env_build.html#build-flags
+#
+# If you need to override existing CMake configuration or add extra,
+# please create `CMakeListsUser.txt` in the root of project.
+# The `CMakeListsUser.txt` will not be overwritten by PlatformIO.
+
+cmake_minimum_required(VERSION 3.13)
+set(CMAKE_SYSTEM_NAME Generic)
+set(CMAKE_C_COMPILER_WORKS 1)
+set(CMAKE_CXX_COMPILER_WORKS 1)
+
+project("ESPcam" C CXX)
+
+include(CMakeListsPrivate.txt)
+
+if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/CMakeListsUser.txt)
+include(CMakeListsUser.txt)
+endif()
+
+add_custom_target(
+    Production ALL
+    COMMAND platformio -c clion run "$<$<NOT:$<CONFIG:All>>:-e${CMAKE_BUILD_TYPE}>"
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+add_custom_target(
+    Debug ALL
+    COMMAND platformio -c clion debug "$<$<NOT:$<CONFIG:All>>:-e${CMAKE_BUILD_TYPE}>"
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+add_executable(Z_DUMMY_TARGET ${SRC_LIST})
diff --git a/client/ESPcam/CMakeListsPrivate.txt b/client/ESPcam/CMakeListsPrivate.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1031c7cce53c3431dd7caa12d100c935a5bd749b
--- /dev/null
+++ b/client/ESPcam/CMakeListsPrivate.txt
@@ -0,0 +1,301 @@
+# !!! WARNING !!! AUTO-GENERATED FILE, PLEASE DO NOT MODIFY IT AND USE
+# https://docs.platformio.org/page/projectconf/section_env_build.html#build-flags
+#
+# If you need to override existing CMake configuration or add extra,
+# please create `CMakeListsUser.txt` in the root of project.
+# The `CMakeListsUser.txt` will not be overwritten by PlatformIO.
+
+
+
+set(CMAKE_CONFIGURATION_TYPES "esp32cam" CACHE STRING "Build Types reflect PlatformIO Environments" FORCE)
+
+# Convert "Home Directory" that may contain unescaped backslashes on Windows
+
+
+SET(CMAKE_C_COMPILER "$ENV{HOME}/.platformio/packages/toolchain-xtensa-esp32/bin/xtensa-esp32-elf-gcc")
+SET(CMAKE_CXX_COMPILER "$ENV{HOME}/.platformio/packages/toolchain-xtensa-esp32/bin/xtensa-esp32-elf-g++")
+SET(CMAKE_CXX_FLAGS "-std=gnu++17 -Wno-frame-address -fexceptions -fno-rtti -mfix-esp32-psram-cache-issue -mlongcalls -ffunction-sections -fdata-sections -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -ggdb -Os -freorder-blocks -Wwrite-strings -fstack-protector -fstrict-volatile-bitfields -Wno-error=unused-but-set-variable -fno-jump-tables -fno-tree-switch-conversion -MMD")
+SET(CMAKE_C_FLAGS "-Wno-frame-address -std=gnu99 -Wno-old-style-declaration -mfix-esp32-psram-cache-issue -mlongcalls -ffunction-sections -fdata-sections -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -ggdb -Os -freorder-blocks -Wwrite-strings -fstack-protector -fstrict-volatile-bitfields -Wno-error=unused-but-set-variable -fno-jump-tables -fno-tree-switch-conversion -MMD")
+
+SET(CMAKE_C_STANDARD 99)
+set(CMAKE_CXX_STANDARD 17)
+
+if (CMAKE_BUILD_TYPE MATCHES "esp32cam")
+    add_definitions(-DPLATFORMIO=60104)
+    add_definitions(-DARDUINO_ESP32_DEV)
+    add_definitions(-DBOARD_HAS_PSRAM)
+    add_definitions(-DCORE_DEBUG_LEVEL=5)
+    add_definitions(-DHAVE_CONFIG_H)
+    add_definitions(-DMBEDTLS_CONFIG_FILE=\"mbedtls/esp_config.h\")
+    add_definitions(-DUNITY_INCLUDE_CONFIG_H)
+    add_definitions(-DWITH_POSIX)
+    add_definitions(-D_GNU_SOURCE)
+    add_definitions(-DIDF_VER=\"v4.4.2\")
+    add_definitions(-DESP_PLATFORM)
+    add_definitions(-D_POSIX_READER_WRITER_LOCKS)
+    add_definitions(-DARDUINO_ARCH_ESP32)
+    add_definitions(-DESP32)
+    add_definitions(-DF_CPU=240000000L)
+    add_definitions(-DARDUINO=10812)
+    add_definitions(-DARDUINO_VARIANT=\"esp32\")
+    add_definitions(-DARDUINO_BOARD=\"AI\ Thinker\ ESP32-CAM\")
+    add_definitions(-DARDUINO_PARTITION_default)
+
+    include_directories("${CMAKE_CURRENT_LIST_DIR}/include")
+    include_directories("${CMAKE_CURRENT_LIST_DIR}/src")
+    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/sht85")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/SD_MMC/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/FS/src")
+    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/espnow/src")
+    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/includes")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/WiFi/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/Preferences/src")
+    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/caching/src")
+    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/time/src")
+    include_directories("${CMAKE_CURRENT_LIST_DIR}/.pio/libdeps/esp32cam/ArduinoJson/src")
+    include_directories("${CMAKE_CURRENT_LIST_DIR}/.pio/libdeps/esp32cam/ESP32Time")
+    include_directories("${CMAKE_CURRENT_LIST_DIR}/.pio/libdeps/esp32cam/RTClib/src")
+    include_directories("${CMAKE_CURRENT_LIST_DIR}/.pio/libdeps/esp32cam/Adafruit BusIO")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src")
+    include_directories("${CMAKE_CURRENT_LIST_DIR}/.pio/libdeps/esp32cam/arduino-sht")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/Wire/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/newlib/platform_include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include/esp_additions/freertos")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/port/xtensa/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include/esp_additions")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/include/soc")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/include/soc/esp32")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/port/esp32")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/port/esp32/private_include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/heap/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/log/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/include/apps")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/include/apps/sntp")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/lwip/src/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/port/esp32/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/port/esp32/include/arch")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/soc/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/soc/esp32")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/soc/esp32/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/hal/esp32/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/hal/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/hal/platform_port/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rom/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rom/include/esp32")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rom/esp32")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_common/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_system/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_system/port/soc")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_system/port/public_compat")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp32/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/xtensa/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/xtensa/esp32/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/driver/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/driver/esp32/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_pm/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_ringbuf/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/efuse/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/efuse/esp32/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/vfs/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_wifi/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_event/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_netif/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_eth/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/tcpip_adapter/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_phy/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_phy/esp32/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_ipc/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/app_trace/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_timer/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mbedtls/port/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mbedtls/mbedtls/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mbedtls/esp_crt_bundle/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/app_update/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/spi_flash/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bootloader_support/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/nvs_flash/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/pthread/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_gdbstub/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_gdbstub/xtensa")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_gdbstub/esp32")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espcoredump/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espcoredump/include/port/xtensa")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wpa_supplicant/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wpa_supplicant/port/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wpa_supplicant/esp_supplicant/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/ieee802154/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/console")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/asio/asio/asio/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/asio/port/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/osi/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/include/esp32/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/api/include/api")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/btc/profile/esp/blufi/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/btc/profile/esp/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/host/bluedroid/api/include/api")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_common/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_common/tinycrypt/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_core")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_core/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_core/storage")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/btc/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_models/common/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_models/client/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_models/server/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/api/core/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/api/models/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/api")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/cbor/port/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/unity/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/unity/unity/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/cmock/CMock/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/coap/port/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/coap/libcoap/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/nghttp/port/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/nghttp/nghttp2/lib/includes")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-tls")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-tls/esp-tls-crypto")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_adc_cal/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hid/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/tcp_transport/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_http_client/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_http_server/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_https_ota/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_https_server/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_lcd/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_lcd/interface")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protobuf-c/protobuf-c")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protocomm/include/common")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protocomm/include/security")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protocomm/include/transports")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mdns/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_local_ctrl/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/sdmmc/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_serial_slave_link/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_websocket_client/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/expat/expat/expat/lib")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/expat/port/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wear_levelling/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fatfs/diskio")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fatfs/vfs")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fatfs/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freemodbus/common/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/idf_test/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/idf_test/include/esp32")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/jsmn/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json/cJSON")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/libsodium/libsodium/src/libsodium/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/libsodium/port_include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mqtt/esp-mqtt/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/openssl/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/perfmon/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/spiffs/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/ulp/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wifi_provisioning/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/rmaker_common/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json_parser/upstream/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json_parser/upstream")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json_generator/upstream")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_schedule/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rainmaker/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/gpio_button/button/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/qrcode/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/ws2812_led")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/dotprod/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/support/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/windows/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/windows/hann/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/windows/blackman/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/windows/blackman_harris/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/windows/blackman_nuttall/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/windows/nuttall/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/windows/flat_top/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/iir/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/fir/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/math/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/math/add/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/math/sub/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/math/mul/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/math/addc/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/math/mulc/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/math/sqrt/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/matrix/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/fft/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/dct/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/conv/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/common/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/kalman/ekf/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dsp/modules/kalman/ekf_imu13states/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_littlefs/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/tool")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/typedef")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/image")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/math")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/nn")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/layer")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/detect")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/model_zoo")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-sr/src/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-sr/esp-tts/esp_tts_chinese/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-sr/include/esp32")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp32-camera/driver/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp32-camera/conversions/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fb_gfx/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/dio_qspi/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/cores/esp32")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/variants/esp32")
+    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/deep_sleep")
+    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/dr26_analogue")
+    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/drs26_digital")
+    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/ina219")
+    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/rs485")
+    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/scd30")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/ArduinoOTA/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/AsyncUDP/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/BLE/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/BluetoothSerial/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/DNSServer/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/EEPROM/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/ESP32/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/ESPmDNS/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/Ethernet/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/FFat/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/HTTPClient/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdate/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdateServer/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/I2S/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/LittleFS/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/NetBIOS/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/RainMaker/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/SD/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/SPIFFS/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/SimpleBLE/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/Ticker/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/USB/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/Update/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/WebServer/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/WiFiClientSecure/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/WiFiProv/src")
+    include_directories("$ENV{HOME}/.platformio/packages/toolchain-xtensa-esp32/xtensa-esp32-elf/include/c++/8.4.0")
+    include_directories("$ENV{HOME}/.platformio/packages/toolchain-xtensa-esp32/xtensa-esp32-elf/include/c++/8.4.0/xtensa-esp32-elf")
+    include_directories("$ENV{HOME}/.platformio/packages/toolchain-xtensa-esp32/lib/gcc/xtensa-esp32-elf/8.4.0/include-fixed")
+    include_directories("$ENV{HOME}/.platformio/packages/toolchain-xtensa-esp32/lib/gcc/xtensa-esp32-elf/8.4.0/include")
+    include_directories("$ENV{HOME}/.platformio/packages/toolchain-xtensa-esp32/xtensa-esp32-elf/include")
+
+    FILE(GLOB_RECURSE EXTRA_LIB_SOURCES
+        ${CMAKE_CURRENT_LIST_DIR}/.pio/libdeps/esp32cam/*.*
+        $ENV{HOME}/GitRepos/sensor-system/client/libs/*.*
+    )
+endif()
+
+
+FILE(GLOB_RECURSE SRC_LIST
+    ${CMAKE_CURRENT_LIST_DIR}/src/*.*
+    ${CMAKE_CURRENT_LIST_DIR}/lib/*.*
+    ${CMAKE_CURRENT_LIST_DIR}/test/*.*
+)
+
+list(APPEND SRC_LIST ${EXTRA_LIB_SOURCES})
diff --git a/code-snippets/client/ESPcam/platformio.ini b/client/ESPcam/platformio.ini
similarity index 65%
rename from code-snippets/client/ESPcam/platformio.ini
rename to client/ESPcam/platformio.ini
index 51be1376266f8dbbf7633667bf84b283f5403a6f..0573bea475a110f93b65a2554d555f39a127b16c 100644
--- a/code-snippets/client/ESPcam/platformio.ini
+++ b/client/ESPcam/platformio.ini
@@ -13,5 +13,17 @@ platform = espressif32
 board = esp32cam
 framework = arduino
 monitor_speed = 115200
+lib_ldf_mode = deep
+lib_extra_dirs =
+    ../libs
+build_flags =
+    -I include
+    -DCORE_DEBUG_LEVEL=5
+    -std=gnu++17
+build_unflags = -std=gnu++11
 lib_deps = sensirion/arduino-sht@^1.2.2
-           adafruit/RTClib @^2.1.1
\ No newline at end of file
+           adafruit/RTClib @^2.1.1
+           fbiego/ESP32Time@^2.0.0
+           bblanchon/ArduinoJson@^6.19.4
+
+
diff --git a/client/ESPcam/src/main.cpp b/client/ESPcam/src/main.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b87b0ab5214a5577df4fa60f4f5c4e5fc483638a
--- /dev/null
+++ b/client/ESPcam/src/main.cpp
@@ -0,0 +1,312 @@
+/*
+Snippet content:
+Takes pictures with ESP32-CAM, saves images to MicroSD Card.
+Measures air temperature and relative humidity from SHT85.
+
+We use the ESP-CAM for the SHT85 readout because of the
+limited wire length that can be used for I2C sensors - the
+camera sits at the top of the mast next to the SHT85 sensor.
+
+ESP-CAM code partially copied from
+https://dronebotworkshop.com/esp32-cam-microsd/
+
+NOTE: To flash the ESP-CAM, pin IO0 has to be connected to GND!
+TODO: because of this limitation, it would be nice to implement
+over-the-air updates for the camera at one point.
+*/
+
+// Include Required Libraries
+// I2C: SHT85, RTC
+#include "ESPNow.hpp"
+#include "NoDataAvailableException.hpp"
+#include "RTClib.h" // adafruit/RTClib @^2.1.1
+#include "Sht85.hpp"
+#include "ram_caching.hpp"
+#include <Arduino.h>
+#include <Wire.h>
+
+// Camera libraries
+#include "driver/rtc_io.h"
+#include "esp_camera.h"
+#include "soc/rtc_cntl_reg.h"
+#include "soc/soc.h"
+
+// MicroSD Libraries
+#include "FS.h"
+#include "SD_MMC.h"
+
+// Pin definitions for CAMERA_MODEL_AI_THINKER
+#define PWDN_GPIO_NUM 32
+#define RESET_GPIO_NUM -1
+#define XCLK_GPIO_NUM 0
+#define SIOD_GPIO_NUM 26
+#define SIOC_GPIO_NUM 27
+#define Y9_GPIO_NUM 35
+#define Y8_GPIO_NUM 34
+#define Y7_GPIO_NUM 39
+#define Y6_GPIO_NUM 36
+#define Y5_GPIO_NUM 21
+#define Y4_GPIO_NUM 19
+#define Y3_GPIO_NUM 18
+#define Y2_GPIO_NUM 5
+#define VSYNC_GPIO_NUM 25
+#define HREF_GPIO_NUM 23
+#define PCLK_GPIO_NUM 22
+
+// Pin definitions for I2C (SHT85, RTC)
+//  This is different from the pins on the ESP32-C3-DevKit boards!
+#define SDA 12
+#define SCL 13
+
+// LED control
+#define LEDpin 4
+
+// string for saving the time
+char time_string[20];
+
+// number of images to take: the last one is saved
+//   this is done because the first few images have a green tint otherwise
+int img_number = 3;
+
+RTC_DS3231 rtc;                // I2C address: 0x68
+camera_config_t camera_config; // camera configuration parameters
+
+void camera_configESPCamera()
+{
+	// Configure Camera parameters
+
+	camera_config.ledc_channel = LEDC_CHANNEL_0;
+	camera_config.ledc_timer = LEDC_TIMER_0;
+	camera_config.pin_d0 = Y2_GPIO_NUM;
+	camera_config.pin_d1 = Y3_GPIO_NUM;
+	camera_config.pin_d2 = Y4_GPIO_NUM;
+	camera_config.pin_d3 = Y5_GPIO_NUM;
+	camera_config.pin_d4 = Y6_GPIO_NUM;
+	camera_config.pin_d5 = Y7_GPIO_NUM;
+	camera_config.pin_d6 = Y8_GPIO_NUM;
+	camera_config.pin_d7 = Y9_GPIO_NUM;
+	camera_config.pin_xclk = XCLK_GPIO_NUM;
+	camera_config.pin_pclk = PCLK_GPIO_NUM;
+	camera_config.pin_vsync = VSYNC_GPIO_NUM;
+	camera_config.pin_href = HREF_GPIO_NUM;
+	camera_config.pin_sscb_sda = SIOD_GPIO_NUM;
+	camera_config.pin_sscb_scl = SIOC_GPIO_NUM;
+	camera_config.pin_pwdn = PWDN_GPIO_NUM;
+	camera_config.pin_reset = RESET_GPIO_NUM;
+	camera_config.xclk_freq_hz = 20000000;
+	camera_config.pixel_format = PIXFORMAT_JPEG; // Choices are YUV422, GRAYSCALE, RGB565, JPEG
+
+	// Select lower framesize if the camera doesn't support PSRAM
+	if (psramFound()) {
+		camera_config.frame_size = FRAMESIZE_UXGA; // FRAMESIZE_ + QVGA|CIF|VGA|SVGA|XGA|SXGA|UXGA
+		camera_config.jpeg_quality = 10;           // 10-63 lower number means higher quality
+		camera_config.fb_count = 2;
+	} else {
+		camera_config.frame_size = FRAMESIZE_SVGA;
+		camera_config.jpeg_quality = 12;
+		camera_config.fb_count = 1;
+	}
+
+	// Initialize the Camera
+	esp_err_t err = esp_camera_init(&camera_config);
+
+	if (err != ESP_OK) {
+		Serial.printf("Camera init failed with error 0x%x", err);
+		return;
+	}
+
+	// Camera quality adjustments
+	sensor_t *s = esp_camera_sensor_get();
+
+	// TODO: this is copied from an online tutorial, it's possible that we don't need this at all!
+	// BRIGHTNESS (-2 to 2)
+	s->set_brightness(s, 0);
+	// CONTRAST (-2 to 2)
+	s->set_contrast(s, 0);
+	// SATURATION (-2 to 2)
+	s->set_saturation(s, 0);
+	// SPECIAL EFFECTS (0 - No Effect, 1 - Negative, 2 - Grayscale, 3 - Red Tint, 4 - Green Tint, 5 - Blue Tint, 6 -
+	// Sepia)
+	s->set_special_effect(s, 0);
+	// WHITE BALANCE (0 = Disable , 1 = Enable)
+	s->set_whitebal(s, 1);
+	// AWB GAIN (0 = Disable , 1 = Enable)
+	s->set_awb_gain(s, 1);
+	// WB MODES (0 - Auto, 1 - Sunny, 2 - Cloudy, 3 - Office, 4 - Home)
+	s->set_wb_mode(s, 0);
+	// EXPOSURE CONTROLS (0 = Disable , 1 = Enable)
+	s->set_exposure_ctrl(s, 1);
+	// AEC2 (0 = Disable , 1 = Enable)
+	s->set_aec2(s, 0);
+	// AE LEVELS (-2 to 2)
+	s->set_ae_level(s, 0);
+	// AEC VALUES (0 to 1200)
+	s->set_aec_value(s, 300);
+	// GAIN CONTROLS (0 = Disable , 1 = Enable)
+	s->set_gain_ctrl(s, 1);
+	// AGC GAIN (0 to 30)
+	s->set_agc_gain(s, 0);
+	// GAIN CEILING (0 to 6)
+	s->set_gainceiling(s, (gainceiling_t)0);
+	// BPC (0 = Disable , 1 = Enable)
+	s->set_bpc(s, 0);
+	// WPC (0 = Disable , 1 = Enable)
+	s->set_wpc(s, 1);
+	// RAW GMA (0 = Disable , 1 = Enable)
+	s->set_raw_gma(s, 1);
+	// LENC (0 = Disable , 1 = Enable)
+	s->set_lenc(s, 1);
+	// HORIZ MIRROR (0 = Disable , 1 = Enable)
+	s->set_hmirror(s, 0);
+	// VERT FLIP (0 = Disable , 1 = Enable)
+	s->set_vflip(s, 0);
+	// DCW (0 = Disable , 1 = Enable)
+	s->set_dcw(s, 1);
+	// COLOR BAR PATTERN (0 = Disable , 1 = Enable)
+	s->set_colorbar(s, 0);
+}
+
+void initMicroSDCard()
+{
+	// Start the MicroSD card
+	Serial.println("Mounting MicroSD Card");
+	if (!SD_MMC.begin("/sdcard", true)) { // the arguments disable the LED when using the SD card - leave them there!
+		Serial.println("MicroSD Card Mount Failed");
+		return;
+	}
+	uint8_t cardType = SD_MMC.cardType();
+	if (cardType == CARD_NONE) {
+		Serial.println("No MicroSD Card found");
+		return;
+	}
+}
+
+void takeNewPhoto(String path)
+{
+	// Take picture with the camera and save it
+
+	// Take multiple pictures with a short break in between
+	//   necessary for the camera to auto-adjust settings
+	camera_fb_t *fb;
+	for (int i = 1; i <= img_number; i++) {
+		// Setup frame buffer
+		fb = esp_camera_fb_get();
+		// digitalWrite(LEDpin, LOW);  // disable flash LED if needed
+
+		if (!fb) {
+			Serial.println("Camera capture failed");
+			return;
+		} else {
+			Serial.println("Camera capture successful");
+		}
+		// TODO check if this delay is necessary once the SD-card todo below
+		//   is resolved. It's possible that it can be at least shortened.
+		if (i == img_number) {
+			delay(2000);
+		}
+
+		esp_camera_fb_return(fb);
+		// Without this delay the image is corrupt
+		// TODO this delay can possibly also be optimized.
+		delay(1500);
+
+		/* TODO:
+		The SD card throws the following error when the capture fails:
+		E (877528) sdmmc_cmd: sdmmc_write_sectors_dma: sdmmc_send_cmd returned 0x109
+		E (877528) diskio_sdmmc: sdmmc_write_blocks failed (265)
+		This happens infrequently, say every 10th image or so.
+		If this happens, one more new image should be taken and saved
+		*/
+	}
+
+	// Save picture to microSD card
+	fs::FS &fs = SD_MMC;
+	File file = fs.open(path.c_str(), FILE_WRITE);
+	if (!file) {
+		Serial.println("Failed to open file in write mode");
+	} else {
+		file.write(fb->buf, fb->len); // payload (image), payload length
+		Serial.printf("Saved file to path: %s\n", path.c_str());
+	}
+	// Close the file
+	file.close();
+
+	// Return the frame buffer back to the driver for reuse
+	esp_camera_fb_return(fb);
+}
+
+void readRTC()
+{
+	// This is used for a picture timestamp (name of the image)
+	rtc.begin();
+	DateTime now = rtc.now();
+	sprintf(time_string, "%04d-%02d-%02dT%02d-%02d-%02d", now.year(), now.month(), now.day(), now.hour(), now.minute(),
+	        now.second());
+	Serial.println(time_string);
+}
+
+Sht85 sht85Sensor;
+
+void setup()
+{
+	// control of the LED pin
+	pinMode(LEDpin, OUTPUT);
+	// Disable brownout detector
+	WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);
+
+	// Start Serial
+	Serial.begin(115200);
+
+	// Initialize the camera
+	Serial.print("Initializing the camera module...");
+	camera_configESPCamera();
+	Serial.println("Camera OK!");
+	espnow_setup();
+	sht85Sensor.setup();
+}
+
+void loop()
+{
+	// initiate I2C, read SHT+RTC, end I2C
+	readRTC();
+
+	try {
+		//	out_data_drs26 data= dr26.readData();
+		//	Serial.printf("data circumfrence");
+		//	Serial.printf(String( data.circumferenceIncrement).c_str());
+		// auto messages = drs26.buildMessages();
+		auto messages = sht85Sensor.buildMessages();
+
+		// auto scdMessages = scd30.buildmessages();
+
+		for (const Message &message : messages) {
+			if (message.send() != ESP_OK) {
+				RtcMemory::store(message.getMessageAsMinifiedJsonString());
+			}
+			delay(5000);
+			if (!was_msg_received()) {
+				RtcMemory::store(message.getMessageAsMinifiedJsonString());
+			}
+		}
+
+	} catch (const NoDataAvailableException &e) {
+		std::cerr << e.what() << '\n';
+	}
+
+	// Initialize the MicroSD
+	Serial.print("Initializing the MicroSD card module... ");
+	initMicroSDCard();
+
+	// Path where new image will be saved in MicroSD card
+	String path = "/" + String(time_string) + ".jpg";
+	Serial.printf("Picture file name: %s\n", path.c_str());
+
+	// Take and save a picture
+	takeNewPhoto(path);
+
+	// Unmount SD card to free the pins for I2C use
+	SD_MMC.end();
+
+	// Delay for specified period
+	delay(1000);
+}
diff --git a/code-snippets/client/ESPcam/test/README b/client/ESPcam/test/README
similarity index 100%
rename from code-snippets/client/ESPcam/test/README
rename to client/ESPcam/test/README
diff --git a/client/client/.idea/.gitignore b/client/client/.idea/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..13566b81b018ad684f3a35fee301741b2734c8f4
--- /dev/null
+++ b/client/client/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/client/client/.idea/client.iml b/client/client/.idea/client.iml
new file mode 100644
index 0000000000000000000000000000000000000000..f08604bb65b25149b195f9e9f282f9683a428592
--- /dev/null
+++ b/client/client/.idea/client.iml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module classpath="CMake" type="CPP_MODULE" version="4" />
\ No newline at end of file
diff --git a/client/client/.idea/discord.xml b/client/client/.idea/discord.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8cf359dc797a2f4ea9396035b180f3b2a608f406
--- /dev/null
+++ b/client/client/.idea/discord.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="DiscordProjectSettings">
+    <option name="show" value="PROJECT" />
+    <option name="description" value="" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/client/client/.idea/misc.xml b/client/client/.idea/misc.xml
new file mode 100644
index 0000000000000000000000000000000000000000..79b3c94830bab93d40d0770f2765540fe24ed423
--- /dev/null
+++ b/client/client/.idea/misc.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
+</project>
\ No newline at end of file
diff --git a/client/client/.idea/modules.xml b/client/client/.idea/modules.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0742ebc3adff31ae2584d375adada6d0fdf83f93
--- /dev/null
+++ b/client/client/.idea/modules.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/client.iml" filepath="$PROJECT_DIR$/.idea/client.iml" />
+    </modules>
+  </component>
+</project>
\ No newline at end of file
diff --git a/client/client/.idea/vcs.xml b/client/client/.idea/vcs.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b2bdec2d71b6a5ce4ae49efc37516809c50e4d5e
--- /dev/null
+++ b/client/client/.idea/vcs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/client/client/CMakeLists.txt b/client/client/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..b3419c616f3665d0bcbb3f960fa1f731d1092c13
--- /dev/null
+++ b/client/client/CMakeLists.txt
@@ -0,0 +1,33 @@
+# !!! WARNING !!! AUTO-GENERATED FILE, PLEASE DO NOT MODIFY IT AND USE
+# https://docs.platformio.org/page/projectconf/section_env_build.html#build-flags
+#
+# If you need to override existing CMake configuration or add extra,
+# please create `CMakeListsUser.txt` in the root of project.
+# The `CMakeListsUser.txt` will not be overwritten by PlatformIO.
+
+cmake_minimum_required(VERSION 3.13)
+set(CMAKE_SYSTEM_NAME Generic)
+set(CMAKE_C_COMPILER_WORKS 1)
+set(CMAKE_CXX_COMPILER_WORKS 1)
+
+project("client" C CXX)
+
+include(CMakeListsPrivate.txt)
+
+if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/CMakeListsUser.txt)
+include(CMakeListsUser.txt)
+endif()
+
+add_custom_target(
+    Production ALL
+    COMMAND platformio -c clion run "$<$<NOT:$<CONFIG:All>>:-e${CMAKE_BUILD_TYPE}>"
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+add_custom_target(
+    Debug ALL
+    COMMAND platformio -c clion debug "$<$<NOT:$<CONFIG:All>>:-e${CMAKE_BUILD_TYPE}>"
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+add_executable(Z_DUMMY_TARGET ${SRC_LIST})
diff --git a/client/client/CMakeListsPrivate.txt b/client/client/CMakeListsPrivate.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f4383485a4b1e7858b65c3291d1cda3af73b34e0
--- /dev/null
+++ b/client/client/CMakeListsPrivate.txt
@@ -0,0 +1,296 @@
+# !!! WARNING !!! AUTO-GENERATED FILE, PLEASE DO NOT MODIFY IT AND USE
+# https://docs.platformio.org/page/projectconf/section_env_build.html#build-flags
+#
+# If you need to override existing CMake configuration or add extra,
+# please create `CMakeListsUser.txt` in the root of project.
+# The `CMakeListsUser.txt` will not be overwritten by PlatformIO.
+
+
+
+set(CMAKE_CONFIGURATION_TYPES "esp32-c3-devkitm-1" CACHE STRING "Build Types reflect PlatformIO Environments" FORCE)
+
+# Convert "Home Directory" that may contain unescaped backslashes on Windows
+
+
+SET(CMAKE_C_COMPILER "$ENV{HOME}/.platformio/packages/toolchain-riscv32-esp/bin/riscv32-esp-elf-gcc")
+SET(CMAKE_CXX_COMPILER "$ENV{HOME}/.platformio/packages/toolchain-riscv32-esp/bin/riscv32-esp-elf-g++")
+SET(CMAKE_CXX_FLAGS "-std=gnu++17 -march=rv32imc -fexceptions -fno-rtti -ffunction-sections -fdata-sections -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -ggdb -Wno-error=format= -nostartfiles -Wno-format -Os -freorder-blocks -Wwrite-strings -fstack-protector -fstrict-volatile-bitfields -Wno-error=unused-but-set-variable -fno-jump-tables -fno-tree-switch-conversion -MMD")
+SET(CMAKE_C_FLAGS "-march=rv32imc -std=gnu99 -Wno-old-style-declaration -ffunction-sections -fdata-sections -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -ggdb -Wno-error=format= -nostartfiles -Wno-format -Os -freorder-blocks -Wwrite-strings -fstack-protector -fstrict-volatile-bitfields -Wno-error=unused-but-set-variable -fno-jump-tables -fno-tree-switch-conversion -MMD")
+
+SET(CMAKE_C_STANDARD 99)
+set(CMAKE_CXX_STANDARD 17)
+
+if (CMAKE_BUILD_TYPE MATCHES "esp32-c3-devkitm-1")
+    add_definitions(-DPLATFORMIO=60104)
+    add_definitions(-DARDUINO_ESP32C3_DEV)
+    add_definitions(-DCORE_DEBUG_LEVEL=5)
+    add_definitions(-DHAVE_CONFIG_H)
+    add_definitions(-DMBEDTLS_CONFIG_FILE=\"mbedtls/esp_config.h\")
+    add_definitions(-DUNITY_INCLUDE_CONFIG_H)
+    add_definitions(-DWITH_POSIX)
+    add_definitions(-D_GNU_SOURCE)
+    add_definitions(-DIDF_VER=\"v4.4.2\")
+    add_definitions(-DESP_PLATFORM)
+    add_definitions(-D_POSIX_READER_WRITER_LOCKS)
+    add_definitions(-DARDUINO_ARCH_ESP32)
+    add_definitions(-DESP32)
+    add_definitions(-DF_CPU=160000000L)
+    add_definitions(-DARDUINO=10812)
+    add_definitions(-DARDUINO_VARIANT=\"esp32c3\")
+    add_definitions(-DARDUINO_BOARD=\"Espressif\ ESP32-C3-DevKitM-1\")
+    add_definitions(-DARDUINO_PARTITION_default)
+
+    include_directories("${CMAKE_CURRENT_LIST_DIR}/include")
+    include_directories("${CMAKE_CURRENT_LIST_DIR}/src")
+    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/scd30")
+    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/ina219")
+    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/drs26_digital")
+    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/deep_sleep")
+    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/espnow/src")
+    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/includes")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/WiFi/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/Preferences/src")
+    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/caching/src")
+    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/time/src")
+    include_directories("${CMAKE_CURRENT_LIST_DIR}/.pio/libdeps/esp32-c3-devkitm-1/ArduinoJson/src")
+    include_directories("${CMAKE_CURRENT_LIST_DIR}/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time")
+    include_directories("${CMAKE_CURRENT_LIST_DIR}/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src")
+    include_directories("${CMAKE_CURRENT_LIST_DIR}/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/src")
+    include_directories("${CMAKE_CURRENT_LIST_DIR}/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15")
+    include_directories("${CMAKE_CURRENT_LIST_DIR}/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src")
+    include_directories("${CMAKE_CURRENT_LIST_DIR}/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/Wire/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/newlib/platform_include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/include/esp_additions/freertos")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/port/riscv/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/include/esp_additions")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/include/soc")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/include/soc/esp32c3")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/port/esp32c3")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/port/esp32c3/private_include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/heap/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/log/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/include/apps")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/include/apps/sntp")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/lwip/src/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/port/esp32/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/port/esp32/include/arch")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/soc/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/soc/esp32c3")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/soc/esp32c3/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/hal/esp32c3/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/hal/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/hal/platform_port/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rom/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rom/include/esp32c3")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rom/esp32c3")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_common/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/port/soc")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/port/include/riscv")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/port/public_compat")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/riscv/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/driver/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/driver/esp32c3/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_pm/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_ringbuf/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/efuse/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/efuse/esp32c3/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/vfs/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_wifi/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_event/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_netif/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_eth/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/tcpip_adapter/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_phy/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_phy/esp32c3/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_ipc/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/app_trace/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_timer/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mbedtls/port/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mbedtls/mbedtls/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mbedtls/esp_crt_bundle/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/app_update/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/spi_flash/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bootloader_support/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/nvs_flash/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/pthread/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_gdbstub/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_gdbstub/riscv")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_gdbstub/esp32c3")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/espcoredump/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/espcoredump/include/port/riscv")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wpa_supplicant/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wpa_supplicant/port/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wpa_supplicant/esp_supplicant/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/ieee802154/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/console")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/asio/asio/asio/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/asio/port/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/osi/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/include/esp32c3/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/api/include/api")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/btc/profile/esp/blufi/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/btc/profile/esp/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/host/bluedroid/api/include/api")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/esp_ble_mesh/mesh_common/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/esp_ble_mesh/mesh_common/tinycrypt/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/esp_ble_mesh/mesh_core")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/esp_ble_mesh/mesh_core/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/esp_ble_mesh/mesh_core/storage")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/esp_ble_mesh/btc/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/esp_ble_mesh/mesh_models/common/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/esp_ble_mesh/mesh_models/client/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/esp_ble_mesh/mesh_models/server/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/esp_ble_mesh/api/core/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/esp_ble_mesh/api/models/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/esp_ble_mesh/api")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/cbor/port/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/unity/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/unity/unity/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/cmock/CMock/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/coap/port/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/coap/libcoap/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/nghttp/port/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/nghttp/nghttp2/lib/includes")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-tls")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-tls/esp-tls-crypto")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_adc_cal/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hid/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/tcp_transport/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_http_client/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_http_server/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_https_ota/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_https_server/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_lcd/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_lcd/interface")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protobuf-c/protobuf-c")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protocomm/include/common")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protocomm/include/security")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protocomm/include/transports")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mdns/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_local_ctrl/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/sdmmc/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_serial_slave_link/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_websocket_client/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/expat/expat/expat/lib")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/expat/port/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wear_levelling/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fatfs/diskio")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fatfs/vfs")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fatfs/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freemodbus/common/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/idf_test/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/idf_test/include/esp32c3")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/jsmn/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json/cJSON")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/libsodium/libsodium/src/libsodium/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/libsodium/port_include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mqtt/esp-mqtt/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/openssl/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/spiffs/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wifi_provisioning/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/rmaker_common/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json_parser/upstream/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json_parser/upstream")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json_generator/upstream")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_schedule/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rainmaker/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/gpio_button/button/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/qrcode/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/ws2812_led")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/dotprod/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/support/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/hann/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/blackman/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/blackman_harris/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/blackman_nuttall/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/nuttall/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/flat_top/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/iir/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/fir/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/add/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/sub/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/mul/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/addc/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/mulc/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/sqrt/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/matrix/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/fft/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/dct/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/conv/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/common/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/kalman/ekf/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/kalman/ekf_imu13states/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_littlefs/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/tool")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/typedef")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/image")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/math")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/nn")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/layer")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/detect")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/model_zoo")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp32-camera/driver/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp32-camera/conversions/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fb_gfx/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/qio_qspi/include")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/cores/esp32")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/variants/esp32c3")
+    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/dr26_analogue")
+    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/rs485")
+    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/sht85")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/ArduinoOTA/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/AsyncUDP/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/BLE/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/BluetoothSerial/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/DNSServer/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/EEPROM/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/ESP32/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/ESPmDNS/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/Ethernet/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/FFat/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/FS/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/HTTPClient/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdate/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdateServer/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/I2S/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/LittleFS/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/NetBIOS/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/RainMaker/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/SD/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/SD_MMC/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/SPIFFS/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/SimpleBLE/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/Ticker/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/USB/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/Update/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/WebServer/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/WiFiClientSecure/src")
+    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/WiFiProv/src")
+    include_directories("$ENV{HOME}/.platformio/packages/toolchain-riscv32-esp/riscv32-esp-elf/include/c++/8.4.0")
+    include_directories("$ENV{HOME}/.platformio/packages/toolchain-riscv32-esp/riscv32-esp-elf/include/c++/8.4.0/riscv32-esp-elf")
+    include_directories("$ENV{HOME}/.platformio/packages/toolchain-riscv32-esp/lib/gcc/riscv32-esp-elf/8.4.0/include-fixed")
+    include_directories("$ENV{HOME}/.platformio/packages/toolchain-riscv32-esp/lib/gcc/riscv32-esp-elf/8.4.0/include")
+    include_directories("$ENV{HOME}/.platformio/packages/toolchain-riscv32-esp/riscv32-esp-elf/include")
+
+    FILE(GLOB_RECURSE EXTRA_LIB_SOURCES
+        ${CMAKE_CURRENT_LIST_DIR}/.pio/libdeps/esp32-c3-devkitm-1/*.*
+        $ENV{HOME}/GitRepos/sensor-system/client/libs/*.*
+    )
+endif()
+
+
+FILE(GLOB_RECURSE SRC_LIST
+    ${CMAKE_CURRENT_LIST_DIR}/src/*.*
+    ${CMAKE_CURRENT_LIST_DIR}/lib/*.*
+    ${CMAKE_CURRENT_LIST_DIR}/test/*.*
+)
+
+list(APPEND SRC_LIST ${EXTRA_LIB_SOURCES})
diff --git a/client/client/lib/README b/client/client/lib/README
deleted file mode 100644
index 6debab1e8b4c3faa0d06f4ff44bce343ce2cdcbf..0000000000000000000000000000000000000000
--- a/client/client/lib/README
+++ /dev/null
@@ -1,46 +0,0 @@
-
-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 <Foo.h>
-#include <Bar.h>
-
-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/client/client/platformio.ini b/client/client/platformio.ini
index 19ee957dceb9496815c39ad024625a57d06ce6d1..b1168679c8c4d514f117b44943c9a2bed37ada34 100644
--- a/client/client/platformio.ini
+++ b/client/client/platformio.ini
@@ -13,23 +13,26 @@ platform = espressif32
 board = esp32-c3-devkitm-1
 framework = arduino
 monitor_speed = 115200
+lib_ldf_mode = deep
+lib_extra_dirs =
+    ../libs
 ; C++17 https://community.platformio.org/t/esp32-c-17-toolchain-missing-std-optional/25850/6
 ; we use c++17 features (i.e. optionals in ClientDataPackage.hpp)
-build_flags = 
-	-I include
-	-DCORE_DEBUG_LEVEL=5
-	-std=gnu++17
+build_flags =
+    -I include
+    -DCORE_DEBUG_LEVEL=5
+    -std=gnu++17
 build_unflags = -std=gnu++11
-monitor_port = /dev/ttyUSB0
-upload_port = /dev/ttyUSB0
+;monitor_port = /dev/ttyUSB0
+;upload_port = /dev/ttyUSB0
 lib_deps =
-	sparkfun/SparkFun SCD30 Arduino Library@^1.0.18
-	Wire
-	adafruit/Adafruit ADS1X15@^2.4.0
-	wollewald/INA219_WE@^1.3.1
-	adafruit/Adafruit BusIO@^1.13.2
-	Adafruit_I2CDevice
-	SPI
-	envirodiy/SDI-12@^2.1.4
-	fbiego/ESP32Time@^2.0.0
-	bblanchon/ArduinoJson@^6.19.4
+    sparkfun/SparkFun SCD30 Arduino Library@^1.0.18
+    Wire
+    adafruit/Adafruit ADS1X15@^2.4.0
+    wollewald/INA219_WE@^1.3.1
+    adafruit/Adafruit BusIO@^1.13.2
+    Adafruit_I2CDevice
+    SPI
+    envirodiy/SDI-12@^2.1.4
+    fbiego/ESP32Time@^2.0.0
+    bblanchon/ArduinoJson@^6.19.4
diff --git a/client/client/src/main.cpp b/client/client/src/main.cpp
index f449b3c01d15f35028eaae68e6017e30b7fd0e7f..3836f7f746d67e89bc9f533d4ae99d14f2181611 100644
--- a/client/client/src/main.cpp
+++ b/client/client/src/main.cpp
@@ -1,4 +1,4 @@
-#include "../lib/dr26_analogue/dr26.hpp"
+#include "dr26.hpp"
 #include "NoDataAvailableException.hpp"
 #include "esp_log.h"
 #include "f_deep_sleep.hpp"
@@ -10,9 +10,10 @@
 // #include "esp32-hal-log.h"
 static const std::string TAG = "MAIN";
 
-
-ForteDR26 dr26_channel0;
-ForteDR26 dr26_channel1;
+ForteDRS26 drs26;
+//
+//ForteDR26 dr26_channel0;
+//ForteDR26 dr26_channel1;
 
 void setup()
 {
@@ -23,26 +24,25 @@ void setup()
 	ESP_LOGD(TAG.c_str(), "Boot number: %d", DeepSleep::bootCount);
 
 
-	dr26_channel1.setup();
-	dr26_channel0.setChannel(0);
-	dr26_channel1.setChannel(1);
-
+//	dr26_channel1.setup();
+//	dr26_channel0.setChannel(0);
+//	dr26_channel1.setChannel(1);
+	drs26.setup();
 	espnow_setup();
 	//	log_e("Setup complete.");
 }
 
 void loop()
 {
-	
-Serial.println("***********************1-DRS26**********************************");
-Serial.println(dr26_channel0.readData(),5);
-Serial.println("***********************2-DRS26**********************************");
-Serial.println(dr26_channel1.readData(),5);
+//
+//Serial.println("***********************1-DRS26**********************************");
+//Serial.println(dr26_channel0.readData(),5);
+//Serial.println("***********************2-DRS26**********************************");
+//Serial.println(dr26_channel1.readData(),5);
 
 	try {
 
-		auto messages = dr26_channel0.buildMessages();
-		messages=dr26_channel1.buildMessages();
+		auto messages = drs26.buildMessages();
 
 		for (const Message &message : messages) {
 			if(message.send() != ESP_OK){
diff --git a/client/client/lib/caching/src/ram_caching.cpp b/client/libs/caching/src/ram_caching.cpp
similarity index 100%
rename from client/client/lib/caching/src/ram_caching.cpp
rename to client/libs/caching/src/ram_caching.cpp
diff --git a/client/client/lib/caching/src/ram_caching.hpp b/client/libs/caching/src/ram_caching.hpp
similarity index 100%
rename from client/client/lib/caching/src/ram_caching.hpp
rename to client/libs/caching/src/ram_caching.hpp
diff --git a/client/client/lib/deep_sleep/f_deep_sleep.cpp b/client/libs/deep_sleep/f_deep_sleep.cpp
similarity index 100%
rename from client/client/lib/deep_sleep/f_deep_sleep.cpp
rename to client/libs/deep_sleep/f_deep_sleep.cpp
diff --git a/client/client/lib/deep_sleep/f_deep_sleep.hpp b/client/libs/deep_sleep/f_deep_sleep.hpp
similarity index 100%
rename from client/client/lib/deep_sleep/f_deep_sleep.hpp
rename to client/libs/deep_sleep/f_deep_sleep.hpp
diff --git a/client/client/lib/dr26_analogue/dr26.cpp b/client/libs/dr26_analogue/dr26.cpp
similarity index 100%
rename from client/client/lib/dr26_analogue/dr26.cpp
rename to client/libs/dr26_analogue/dr26.cpp
diff --git a/client/client/lib/dr26_analogue/dr26.hpp b/client/libs/dr26_analogue/dr26.hpp
similarity index 100%
rename from client/client/lib/dr26_analogue/dr26.hpp
rename to client/libs/dr26_analogue/dr26.hpp
diff --git a/client/client/lib/drs26_digital/drs26.cpp b/client/libs/drs26_digital/drs26.cpp
similarity index 100%
rename from client/client/lib/drs26_digital/drs26.cpp
rename to client/libs/drs26_digital/drs26.cpp
diff --git a/client/client/lib/drs26_digital/drs26.hpp b/client/libs/drs26_digital/drs26.hpp
similarity index 100%
rename from client/client/lib/drs26_digital/drs26.hpp
rename to client/libs/drs26_digital/drs26.hpp
diff --git a/client/client/lib/espnow/README b/client/libs/espnow/README
similarity index 100%
rename from client/client/lib/espnow/README
rename to client/libs/espnow/README
diff --git a/client/client/lib/espnow/src/ClientDataPackage.hpp b/client/libs/espnow/src/ClientDataPackage.hpp
similarity index 100%
rename from client/client/lib/espnow/src/ClientDataPackage.hpp
rename to client/libs/espnow/src/ClientDataPackage.hpp
diff --git a/client/client/lib/espnow/src/ESPNow.cpp b/client/libs/espnow/src/ESPNow.cpp
similarity index 100%
rename from client/client/lib/espnow/src/ESPNow.cpp
rename to client/libs/espnow/src/ESPNow.cpp
diff --git a/client/client/lib/espnow/src/ESPNow.hpp b/client/libs/espnow/src/ESPNow.hpp
similarity index 100%
rename from client/client/lib/espnow/src/ESPNow.hpp
rename to client/libs/espnow/src/ESPNow.hpp
diff --git a/client/client/lib/espnow/src/Message.cpp b/client/libs/espnow/src/Message.cpp
similarity index 100%
rename from client/client/lib/espnow/src/Message.cpp
rename to client/libs/espnow/src/Message.cpp
diff --git a/client/client/lib/espnow/src/Message.hpp b/client/libs/espnow/src/Message.hpp
similarity index 100%
rename from client/client/lib/espnow/src/Message.hpp
rename to client/libs/espnow/src/Message.hpp
diff --git a/client/client/lib/ina219/ina219.cpp b/client/libs/ina219/ina219.cpp
similarity index 100%
rename from client/client/lib/ina219/ina219.cpp
rename to client/libs/ina219/ina219.cpp
diff --git a/client/client/lib/ina219/ina219.hpp b/client/libs/ina219/ina219.hpp
similarity index 100%
rename from client/client/lib/ina219/ina219.hpp
rename to client/libs/ina219/ina219.hpp
diff --git a/client/client/include/ForteSensor.hpp b/client/libs/includes/ForteSensor.hpp
similarity index 100%
rename from client/client/include/ForteSensor.hpp
rename to client/libs/includes/ForteSensor.hpp
diff --git a/client/client/include/MeasurementData.hpp b/client/libs/includes/MeasurementData.hpp
similarity index 100%
rename from client/client/include/MeasurementData.hpp
rename to client/libs/includes/MeasurementData.hpp
diff --git a/client/client/include/NoDataAvailableException.hpp b/client/libs/includes/NoDataAvailableException.hpp
similarity index 100%
rename from client/client/include/NoDataAvailableException.hpp
rename to client/libs/includes/NoDataAvailableException.hpp
diff --git a/client/client/include/Pinout.hpp b/client/libs/includes/Pinout.hpp
similarity index 100%
rename from client/client/include/Pinout.hpp
rename to client/libs/includes/Pinout.hpp
diff --git a/client/client/include/Protocol.hpp b/client/libs/includes/Protocol.hpp
similarity index 100%
rename from client/client/include/Protocol.hpp
rename to client/libs/includes/Protocol.hpp
diff --git a/client/client/include/README b/client/libs/includes/README
similarity index 100%
rename from client/client/include/README
rename to client/libs/includes/README
diff --git a/client/client/include/SensorInformation.hpp b/client/libs/includes/SensorInformation.hpp
similarity index 100%
rename from client/client/include/SensorInformation.hpp
rename to client/libs/includes/SensorInformation.hpp
diff --git a/client/libs/rs485/SentecSensors.cpp b/client/libs/rs485/SentecSensors.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/client/libs/rs485/SentecSensors.h b/client/libs/rs485/SentecSensors.h
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/client/libs/rs485/rs485.cpp b/client/libs/rs485/rs485.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/client/libs/rs485/rs485.hpp b/client/libs/rs485/rs485.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/client/client/lib/scd30/scd30.cpp b/client/libs/scd30/scd30.cpp
similarity index 100%
rename from client/client/lib/scd30/scd30.cpp
rename to client/libs/scd30/scd30.cpp
diff --git a/client/client/lib/scd30/scd30.hpp b/client/libs/scd30/scd30.hpp
similarity index 100%
rename from client/client/lib/scd30/scd30.hpp
rename to client/libs/scd30/scd30.hpp
diff --git a/client/libs/sht85/Sht85.cpp b/client/libs/sht85/Sht85.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e7ad651b544e814b065a600f4892e2238bb18465
--- /dev/null
+++ b/client/libs/sht85/Sht85.cpp
@@ -0,0 +1,67 @@
+//
+// Created by zoe on 11/4/22.
+//
+
+#include "Sht85.hpp"
+void Sht85::setup() {}
+
+void Sht85::readSHT()
+{
+	// Read data from the initialized SHT85
+	// TODO send via esp now instead of printing
+	if (sht.readSample()) {
+		Serial.print("T:  ");
+		Serial.println(sht.getTemperature(), 2);
+		Serial.print("RH: ");
+		Serial.println(sht.getHumidity(), 2);
+	} else {
+		Serial.print("Error in readSample()\n");
+	}
+}
+
+out_data_sht85 Sht85::readData()
+{
+	// Start the I2C bus
+	Wire.begin(SDA, SCL);
+	delay(100); // let serial console settle
+
+	// initiate the SHT85 sensor
+	Serial.println("");
+	if (sht.init()) {
+		Serial.println("SHT initialization successful");
+	} else {
+		Serial.println("SHT initialization failed");
+	}
+
+	// T + RH reading
+	readSHT();
+
+	delay(100);
+
+	// end I2C to free the pins to be used by the SD card
+	Wire.end();
+
+	out_data_sht85 sht85Data;
+	sht85Data.temperature = sht.getTemperature();
+	sht85Data.humidity = sht.getHumidity();
+	return sht85Data;
+}
+std::list<Message> Sht85::buildMessages()
+{
+	std::list<Message> messages;
+	auto data = readData();
+	MeasurementData temperatureMeasurementData{
+	    data.temperature, {}, 0x44, measurementTypeToString.at(MeasurementType::TEMPERATURE)};
+	MeasurementData humidityMeasurementData{
+	    data.humidity, {}, 0x44, measurementTypeToString.at(MeasurementType::HUMIDITY)};
+
+	messages.emplace_back(
+	    Message{temperatureMeasurementData, sensorInformation, Time::getInstance().getEpochSeconds()});
+	messages.emplace_back(Message{humidityMeasurementData, sensorInformation, Time::getInstance().getEpochSeconds()});
+
+	return messages;
+}
+SensorInformation Sht85::getSensorInformation() const
+{
+	return sensorInformation;
+}
diff --git a/client/libs/sht85/Sht85.hpp b/client/libs/sht85/Sht85.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..24b1eb71699886a1aa97bcfed51efd22dd0dc55b
--- /dev/null
+++ b/client/libs/sht85/Sht85.hpp
@@ -0,0 +1,47 @@
+//
+// Created by zoe on 11/4/22.
+//
+
+#ifndef ESPCAM_SHT85_HPP
+#define ESPCAM_SHT85_HPP
+
+#include "ForteSensor.hpp"
+#include "Message.hpp"
+#include "Pinout.hpp"
+#include "MeasurementData.hpp"
+#include "RTClib.h"    // adafruit/RTClib @^2.1.1
+#include "SHTSensor.h" // sensirion/arduino-sht@^1.2.2
+#include "SPI.h"
+#include "Wire.h"
+#include "esp_log.h"
+#include "Time.hpp"
+#include <Arduino.h>
+#include <Wire.h>
+
+struct out_data_sht85 {
+	float temperature = 0.0;
+	float humidity = 0.0;
+};
+
+class Sht85 : public ForteSensor<out_data_sht85> {
+  public:
+	void setup() override;
+	out_data_sht85 readData() override;
+	std::list<Message> buildMessages() override;
+	[[nodiscard]] SensorInformation getSensorInformation() const override;
+
+  private:
+	SHTSensor sht{SHTSensor::SHT85}; // I2C address: 0x44
+	out_data_sht85 data;
+	const SensorInformation sensorInformation{"SHT85", Protocol::I2C};
+	void readSHT();
+
+	enum class MeasurementType { TEMPERATURE, HUMIDITY };
+
+	// enum to string
+	std::map<MeasurementType, const char *> measurementTypeToString = {
+	    {MeasurementType::TEMPERATURE, "TEMPERATURE"},
+	    {MeasurementType::HUMIDITY, "HUMIDITY"}};
+};
+
+#endif // ESPCAM_SHT85_HPP
diff --git a/client/client/lib/time/src/Time.cpp b/client/libs/time/src/Time.cpp
similarity index 100%
rename from client/client/lib/time/src/Time.cpp
rename to client/libs/time/src/Time.cpp
diff --git a/client/client/lib/time/src/Time.hpp b/client/libs/time/src/Time.hpp
similarity index 100%
rename from client/client/lib/time/src/Time.hpp
rename to client/libs/time/src/Time.hpp
diff --git a/code-snippets/client/ESPcam/include/README b/code-snippets/client/ESPcam/include/README
deleted file mode 100644
index 194dcd43252dcbeb2044ee38510415041a0e7b47..0000000000000000000000000000000000000000
--- a/code-snippets/client/ESPcam/include/README
+++ /dev/null
@@ -1,39 +0,0 @@
-
-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/code-snippets/client/ESPcam/src/main.cpp b/code-snippets/client/ESPcam/src/main.cpp
deleted file mode 100644
index ac20e29084b8801963f6875cd65dda2241634643..0000000000000000000000000000000000000000
--- a/code-snippets/client/ESPcam/src/main.cpp
+++ /dev/null
@@ -1,321 +0,0 @@
-/*
-Snippet content:
-Takes pictures with ESP32-CAM, saves images to MicroSD Card.
-Measures air temperature and relative humidity from SHT85.
-
-We use the ESP-CAM for the SHT85 readout because of the
-limited wire length that can be used for I2C sensors - the
-camera sits at the top of the mast next to the SHT85 sensor.
-
-ESP-CAM code partially copied from
-https://dronebotworkshop.com/esp32-cam-microsd/
-
-NOTE: To flash the ESP-CAM, pin IO1 has to be connected to GND!
-TODO: because of this limitation, it would be nice to implement
-over-the-air updates for the camera at one point.
-*/
-
-// Include Required Libraries
-// I2C: SHT85, RTC
-#include <Arduino.h>
-#include <Wire.h>
-#include "SHTSensor.h"    // sensirion/arduino-sht@^1.2.2
-#include "RTClib.h"       // adafruit/RTClib @^2.1.1
-#include "SPI.h"
-
-// Camera libraries
-#include "esp_camera.h"
-#include "soc/soc.h"
-#include "soc/rtc_cntl_reg.h"
-#include "driver/rtc_io.h"
-
-// MicroSD Libraries
-#include "FS.h"
-#include "SD_MMC.h"
-
-// Pin definitions for CAMERA_MODEL_AI_THINKER
-#define PWDN_GPIO_NUM     32
-#define RESET_GPIO_NUM    -1
-#define XCLK_GPIO_NUM      0
-#define SIOD_GPIO_NUM     26
-#define SIOC_GPIO_NUM     27
-#define Y9_GPIO_NUM       35
-#define Y8_GPIO_NUM       34
-#define Y7_GPIO_NUM       39
-#define Y6_GPIO_NUM       36
-#define Y5_GPIO_NUM       21
-#define Y4_GPIO_NUM       19
-#define Y3_GPIO_NUM       18
-#define Y2_GPIO_NUM        5
-#define VSYNC_GPIO_NUM    25
-#define HREF_GPIO_NUM     23
-#define PCLK_GPIO_NUM     22
-
-// Pin definitions for I2C (SHT85, RTC)
-//  This is different from the pins on the ESP32-C3-DevKit boards!
-#define SDA         12
-#define SCL         13
-
-// LED control
-#define LEDpin 4
-
-// string for saving the time
-char time_string[20];
-
-// number of images to take: the last one is saved
-//   this is done because the first few images have a green tint otherwise
-int img_number = 3;
-
-SHTSensor sht(SHTSensor::SHT85);    // I2C address: 0x44
-RTC_DS3231 rtc;                     // I2C address: 0x68
-camera_config_t config;             // camera configuration parameters
-
-
-
-void configESPCamera() { 
-  // Configure Camera parameters 
-
-  config.ledc_channel = LEDC_CHANNEL_0;
-  config.ledc_timer = LEDC_TIMER_0;
-  config.pin_d0 = Y2_GPIO_NUM;
-  config.pin_d1 = Y3_GPIO_NUM;
-  config.pin_d2 = Y4_GPIO_NUM;
-  config.pin_d3 = Y5_GPIO_NUM;
-  config.pin_d4 = Y6_GPIO_NUM;
-  config.pin_d5 = Y7_GPIO_NUM;
-  config.pin_d6 = Y8_GPIO_NUM;
-  config.pin_d7 = Y9_GPIO_NUM;
-  config.pin_xclk = XCLK_GPIO_NUM;
-  config.pin_pclk = PCLK_GPIO_NUM;
-  config.pin_vsync = VSYNC_GPIO_NUM;
-  config.pin_href = HREF_GPIO_NUM;
-  config.pin_sscb_sda = SIOD_GPIO_NUM;
-  config.pin_sscb_scl = SIOC_GPIO_NUM;
-  config.pin_pwdn = PWDN_GPIO_NUM;
-  config.pin_reset = RESET_GPIO_NUM;
-  config.xclk_freq_hz = 20000000;
-  config.pixel_format = PIXFORMAT_JPEG; // Choices are YUV422, GRAYSCALE, RGB565, JPEG
-
-  // Select lower framesize if the camera doesn't support PSRAM
-  if (psramFound()) {
-    config.frame_size = FRAMESIZE_UXGA; // FRAMESIZE_ + QVGA|CIF|VGA|SVGA|XGA|SXGA|UXGA
-    config.jpeg_quality = 10; //10-63 lower number means higher quality
-    config.fb_count = 2;
-  } else {
-    config.frame_size = FRAMESIZE_SVGA;
-    config.jpeg_quality = 12;
-    config.fb_count = 1;
-  }
-
-  // Initialize the Camera
-  esp_err_t err = esp_camera_init(&config);
-  
-  if (err != ESP_OK) {
-    Serial.printf("Camera init failed with error 0x%x", err);
-    return;
-  }
-
-  // Camera quality adjustments
-  sensor_t * s = esp_camera_sensor_get();
-
-  // TODO: this is copied from an online tutorial, it's possible that we don't need this at all!
-  // BRIGHTNESS (-2 to 2)
-  s->set_brightness(s, 0);
-  // CONTRAST (-2 to 2)
-  s->set_contrast(s, 0);
-  // SATURATION (-2 to 2)
-  s->set_saturation(s, 0);
-  // SPECIAL EFFECTS (0 - No Effect, 1 - Negative, 2 - Grayscale, 3 - Red Tint, 4 - Green Tint, 5 - Blue Tint, 6 - Sepia)
-  s->set_special_effect(s, 0);
-  // WHITE BALANCE (0 = Disable , 1 = Enable)
-  s->set_whitebal(s, 1);
-  // AWB GAIN (0 = Disable , 1 = Enable)
-  s->set_awb_gain(s, 1);
-  // WB MODES (0 - Auto, 1 - Sunny, 2 - Cloudy, 3 - Office, 4 - Home)
-  s->set_wb_mode(s, 0);
-  // EXPOSURE CONTROLS (0 = Disable , 1 = Enable)
-  s->set_exposure_ctrl(s, 1);
-  // AEC2 (0 = Disable , 1 = Enable)
-  s->set_aec2(s, 0);
-  // AE LEVELS (-2 to 2)
-  s->set_ae_level(s, 0);
-  // AEC VALUES (0 to 1200)
-  s->set_aec_value(s, 300);
-  // GAIN CONTROLS (0 = Disable , 1 = Enable)
-  s->set_gain_ctrl(s, 1);
-  // AGC GAIN (0 to 30)
-  s->set_agc_gain(s, 0);
-  // GAIN CEILING (0 to 6)
-  s->set_gainceiling(s, (gainceiling_t)0);
-  // BPC (0 = Disable , 1 = Enable)
-  s->set_bpc(s, 0);
-  // WPC (0 = Disable , 1 = Enable)
-  s->set_wpc(s, 1);
-  // RAW GMA (0 = Disable , 1 = Enable)
-  s->set_raw_gma(s, 1);
-  // LENC (0 = Disable , 1 = Enable)
-  s->set_lenc(s, 1);
-  // HORIZ MIRROR (0 = Disable , 1 = Enable)
-  s->set_hmirror(s, 0);
-  // VERT FLIP (0 = Disable , 1 = Enable)
-  s->set_vflip(s, 0);
-  // DCW (0 = Disable , 1 = Enable)
-  s->set_dcw(s, 1);
-  // COLOR BAR PATTERN (0 = Disable , 1 = Enable)
-  s->set_colorbar(s, 0);
-}
-
-void initMicroSDCard() {
-  // Start the MicroSD card
-  Serial.println("Mounting MicroSD Card");
-  if (!SD_MMC.begin("/sdcard", true)) {  // the arguments disable the LED when using the SD card - leave them there!
-    Serial.println("MicroSD Card Mount Failed");
-    return;
-  }
-  uint8_t cardType = SD_MMC.cardType();
-  if (cardType == CARD_NONE) {
-    Serial.println("No MicroSD Card found");
-    return;
-  }
-}
-
-void takeNewPhoto(String path) {
-  // Take picture with the camera and save it
-
-  // Take multiple pictures with a short break in between
-  //   necessary for the camera to auto-adjust settings
-  camera_fb_t * fb;
-  for (int i = 1; i <= img_number; i++) {
-    // Setup frame buffer
-    fb = esp_camera_fb_get();
-    // digitalWrite(LEDpin, LOW);  // disable flash LED if needed
-  
-    if (!fb) {
-      Serial.println("Camera capture failed");
-      return;
-    } else {
-      Serial.println("Camera capture successful");
-    }
-    // TODO check if this delay is necessary once the SD-card todo below
-    //   is resolved. It's possible that it can be at least shortened.
-    if (i == img_number) {
-      delay(2000);
-    }
-
-    esp_camera_fb_return(fb);
-    // Without this delay the image is corrupt
-    // TODO this delay can possibly also be optimized.
-    delay(1500);
-
-    /* TODO: 
-    The SD card throws the following error when the capture fails:
-    E (877528) sdmmc_cmd: sdmmc_write_sectors_dma: sdmmc_send_cmd returned 0x109
-    E (877528) diskio_sdmmc: sdmmc_write_blocks failed (265)
-    This happens infrequently, say every 10th image or so.
-    If this happens, one more new image should be taken and saved
-    */
-  }  
-
-  // Save picture to microSD card
-  fs::FS &fs = SD_MMC;
-  File file = fs.open(path.c_str(), FILE_WRITE);
-  if (!file) {
-    Serial.println("Failed to open file in write mode");
-  }
-  else {
-    file.write(fb->buf, fb->len); // payload (image), payload length
-    Serial.printf("Saved file to path: %s\n", path.c_str());
-  }
-  // Close the file
-  file.close();
-
-  // Return the frame buffer back to the driver for reuse
-  esp_camera_fb_return(fb);
-}
-
-
-void readSHT(){
-  // Read data from the initialized SHT85
-  // TODO send via esp now instead of printing
-  if (sht.readSample()) {
-      Serial.print("T:  ");
-      Serial.println(sht.getTemperature(), 2);
-      Serial.print("RH: ");
-      Serial.println(sht.getHumidity(), 2);
-  } else {
-      Serial.print("Error in readSample()\n");
-  }
-}
-
-void readRTC(){
-  // This is used for a picture timestamp (name of the image)
-  rtc.begin();
-  DateTime now = rtc.now();
-  sprintf(time_string, "%04d-%02d-%02dT%02d-%02d-%02d", now.year(), now.month(), now.day(), now.hour(), now.minute(), now.second());
-  Serial.println(time_string);
-}
-
-void readI2C(){
-  // Start the I2C bus
-  Wire.begin(SDA, SCL);
-  delay(100);     // let serial console settle
-
-  // initiate the SHT85 sensor
-  Serial.println("");
-  if (sht.init()) {
-      Serial.println("SHT initialization successful");
-  } else {
-      Serial.println("SHT initialization failed");
-  }
-
-  // T + RH reading
-  readSHT();
-  // real-time clock reading
-  readRTC();
-  delay(100);
-
-  // end I2C to free the pins to be used by the SD card
-  Wire.end();
-}
-
-
-void setup() {
-  // control of the LED pin
-  pinMode(LEDpin, OUTPUT);
-  // Disable brownout detector
-  WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);
-
-  // Start Serial
-  Serial.begin(115200); 
-
-  // Initialize the camera
-  Serial.print("Initializing the camera module...");
-  configESPCamera();
-  Serial.println("Camera OK!");
-
-}
-
-void loop() {
-  // initiate I2C, read SHT+RTC, end I2C
-  readI2C();
-
-  // Initialize the MicroSD
-  Serial.print("Initializing the MicroSD card module... ");
-  initMicroSDCard();
-
-  // Path where new image will be saved in MicroSD card
-  String path = "/" + String(time_string) + ".jpg";
-  Serial.printf("Picture file name: %s\n", path.c_str());
-
-  // Take and save a picture
-  takeNewPhoto(path);
-
-  // Unmount SD card to free the pins for I2C use
-  SD_MMC.end();
-
-  // Delay for specified period
-  delay(1000);
-}
-
-
-