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); -} - - -