diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..b914e15 --- /dev/null +++ b/.clang-format @@ -0,0 +1,4 @@ +BasedOnStyle: Google +IndentWidth: 4 +ColumnLimit: 120 + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..03f4a3c --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.pio diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..4aa958b --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,517 @@ +// +// !!! WARNING !!! AUTO-GENERATED FILE! +// PLEASE DO NOT MODIFY IT AND USE "platformio.ini": +// https://docs.platformio.org/page/projectconf/section_env_build.html#build-flags +// +{ + "configurations": [ + { + "name": "PlatformIO", + "includePath": [ + "/home/admar/Documents/Arduino/buienradarklok/Claire/include", + "/home/admar/Documents/Arduino/buienradarklok/Claire/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/Ticker/src", + "/home/admar/Documents/Arduino/buienradarklok/Claire/.pio/libdeps/esp32dev/dESPatch", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/Update/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/HTTPClient/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/WiFiClientSecure/src", + "/home/admar/Documents/Arduino/buienradarklok/Claire/.pio/libdeps/esp32dev/ArduinoJson/src", + "/home/admar/Documents/Arduino/buienradarklok/Claire/.pio/libdeps/esp32dev/WifiManager-esp32", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/Preferences/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/WebServer/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/FS/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/DNSServer/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/WiFi/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/newlib/platform_include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include/esp_additions/freertos", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/port/xtensa/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include/esp_additions", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/include/soc", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/include/soc/esp32", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/port/esp32", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/port/esp32/private_include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/heap/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/log/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/include/apps", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/include/apps/sntp", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/lwip/src/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/port/esp32/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/port/esp32/include/arch", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/soc/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/soc/esp32", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/soc/esp32/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/hal/esp32/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/hal/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/hal/platform_port/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rom/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rom/include/esp32", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rom/esp32", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_common/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_system/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_system/port/soc", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_system/port/public_compat", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp32/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/xtensa/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/xtensa/esp32/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/driver/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/driver/esp32/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_pm/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_ringbuf/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/efuse/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/efuse/esp32/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/vfs/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_wifi/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_event/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_netif/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_eth/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/tcpip_adapter/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_phy/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_phy/esp32/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_ipc/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/app_trace/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_timer/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mbedtls/port/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mbedtls/mbedtls/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mbedtls/esp_crt_bundle/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/app_update/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/spi_flash/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bootloader_support/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/nvs_flash/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/pthread/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_gdbstub/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_gdbstub/xtensa", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_gdbstub/esp32", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espcoredump/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espcoredump/include/port/xtensa", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wpa_supplicant/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wpa_supplicant/port/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wpa_supplicant/esp_supplicant/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/ieee802154/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/console", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/asio/asio/asio/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/asio/port/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/osi/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/include/esp32/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/api/include/api", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/btc/profile/esp/blufi/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/btc/profile/esp/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/host/bluedroid/api/include/api", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_common/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_common/tinycrypt/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_core", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_core/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_core/storage", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/btc/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_models/common/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_models/client/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_models/server/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/api/core/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/api/models/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/api", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/cbor/port/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/unity/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/unity/unity/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/cmock/CMock/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/coap/port/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/coap/libcoap/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/nghttp/port/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/nghttp/nghttp2/lib/includes", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-tls", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-tls/esp-tls-crypto", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_adc_cal/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hid/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/tcp_transport/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_http_client/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_http_server/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_https_ota/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_https_server/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_lcd/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_lcd/interface", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protobuf-c/protobuf-c", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protocomm/include/common", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protocomm/include/security", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protocomm/include/transports", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mdns/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_local_ctrl/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/sdmmc/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_serial_slave_link/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_websocket_client/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/expat/expat/expat/lib", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/expat/port/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wear_levelling/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fatfs/diskio", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fatfs/vfs", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fatfs/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freemodbus/freemodbus/common/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/idf_test/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/idf_test/include/esp32", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/jsmn/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json/cJSON", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/libsodium/libsodium/src/libsodium/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/libsodium/port_include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mqtt/esp-mqtt/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/openssl/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/perfmon/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/spiffs/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/ulp/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wifi_provisioning/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/rmaker_common/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_diagnostics/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/rtc_store/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_insights/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json_parser/upstream/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json_parser/upstream", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json_generator/upstream", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_schedule/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp_secure_cert_mgr/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rainmaker/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/gpio_button/button/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/qrcode/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/ws2812_led", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_littlefs/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/tool", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/typedef", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/image", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/math", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/nn", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/layer", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/detect", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/model_zoo", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp32-camera/driver/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp32-camera/conversions/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/dotprod/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/support/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/support/mem/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/hann/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/blackman/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/blackman_harris/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/blackman_nuttall/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/nuttall/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/flat_top/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/iir/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/fir/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/add/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/sub/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/mul/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/addc/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/mulc/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/sqrt/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/matrix/mul/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/matrix/add/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/matrix/addc/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/matrix/mulc/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/matrix/sub/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/matrix/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/fft/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/dct/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/conv/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/common/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/matrix/mul/test/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/kalman/ekf/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/kalman/ekf_imu13states/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fb_gfx/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/dio_qspi/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/cores/esp32", + "/home/admar/.platformio/packages/framework-arduinoespressif32/variants/esp32", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/ArduinoOTA/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/AsyncUDP/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/BLE/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/BluetoothSerial/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/EEPROM/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/ESP32/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/ESPmDNS/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/Ethernet/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/FFat/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdate/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdateServer/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/I2S/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/Insights/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/LittleFS/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/NetBIOS/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/RainMaker/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/SD/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/SD_MMC/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/SPIFFS/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/SimpleBLE/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/USB/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/WiFiProv/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/Wire/src", + "" + ], + "browse": { + "limitSymbolsToIncludedHeaders": true, + "path": [ + "/home/admar/Documents/Arduino/buienradarklok/Claire/include", + "/home/admar/Documents/Arduino/buienradarklok/Claire/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/Ticker/src", + "/home/admar/Documents/Arduino/buienradarklok/Claire/.pio/libdeps/esp32dev/dESPatch", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/Update/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/HTTPClient/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/WiFiClientSecure/src", + "/home/admar/Documents/Arduino/buienradarklok/Claire/.pio/libdeps/esp32dev/ArduinoJson/src", + "/home/admar/Documents/Arduino/buienradarklok/Claire/.pio/libdeps/esp32dev/WifiManager-esp32", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/Preferences/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/WebServer/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/FS/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/DNSServer/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/WiFi/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/newlib/platform_include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include/esp_additions/freertos", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/port/xtensa/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include/esp_additions", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/include/soc", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/include/soc/esp32", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/port/esp32", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/port/esp32/private_include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/heap/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/log/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/include/apps", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/include/apps/sntp", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/lwip/src/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/port/esp32/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/port/esp32/include/arch", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/soc/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/soc/esp32", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/soc/esp32/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/hal/esp32/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/hal/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/hal/platform_port/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rom/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rom/include/esp32", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rom/esp32", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_common/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_system/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_system/port/soc", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_system/port/public_compat", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp32/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/xtensa/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/xtensa/esp32/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/driver/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/driver/esp32/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_pm/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_ringbuf/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/efuse/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/efuse/esp32/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/vfs/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_wifi/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_event/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_netif/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_eth/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/tcpip_adapter/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_phy/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_phy/esp32/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_ipc/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/app_trace/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_timer/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mbedtls/port/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mbedtls/mbedtls/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mbedtls/esp_crt_bundle/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/app_update/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/spi_flash/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bootloader_support/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/nvs_flash/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/pthread/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_gdbstub/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_gdbstub/xtensa", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_gdbstub/esp32", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espcoredump/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espcoredump/include/port/xtensa", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wpa_supplicant/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wpa_supplicant/port/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wpa_supplicant/esp_supplicant/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/ieee802154/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/console", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/asio/asio/asio/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/asio/port/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/osi/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/include/esp32/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/api/include/api", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/btc/profile/esp/blufi/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/btc/profile/esp/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/host/bluedroid/api/include/api", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_common/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_common/tinycrypt/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_core", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_core/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_core/storage", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/btc/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_models/common/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_models/client/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_models/server/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/api/core/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/api/models/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/api", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/cbor/port/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/unity/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/unity/unity/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/cmock/CMock/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/coap/port/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/coap/libcoap/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/nghttp/port/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/nghttp/nghttp2/lib/includes", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-tls", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-tls/esp-tls-crypto", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_adc_cal/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hid/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/tcp_transport/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_http_client/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_http_server/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_https_ota/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_https_server/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_lcd/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_lcd/interface", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protobuf-c/protobuf-c", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protocomm/include/common", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protocomm/include/security", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protocomm/include/transports", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mdns/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_local_ctrl/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/sdmmc/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_serial_slave_link/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_websocket_client/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/expat/expat/expat/lib", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/expat/port/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wear_levelling/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fatfs/diskio", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fatfs/vfs", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fatfs/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freemodbus/freemodbus/common/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/idf_test/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/idf_test/include/esp32", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/jsmn/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json/cJSON", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/libsodium/libsodium/src/libsodium/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/libsodium/port_include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mqtt/esp-mqtt/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/openssl/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/perfmon/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/spiffs/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/ulp/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wifi_provisioning/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/rmaker_common/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_diagnostics/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/rtc_store/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_insights/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json_parser/upstream/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json_parser/upstream", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json_generator/upstream", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_schedule/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp_secure_cert_mgr/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rainmaker/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/gpio_button/button/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/qrcode/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/ws2812_led", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_littlefs/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/tool", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/typedef", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/image", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/math", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/nn", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/layer", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/detect", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/model_zoo", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp32-camera/driver/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp32-camera/conversions/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/dotprod/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/support/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/support/mem/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/hann/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/blackman/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/blackman_harris/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/blackman_nuttall/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/nuttall/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/flat_top/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/iir/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/fir/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/add/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/sub/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/mul/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/addc/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/mulc/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/sqrt/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/matrix/mul/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/matrix/add/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/matrix/addc/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/matrix/mulc/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/matrix/sub/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/matrix/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/fft/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/dct/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/conv/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/common/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/matrix/mul/test/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/kalman/ekf/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/kalman/ekf_imu13states/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fb_gfx/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/dio_qspi/include", + "/home/admar/.platformio/packages/framework-arduinoespressif32/cores/esp32", + "/home/admar/.platformio/packages/framework-arduinoespressif32/variants/esp32", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/ArduinoOTA/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/AsyncUDP/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/BLE/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/BluetoothSerial/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/EEPROM/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/ESP32/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/ESPmDNS/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/Ethernet/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/FFat/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdate/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdateServer/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/I2S/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/Insights/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/LittleFS/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/NetBIOS/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/RainMaker/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/SD/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/SD_MMC/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/SPIFFS/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/SimpleBLE/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/USB/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/WiFiProv/src", + "/home/admar/.platformio/packages/framework-arduinoespressif32/libraries/Wire/src", + "" + ] + }, + "defines": [ + "PLATFORMIO=60115", + "ARDUINO_ESP32_DEV", + "HAVE_CONFIG_H", + "MBEDTLS_CONFIG_FILE=\"mbedtls/esp_config.h\"", + "UNITY_INCLUDE_CONFIG_H", + "WITH_POSIX", + "_GNU_SOURCE", + "IDF_VER=\"v4.4.7-dirty\"", + "ESP_PLATFORM", + "_POSIX_READER_WRITER_LOCKS", + "ARDUINO_ARCH_ESP32", + "ESP32", + "F_CPU=240000000L", + "ARDUINO=10812", + "ARDUINO_VARIANT=\"esp32\"", + "ARDUINO_BOARD=\"Espressif ESP32 Dev Module\"", + "ARDUINO_PARTITION_default", + "" + ], + "cStandard": "gnu99", + "cppStandard": "gnu++11", + "compilerPath": "/home/admar/.platformio/packages/toolchain-xtensa-esp32/bin/xtensa-esp32-elf-gcc", + "compilerArgs": [ + "-mlongcalls", + "" + ] + } + ], + "version": 4 +} diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..080e70d --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,10 @@ +{ + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": [ + "platformio.platformio-ide" + ], + "unwantedRecommendations": [ + "ms-vscode.cpptools-extension-pack" + ] +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..f510696 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,44 @@ +// AUTOMATICALLY GENERATED FILE. PLEASE DO NOT MODIFY IT MANUALLY +// +// PlatformIO Debugging Solution +// +// Documentation: https://docs.platformio.org/en/latest/plus/debugging.html +// Configuration: https://docs.platformio.org/en/latest/projectconf/sections/env/options/debug/index.html + +{ + "version": "0.2.0", + "configurations": [ + { + "type": "platformio-debug", + "request": "launch", + "name": "PIO Debug", + "executable": "/home/admar/Documents/Arduino/buienradarklok/Claire/.pio/build/esp32dev/firmware.elf", + "projectEnvName": "esp32dev", + "toolchainBinDir": "/home/admar/.platformio/packages/toolchain-xtensa-esp32/bin", + "internalConsoleOptions": "openOnSessionStart", + "preLaunchTask": { + "type": "PlatformIO", + "task": "Pre-Debug" + } + }, + { + "type": "platformio-debug", + "request": "launch", + "name": "PIO Debug (skip Pre-Debug)", + "executable": "/home/admar/Documents/Arduino/buienradarklok/Claire/.pio/build/esp32dev/firmware.elf", + "projectEnvName": "esp32dev", + "toolchainBinDir": "/home/admar/.platformio/packages/toolchain-xtensa-esp32/bin", + "internalConsoleOptions": "openOnSessionStart" + }, + { + "type": "platformio-debug", + "request": "launch", + "name": "PIO Debug (without uploading)", + "executable": "/home/admar/Documents/Arduino/buienradarklok/Claire/.pio/build/esp32dev/firmware.elf", + "projectEnvName": "esp32dev", + "toolchainBinDir": "/home/admar/.platformio/packages/toolchain-xtensa-esp32/bin", + "internalConsoleOptions": "openOnSessionStart", + "loadMode": "manual" + } + ] +} diff --git a/Claire.ino b/Claire.ino deleted file mode 100644 index d298742..0000000 --- a/Claire.ino +++ /dev/null @@ -1,1061 +0,0 @@ -//#define DISABLE_WIFI -#define HW_PROTO_PAPER 1 -#define HW_PROTO_V1 2 - -#ifndef LED_BUILTIN -#define LED_BUILTIN 2 -#endif - -#ifndef BUTTON_BUILTIN -#define BUTTON_BUILTIN 0 -#endif - -#include // https://github.com/admarschoonen/WiFiManager -#include - -#include -#include -#include - -#include -#include "bsec.h" - -#include "soc/soc.h" -#include "soc/rtc_cntl_reg.h" - -#ifndef LED_BUILTIN -#define LED_BUILTIN 2 -#endif - -#define NUM_LEDS_PROTO_PAPER 93 -#define DATA_PIN_PROTO_PAPER 5 -#define CONNECT_SW_PIN_PROTO_PAPER BUTTON_BUILTIN -#define NUM_LEDS_PROTO_V1 29 -#define DATA_PIN_PROTO_V1 14 -#define CONNECT_SW_PIN_PROTO_V1 21 - -static int BUIENRADAR_START_LED = 0; -static int BUIENRADAR_SKIP_LED = 1; -static int BUIENRADAR_NUM_LEDS = 12; -static int PAQI_START_LED = 0; -static int PAQI_SKIP_LED = 0; -static int PAQI_NUM_LEDS = 0; -static int UVI_LED = 0; -static int AQI_LED = 0; -static int POLLEN_LED = 0; -static int IAQI_LED = 0; -static int CONNECT_SW_PIN = 0; -static int LIGHT_PIN = 0; - -#define SHOW_AQI_LED -#define SHOW_POLLEN_LED -#define SHOW_UVI_LED - -#define MIN(x, y) (((x) <= (y)) ? (x) : (y)) - -Adafruit_NeoPixel leds_rgb_proto_paper(NUM_LEDS_PROTO_PAPER, DATA_PIN_PROTO_PAPER, NEO_GRB + NEO_KHZ800); -Adafruit_NeoPixel leds_rgbw_proto_v1(NUM_LEDS_PROTO_V1, DATA_PIN_PROTO_V1, NEO_RGBW + NEO_KHZ800); - -const uint8_t bsec_config_iaq[] = { - #include "config/generic_33v_3s_4d/bsec_iaq.txt" -}; - -static int ledMapPrecipitation[12] = {0}; -static int ledMapPAQI[12] = {0}; -static int ledMapUVI = 0; -static int ledMapPollen = 0; -static int ledMapIAQI = 0; -static int ledMapAQI = 0; - -#define SEALEVELPRESSURE_HPA (1013.25) -#define BME_CS 5 -String output; -Bsec iaqSensor; - -static HTTPClient http; -static const String baseUrlAQI = "https://sinoptik.luon.net/forecast?metrics=PAQI&metrics=AQI&metrics=pollen&metrics=UVI"; -static const String baseUrlPrecipitation = "https://sinoptik.luon.net/forecast?metrics=precipitation"; - -static int hw_variant = 0; - -WiFiManager wifiManager; -DESPatch dESPatch; -const char* root_ca = \ - "-----BEGIN CERTIFICATE-----\n" \ - "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\n" \ - "-----END CERTIFICATE-----\n"; - - - -const float location[] = {51.445466493287434, 5.515445691496135}; // Telefoonstraat, Eindhoven -const String address = "Telefoonstraat 18, Eindhoven"; - -//const float location[] = {51.44083, 5.47778}; // Eindhoven -//const float location[] = {52.09083, 5.12222}; // Utrecht -//const float location[] = {51.8425, 5.85278}; // Nijmegen -//const float location[] = {52.37403, 4.88969}; // Amsterdam -//const float location[] = {52.15833, 4.49306}; // Leiden - -typedef struct RainPickerDataArray24 { - const int len = 24; - long time[24]; - float value[24]; -} RainPickerDataArray24; - -typedef struct RainPickerDataArray5 { - const int len = 5; - long time[5]; - float value[5]; -} RainPickerDataArray5; - -typedef struct RainpickerData { - float lat; - float lon; - long time; - - RainPickerDataArray24 PAQI; - RainPickerDataArray24 AQI; - RainPickerDataArray24 pollen; - RainPickerDataArray5 UVI; - RainPickerDataArray24 precipitation; -} RainpickerData; - -RainpickerData rainpickerData; - -StaticJsonDocument<6144> doc; - -static bool initDone = false; - -void parseJson(String * payload) -{ - doc.clear(); - - DeserializationError error = deserializeJson(doc, * payload); - - if (error) { - Serial.print(F("deserializeJson() failed: ")); - Serial.println(error.f_str()); - return; - } - - rainpickerData.lat = doc["lat"]; - rainpickerData.lon = doc["lon"]; - rainpickerData.time = doc["time"]; - - int n = 0; - for (JsonObject elem : doc["PAQI"].as()) { - if (n >= rainpickerData.PAQI.len) { - break; - } - rainpickerData.PAQI.time[n] = elem["time"]; - rainpickerData.PAQI.value[n] = elem["value"]; - n = n + 1; - } - - n = 0; - for (JsonObject elem : doc["AQI"].as()) { - if (n >= rainpickerData.AQI.len) { - break; - } - rainpickerData.AQI.time[n] = elem["time"]; - rainpickerData.AQI.value[n] = elem["value"]; - n = n + 1; - } - - n = 0; - for (JsonObject elem : doc["pollen"].as()) { - if (n >= rainpickerData.pollen.len) { - break; - } - rainpickerData.pollen.time[n] = elem["time"]; - rainpickerData.pollen.value[n] = elem["value"]; - n = n + 1; - } - - n = 0; - for (JsonObject elem : doc["UVI"].as()) { - if (n >= rainpickerData.UVI.len) { - break; - } - rainpickerData.UVI.time[n] = elem["time"]; - rainpickerData.UVI.value[n] = elem["value"]; - n = n + 1; - } - - n = 0; - for (JsonObject elem : doc["precipitation"].as()) { - if (n >= rainpickerData.precipitation.len) { - break; - } - rainpickerData.precipitation.time[n] = elem["time"]; - rainpickerData.precipitation.value[n] = elem["value"]; - n = n + 1; - } -} - -static void setup_pins_proto_paper(void) -{ - int n = 0; - - BUIENRADAR_START_LED = 32; - BUIENRADAR_SKIP_LED = 1; - BUIENRADAR_NUM_LEDS = 12; - - PAQI_START_LED = 72; - PAQI_SKIP_LED = 0; - PAQI_NUM_LEDS = 12; - - // #define UVI_LED 92 // LED in center - UVI_LED = 84; // LED above center - AQI_LED = 86; // LED to the right - POLLEN_LED = 90; // LED to the left - IAQI_LED = 88; // LED below center - - CONNECT_SW_PIN = CONNECT_SW_PIN_PROTO_PAPER; - - n = 0; - while (n < BUIENRADAR_NUM_LEDS) { - ledMapPrecipitation[n] = BUIENRADAR_START_LED + n * (BUIENRADAR_SKIP_LED + 1); - n = n + 1; - } - - n = 0; - while (n < PAQI_NUM_LEDS) { - ledMapPAQI[n] = PAQI_START_LED + n * (PAQI_SKIP_LED + 1); - n = n + 1; - } - - ledMapAQI = AQI_LED; - ledMapUVI = UVI_LED; - ledMapPollen = POLLEN_LED; - ledMapIAQI = IAQI_LED; -} - -static void setup_pins_proto_v1(void) -{ - int n = 0; - - BUIENRADAR_START_LED = 0; - BUIENRADAR_SKIP_LED = 0; - BUIENRADAR_NUM_LEDS = 12; - - PAQI_START_LED = 12; - PAQI_SKIP_LED = 0; - PAQI_NUM_LEDS = 12; - - UVI_LED = 27; // LED above center - AQI_LED = 24; // LED to the right - POLLEN_LED = 26; // LED to the left - IAQI_LED = 25; // LED below center - - CONNECT_SW_PIN = CONNECT_SW_PIN_PROTO_V1; - - ledMapPrecipitation[0] = 11; - n = 1; - while (n < BUIENRADAR_NUM_LEDS) { - ledMapPrecipitation[n] = BUIENRADAR_START_LED + (n - 1) * (BUIENRADAR_SKIP_LED + 1); - n = n + 1; - } - - ledMapPAQI[0] = 23; - n = 1; - while (n < PAQI_NUM_LEDS) { - ledMapPAQI[n] = PAQI_START_LED + (n - 1) * (PAQI_SKIP_LED + 1); - n = n + 1; - } - - ledMapAQI = AQI_LED; - ledMapUVI = UVI_LED; - ledMapPollen = POLLEN_LED; - ledMapIAQI = IAQI_LED; - - LIGHT_PIN = 34; - analogSetPinAttenuation(LIGHT_PIN, ADC_0db); - analogReadResolution(12); -} - -void leds_clear(void) { - if (hw_variant == HW_PROTO_PAPER) { - leds_rgb_proto_paper.clear(); - leds_rgb_proto_paper.show(); - } else if (hw_variant == HW_PROTO_V1) { - leds_rgbw_proto_v1.clear(); - leds_rgbw_proto_v1.show(); - } -} - -int checkIaqSensorStatus(void) -{ - if (iaqSensor.bsecStatus != BSEC_OK) { - if (iaqSensor.bsecStatus < BSEC_OK) { - output = "BSEC error code : " + String(iaqSensor.bsecStatus); - Serial.println(output); - //for (;;); - } else { - output = "BSEC warning code : " + String(iaqSensor.bsecStatus); - Serial.println(output); - } - } - - if (iaqSensor.bme68xStatus != BME68X_OK) { - if (iaqSensor.bme68xStatus < BME68X_OK) { - output = "BME680 error code : " + String(iaqSensor.bme68xStatus); - Serial.println(output); - //for (;;); - } else { - output = "BME680 warning code : " + String(iaqSensor.bme68xStatus); - Serial.println(output); - } - } - - return iaqSensor.bme68xStatus; -} - -void readSensors(void) { - static bool readingInProgress = false; - static unsigned long endTime = 0; - - if (hw_variant == HW_PROTO_PAPER) { - return; - } - - unsigned long time_trigger = millis(); - if (iaqSensor.run()) { // If new data is available - output = String(time_trigger); - output += " Sensor data: Traw: " + String(iaqSensor.rawTemperature); - output += " *C , P: " + String(iaqSensor.pressure); - output += " hPa, RHraw: " + String(iaqSensor.rawHumidity); - output += " %, Rgas: " + String(iaqSensor.gasResistance); - output += " Ohm, IAQ: " + String(iaqSensor.iaq); - output += ", accuracy: " + String(iaqSensor.iaqAccuracy); - output += ", Tcorr: " + String(iaqSensor.temperature); - output += " *C, RHcorr: " + String(iaqSensor.humidity); - output += " %, IAQstatic: " + String(iaqSensor.staticIaq); - output += ", eCO2: " + String(iaqSensor.co2Equivalent); - output += " ppm, eVOC: " + String(iaqSensor.breathVocEquivalent); - output += " ppm"; - - int light = 0; - for (int n = 0; n < 256; n++) { - light += analogRead(LIGHT_PIN); - } - light = (light + 128) >> 8; - output += ", light: " + String(light); - Serial.println(output); - } else { - checkIaqSensorStatus(); - } -} - -void taskBME680( void * parameter ) -{ - while (initDone == false) { - delay(100); - } - - while (true) { - readSensors(); - delay(100); - } - - //Serial.println("Ending task 1"); - //vTaskDelete( NULL ); -} - -void setup() { - const char url[] = "https://apikey:cqprlgiafadnidsgeqozcpldkaeqimqw@despatch.luon.net/files/4/despatch.json"; - unsigned long interval = 60; // By default check for updates every 60 seconds - int x; - - WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); // Disable brownout; needed for some dev kits - - // sanity check delay - allows reprogramming if accidently blowing power w/leds - delay(2000); - - Serial.begin(115200); - Serial.println("buienradarklok starting"); - - http.setReuse(false); - - SPI.begin(); - iaqSensor.begin(BME_CS, SPI); - String output = "\nBSEC library version " + String(iaqSensor.version.major) + "." + String(iaqSensor.version.minor) + "." + String(iaqSensor.version.major_bugfix) + "." + String(iaqSensor.version.minor_bugfix); - Serial.println(output); - x = checkIaqSensorStatus(); - - if (x != BME68X_OK) { - Serial.println(F("Could not find a valid BME680 sensor; assuming hw variant \"paper prototype\"!")); - hw_variant = HW_PROTO_PAPER; - setup_pins_proto_paper(); - leds_rgb_proto_paper.begin(); // INITIALIZE NeoPixel strip object - } else { - Serial.println(F("BME680 found; assuming hw variant \"proto v1\"")); - - iaqSensor.setConfig(bsec_config_iaq); - iaqSensor.setTemperatureOffset(13.5f); - checkIaqSensorStatus(); - - hw_variant = HW_PROTO_V1; - setup_pins_proto_v1(); - leds_rgbw_proto_v1.begin(); // INITIALIZE NeoPixel strip object - } - - bsec_virtual_sensor_t sensorList[10] = { - BSEC_OUTPUT_RAW_TEMPERATURE, - BSEC_OUTPUT_RAW_PRESSURE, - BSEC_OUTPUT_RAW_HUMIDITY, - BSEC_OUTPUT_RAW_GAS, - BSEC_OUTPUT_IAQ, - BSEC_OUTPUT_STATIC_IAQ, - BSEC_OUTPUT_CO2_EQUIVALENT, - BSEC_OUTPUT_BREATH_VOC_EQUIVALENT, - BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE, - BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY, - }; - - iaqSensor.updateSubscription(sensorList, 10, BSEC_SAMPLE_RATE_LP); - checkIaqSensorStatus(); - - // Print the header - output = "Timestamp [ms], raw temperature [°C], pressure [hPa], raw relative humidity [%], gas [Ohm], IAQ, IAQ accuracy, temperature [°C], relative humidity [%], Static IAQ, CO2 equivalent, breath VOC equivalent"; - Serial.println(output); - - leds_clear(); - -#ifndef DISABLE_WIFI - //wifiManager.resetSettings(); - wifiManager.configure("Claire-", true, LED_BUILTIN, true, CONNECT_SW_PIN, false); - - //fetches ssid and pass and tries to connect - //if it does not connect it starts an access point - //and goes into a blocking loop awaiting configuration - if (!wifiManager.autoConnect()) { - Serial.println("failed to connect and hit timeout"); - //reset and try again, or maybe put it to deep sleep - ESP.restart(); - delay(1000); - } - - //if you get here you have connected to the WiFi - Serial.print("connected with address: "); - Serial.println(WiFi.localIP()); - - if (hw_variant == HW_PROTO_PAPER) { - //keep LED on - digitalWrite(LED_BUILTIN, LED_ON_VALUE_DEFAULT); - } - - x = dESPatch.configure(url, true, false, interval, false, root_ca); - Serial.print("dESPatch.configure() returned with code "); - Serial.println(x); -#endif - initDone = true; - - xTaskCreate(taskBME680, "taskBME680", 10000, NULL, 1, NULL); -} - -// From https://circuits4you.com/2019/03/21/esp8266-url-encode-decode-example/ -String urlencode(String str) -{ - String encodedString=""; - char c; - char code0; - char code1; - char code2; - for (int i =0; i < str.length(); i++){ - c=str.charAt(i); - if (c == ' '){ - encodedString+= '+'; - } else if (isalnum(c)){ - encodedString+=c; - } else{ - code1=(c & 0xf)+'0'; - if ((c & 0xf) >9){ - code1=(c & 0xf) - 10 + 'A'; - } - c=(c>>4)&0xf; - code0=c+'0'; - if (c > 9){ - code0=c - 10 + 'A'; - } - code2='\0'; - encodedString+='%'; - encodedString+=code0; - encodedString+=code1; - //encodedString+=code2; - } - yield(); - } - - return encodedString; -} - -void getPrecipitation(const float * location) { - int httpCode; - //String url = baseUrl + "&lat=" + String(location[0]) + "&lon=" + String(location[1]); - String url, latS, lonS; - int tmp1, tmp2; - String payload = ""; - - tmp1 = int(location[0]); - tmp2 = int((location[0] - tmp1) * 1000000); - latS = String(tmp1) + "." + String(tmp2); - tmp1 = int(location[1]); - tmp2 = int((location[1] - tmp1) * 1000000); - lonS = String(tmp1) + "." + String(tmp2); - - url = baseUrlPrecipitation + "&lat=" + latS + "&lon=" + lonS; - - Serial.print(millis()); - Serial.print(" Retrieving precipitation from "); - Serial.println(url); - - http.begin(url, root_ca); - httpCode = http.GET(); - - if (httpCode > 0) { - payload = http.getString(); - parseJson(&payload); - } else { - Serial.print(millis()); - Serial.print(" Got http code "); - Serial.println(httpCode); - } - http.end(); -} - -void getPrecipitation(const String address) { - int httpCode; - //String url = baseUrl + "&lat=" + String(location[0]) + "&lon=" + String(location[1]); - String url, a; - String payload = ""; - - a = urlencode(address); - - url = baseUrlPrecipitation + "&address=" + a; - - Serial.print(millis()); - Serial.print(" Retrieving precipitation from "); - Serial.println(url); - - http.begin(url, root_ca); - httpCode = http.GET(); - - if (httpCode > 0) { - payload = http.getString(); - parseJson(&payload); - } else { - Serial.print(millis()); - Serial.print(" Got http code "); - Serial.println(httpCode); - } - http.end(); -} - -void getAQI(const float * location) { - int httpCode; - //String url = baseUrl + "&lat=" + String(location[0]) + "&lon=" + String(location[1]); - String url, latS, lonS; - int tmp1, tmp2; - String payload = ""; - - tmp1 = int(location[0]); - tmp2 = int((location[0] - tmp1) * 1000000); - latS = String(tmp1) + "." + String(tmp2); - tmp1 = int(location[1]); - tmp2 = int((location[1] - tmp1) * 1000000); - lonS = String(tmp1) + "." + String(tmp2); - - url = baseUrlAQI + "&lat=" + latS + "&lon=" + lonS; - - Serial.print(millis()); - Serial.print(" Retrieving AQI from "); - Serial.println(url); - - http.begin(url, root_ca); - httpCode = http.GET(); - - if (httpCode > 0) { - payload = http.getString(); - parseJson(&payload); - } else { - Serial.print(millis()); - Serial.print(" Got http code "); - Serial.println(httpCode); - } - http.end(); -} - -void getAQI(const String address) { - int httpCode; - //String url = baseUrl + "&lat=" + String(location[0]) + "&lon=" + String(location[1]); - String url, a; - String payload = ""; - - a = urlencode(address); - - url = baseUrlAQI + "&address=" + a; - - Serial.print(millis()); - Serial.print(" Retrieving AQI from "); - Serial.println(url); - - http.begin(url, root_ca); - httpCode = http.GET(); - - if (httpCode > 0) { - payload = http.getString(); - parseJson(&payload); - } else { - Serial.print(millis()); - Serial.print(" Got http code "); - Serial.println(httpCode); - } - http.end(); -} - -static int colormap(float x) { - // Input: intensity - // Output: RGB encoded pixel color similar to luchtmeetnet legend - int y = 0; - - if (x < 1.0) { - y = (0 << 16) | (0 << 8) | 0; // black (good) - } else if (x < 2.0) { - // 1.0 <= x < 2.0 - if (hw_variant == HW_PROTO_PAPER) { - y = (0 << 16) | (0 << 8) | 160; // blue (good) - } else if (hw_variant == HW_PROTO_V1) { - y = (0 << 16) | (0 << 8) | 255; // blue (good) - } - } else if (x < 3.0) { - // 2.0 <= x < 3.0 - y = (0 << 16) | (255 << 8) | 255; // cyan (good) - } else if (x < 4.0) { - // 3.0 <= x < 4.0 - y = (255 << 16) | (255 << 8) | 255; // white (mediocre) - } else if (x < 5.0) { - // 4.0 <= x < 5.0 - y = (200 << 16) | (200 << 8) | 32; // light yellow (mediocre) - } else if (x < 6.0) { - // 5.0 <= x < 6.0 - y = (120 << 16) | (120 << 8) | 0; // yellow (mediocre) - } else if (x < 7.0) { - // 6.0 <= x < 7.0 - y = (200 << 16) | (80 << 8) | 0; // orange (inadequate) - } else if (x < 8.0) { - // 7.0 <= x < 8.0 - y = (255 << 16) | (50 << 8) | 0; // red orange (inadequate) - } else if (x < 9.0) { - // 8.0 <= x < 9.0 - y = (180 << 16) | (0 << 8) | 0; // red (bad) - } else if (x < 10.0) { - // 9.0 <= x < 10.0 - y = (200 << 16) | (0 << 8) | 160; // magenta (bad) - } else { - // 10.0 <= x - y = (60 << 16) | (0 << 8) | 210; // purple (terrible) - } - - return y; -} - -float colormapIaqi(void) -{ - float x = 0.0f; - float iaqi = iaqSensor.staticIaq; - - if (iaqi <= 50.0f) { - x = 1.0f; // Excellent - } else if (iaqi <= 100.0f) { - x = 2.0f; // Good - } else if (iaqi <= 125.0f) { - x = 4.0f; - } else if (iaqi <= 150.0f) { - x = 4.0f; // Lightly polluted - } else if (iaqi <= 175.0f) { - x = 5.0f; - } else if (iaqi <= 200.0f) { - x = 6.0f; // Moderately polluted - } else if (iaqi <= 225.0f) { - x = 7.0f; - } else if (iaqi <= 250.0f) { - x = 8.0f; // Heavily polluted - } else if (iaqi <= 300.0f) { - x = 9.0f; - } else if (iaqi <= 350.0f) { - x = 10.0f; // Severely polluted - } else { - x = 11.0f; // Extremely polluted - } - - return colormap(x); -} - -static float buienradarMap(float x) { - // Input: rain intensity (mm/h) - // Output: floating point number which can be mapped on color scale - float y = 0; - - // Use E3 series of preferred numbers to map intensity to color - if (x < 0.1) { - y = 0.5; - } else if (x < 0.22) { - y = 1.5; - } else if (x < 0.47) { - y = 2.5; - } else if (x < 1.0) { - y = 3.5; - } else if (x < 2.2) { - y = 4.5; - } else if (x < 4.7) { - y = 5.5; - } else if (x < 10) { - y = 6.5; - } else if (x < 22) { - y = 7.5; - } else if (x < 47) { - y = 8.5; - } else if (x < 100) { - y = 9.5; - } else { - y = 10.5; - } - - return y; -} - -static void ledsSetPixelColor(uint32_t ledIdx, int r, int g, int b, int w) { - if (hw_variant == HW_PROTO_PAPER) { - leds_rgb_proto_paper.setPixelColor(ledIdx, leds_rgb_proto_paper.Color(r, g, b)); - } else if (hw_variant == HW_PROTO_V1) { - leds_rgbw_proto_v1.setPixelColor(ledIdx, leds_rgbw_proto_v1.Color(g, r, b, w)); - } -} - -static void ledsSetPixelColor(uint32_t ledIdx, int r, int g, int b) { - ledsSetPixelColor(ledIdx, r, g, b, 0); -} - -static void updateLedsNoWifi(void) { - uint32_t ledIdx; - uint32_t ledCount; - uint32_t color; - int r, g, b, w, n; - - if (hw_variant == HW_PROTO_PAPER) { - // Start by setting all leds to value of the first datapoint - ledIdx = 11; - ledCount = 0; - for (ledCount = 0; ledCount < 11; ledCount++) { - color = colormap(ledCount); - - r = (color & 0xFF0000) >> 16; - g = (color & 0x00FF00) >> 8; - b = (color & 0x0000FF); - - ledsSetPixelColor(ledIdx, r, g, b); - ledIdx = ledIdx + PAQI_SKIP_LED + 1; - } - } else if (hw_variant == HW_PROTO_V1) { - // Start by setting all leds to value of the first datapoint - ledIdx = 0; - ledCount = 0; - for (ledCount = 0; ledCount < 11; ledCount++) { - color = colormap(ledCount); - - r = (color & 0xFF0000) >> 16; - g = (color & 0x00FF00) >> 8; - b = (color & 0x0000FF); - w = (color & 0xFF000000) >> 24; - - ledsSetPixelColor(ledIdx, r, g, b, w); - ledIdx = ledIdx + PAQI_SKIP_LED + 1; - } - } -} - -static void updateLeds(void) { - uint32_t ledIdx; - uint32_t ledCount; - uint32_t color; - int r, g, b, w, n; - - // Start by setting all leds to value of the first datapoint - ledIdx = PAQI_START_LED; - ledCount = 0; - for (ledCount = 0; ledCount < PAQI_NUM_LEDS; ledCount++) { - color = colormap(rainpickerData.PAQI.value[0]); - - r = (color & 0xFF0000) >> 16; - g = (color & 0x00FF00) >> 8; - b = (color & 0x0000FF); - w = (color & 0xFF000000) >> 24; - - ledsSetPixelColor(ledMapPAQI[ledCount], r, g, b); - ledIdx = ledIdx + PAQI_SKIP_LED + 1; - } - - ledIdx = PAQI_START_LED; - ledCount = 0; - for (n = 0; n < rainpickerData.PAQI.len; n++) { - if (rainpickerData.time < rainpickerData.PAQI.time[n]) { - ledIdx = ledIdx + PAQI_SKIP_LED + 1; - ledCount = ledCount + 1; - } - if (ledCount >= PAQI_NUM_LEDS) { - break; - } - - color = colormap(rainpickerData.PAQI.value[n]); - - r = (color & 0xFF0000) >> 16; - g = (color & 0x00FF00) >> 8; - b = (color & 0x0000FF); - w = (color & 0xFF000000) >> 24; - - ledsSetPixelColor(ledMapPAQI[ledCount], r, g, b); - } - - #ifdef SHOW_AQI_LED - // calculate AQI max value for next 12 hours - uint32_t AQI_max_value = 0; - //Serial.println("AQI:"); - for (n = 0; n < rainpickerData.AQI.len; n++) { - /*Serial.print(" "); - Serial.print(rainpickerData.AQI.time[n]); - Serial.print(": "); - Serial.println(rainpickerData.AQI.value[n]);*/ - if (rainpickerData.time - rainpickerData.AQI.time[n] >= 60 * 60) { - continue; - } - if (rainpickerData.AQI.time[n] >= rainpickerData.time + PAQI_NUM_LEDS * 60 * 60) { - break; - } - if (rainpickerData.AQI.value[n] > AQI_max_value) { - AQI_max_value = rainpickerData.AQI.value[n]; - } - } - //Serial.print("AQI max value: "); - //Serial.println(AQI_max_value); - color = colormap(AQI_max_value); - - r = (color & 0xFF0000) >> 16; - g = (color & 0x00FF00) >> 8; - b = (color & 0x0000FF); - - ledsSetPixelColor(AQI_LED, r, g, b); - #endif - - #ifdef SHOW_POLLEN_LED - // calculate pollen max value for next 12 hours - uint32_t pollen_max_value = rainpickerData.pollen.value[0]; - for (n = 0; n < rainpickerData.pollen.len; n++) { - if (rainpickerData.time - rainpickerData.pollen.time[n] >= 60 * 60) { - continue; - } - if (rainpickerData.pollen.time[n] >= rainpickerData.time + PAQI_NUM_LEDS * 60 * 60) { - break; - } - if (rainpickerData.pollen.value[n] > pollen_max_value) { - pollen_max_value = rainpickerData.pollen.value[n]; - } - } - - color = colormap(pollen_max_value); - - r = (color & 0xFF0000) >> 16; - g = (color & 0x00FF00) >> 8; - b = (color & 0x0000FF); - - ledsSetPixelColor(POLLEN_LED, r, g, b); - #endif - - #ifdef SHOW_UVI_LED - // calculate UVI led value - // UVI data is daily based --> search for first timestamp in the future and select value of the timestamp just before that - uint32_t UVI_value = rainpickerData.UVI.value[0]; - - for (n = 0; n < rainpickerData.UVI.len; n++) { - if (rainpickerData.UVI.time[n] >= rainpickerData.time) { - break; - } - UVI_value = rainpickerData.UVI.value[n]; - } - color = colormap(UVI_value); - - r = (color & 0xFF0000) >> 16; - g = (color & 0x00FF00) >> 8; - b = (color & 0x0000FF); - - ledsSetPixelColor(UVI_LED, r, g, b); - #endif - - // Start by setting all leds to value of the first datapoint - ledIdx = BUIENRADAR_START_LED; - for (ledCount = 0; ledCount < BUIENRADAR_NUM_LEDS; ledCount++) { - color = colormap(rainpickerData.precipitation.value[0]); - - r = (color & 0xFF0000) >> 16; - g = (color & 0x00FF00) >> 8; - b = (color & 0x0000FF); - - ledsSetPixelColor(ledMapPrecipitation[ledCount], r, g, b); - ledIdx = ledIdx + BUIENRADAR_SKIP_LED + 1; - } - - ledIdx = BUIENRADAR_START_LED; - ledCount = 0; - for (n = 0; n < rainpickerData.precipitation.len; n++) { - if (rainpickerData.time < rainpickerData.precipitation.time[n]) { - ledIdx = ledIdx + BUIENRADAR_SKIP_LED + 1; - ledCount = ledCount + 1; - } - if (ledCount >= BUIENRADAR_NUM_LEDS) { - break; - } - - color = colormap(buienradarMap(rainpickerData.precipitation.value[n])); - - r = (color & 0xFF0000) >> 16; - g = (color & 0x00FF00) >> 8; - b = (color & 0x0000FF); - ledsSetPixelColor(ledMapPrecipitation[ledCount], r, g, b); - } - - ledsSetPixelColor(IAQI_LED, r, g, b); - - if (hw_variant == HW_PROTO_V1) { - color = colormapIaqi(); - - r = (color & 0xFF0000) >> 16; - g = (color & 0x00FF00) >> 8; - b = (color & 0x0000FF); - - ledsSetPixelColor(IAQI_LED, r, g, b); - } -} - -void readConnectButton(void) { - static int reset_wifi_timer = millis(); - static bool reset_blocked = true; - - if (digitalRead(CONNECT_SW_PIN) == HIGH) { - // button released - reset_wifi_timer = millis(); - reset_blocked = false; - digitalWrite(LED_BUILTIN, LOW); - } else { - // button pressed - if (reset_blocked == false) { - int delta = millis() - reset_wifi_timer; - if (delta < 10000) { - if (delta % 1000 < 500) { - digitalWrite(LED_BUILTIN, HIGH); - } else { - digitalWrite(LED_BUILTIN, LOW); - } - } else { - leds_clear(); - - wifiManager.resetSettings(); - - // block reset so user must release button before we can reset again - reset_blocked = true; - digitalWrite(LED_BUILTIN, LOW); - ESP.restart(); - } - } - } -} - -void loop(void) { - static unsigned long t_prev = 0; - static bool ledOn = false; - unsigned long t_now = millis(); - const int buttonPin = 0; - static int rainColor[12] = {0}; - static int AQIColor[12] = {0}; - static bool firstTime = true; - static int counter = 0; - - if (firstTime || (t_now - t_prev >= 60000)) { - t_prev = t_now; - firstTime = false; - -#ifndef DISABLE_WIFI - if (WiFi.status() != WL_CONNECTED) { - Serial.print(millis()); - Serial.print(" wifi status error: "); - Serial.print(WiFi.status()); - Serial.print("; expected: "); - Serial.println(WL_CONNECTED); - bool result = WiFi.reconnect(); - Serial.print(millis()); - Serial.print(" reconnecting result: "); - Serial.print(result); - Serial.print("; expected: "); - Serial.println(ESP_OK); - } - getPrecipitation(address); - - if (counter == 0) { - getAQI(address); - } - - counter = counter + 1; - - if (counter == 5) { - // AQI should only be retreived every 5 minutes - counter = 0; - } -#endif - } - -#ifdef DISABLE_WIFI - updateLedsNoWifi(); -#else - updateLeds(); -#endif - - if (hw_variant == HW_PROTO_PAPER) { - leds_rgb_proto_paper.show(); - } else if (hw_variant == HW_PROTO_V1) { - leds_rgbw_proto_v1.show(); - } - - readConnectButton(); - - delay(100); -#ifndef DISABLE_WIFI - dESPatch.checkForUpdate(true); -#endif -} diff --git a/include/README b/include/README new file mode 100644 index 0000000..194dcd4 --- /dev/null +++ b/include/README @@ -0,0 +1,39 @@ + +This directory is intended for project header files. + +A header file is a file containing C declarations and macro definitions +to be shared between several project source files. You request the use of a +header file in your project source file (C, C++, etc) located in `src` folder +by including it, with the C preprocessing directive `#include'. + +```src/main.c + +#include "header.h" + +int main (void) +{ + ... +} +``` + +Including a header file produces the same results as copying the header file +into each source file that needs it. Such copying would be time-consuming +and error-prone. With a header file, the related declarations appear +in only one place. If they need to be changed, they can be changed in one +place, and programs that include the header file will automatically use the +new version when next recompiled. The header file eliminates the labor of +finding and changing all the copies as well as the risk that a failure to +find one copy will result in inconsistencies within a program. + +In C, the usual convention is to give header files names that end with `.h'. +It is most portable to use only letters, digits, dashes, and underscores in +header file names, and at most one dot. + +Read more about using header files in official GCC documentation: + +* Include Syntax +* Include Operation +* Once-Only Headers +* Computed Includes + +https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html diff --git a/include/WifiHandler.hpp b/include/WifiHandler.hpp new file mode 100644 index 0000000..9f3fe93 --- /dev/null +++ b/include/WifiHandler.hpp @@ -0,0 +1,14 @@ +#ifndef __WIFIHANDLER_HPP__ +#define __WIFIHANDLER_HPP__ + +#include // https://github.com/admarschoonen/WiFiManager + +#define TICKER_RATE_CONNECTING 0.6 +#define TICKER_RATE_CONFIG 0.2 +#define TICKER_RATE_ERASE 0.05 + +void wifiManagerCb(WiFiManager::Status status); + +void connect(); + +#endif // __WIFIHANDLER_HPP__ \ No newline at end of file diff --git a/include/root_ca.h b/include/root_ca.h new file mode 100644 index 0000000..96c6030 --- /dev/null +++ b/include/root_ca.h @@ -0,0 +1,37 @@ +#ifndef __ROOT_CA_H__ +#define __ROOT_CA_H__ + +const char* root_ca = + "-----BEGIN CERTIFICATE-----\n" + "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\n" + "-----END CERTIFICATE-----\n"; + +#endif // __ROOT_CA_H__ \ No newline at end of file diff --git a/lib/README b/lib/README new file mode 100644 index 0000000..2593a33 --- /dev/null +++ b/lib/README @@ -0,0 +1,46 @@ + +This directory is intended for project specific (private) libraries. +PlatformIO will compile them to static libraries and link into executable file. + +The source code of each library should be placed in an own separate directory +("lib/your_library_name/[here are source files]"). + +For example, see a structure of the following two libraries `Foo` and `Bar`: + +|--lib +| | +| |--Bar +| | |--docs +| | |--examples +| | |--src +| | |- Bar.c +| | |- Bar.h +| | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html +| | +| |--Foo +| | |- Foo.c +| | |- Foo.h +| | +| |- README --> THIS FILE +| +|- platformio.ini +|--src + |- main.c + +and a contents of `src/main.c`: +``` +#include +#include + +int main (void) +{ + ... +} + +``` + +PlatformIO Library Dependency Finder will find automatically dependent +libraries scanning project source files. + +More information about PlatformIO Library Dependency Finder +- https://docs.platformio.org/page/librarymanager/ldf.html diff --git a/platformio.ini b/platformio.ini new file mode 100644 index 0000000..4a9bc9f --- /dev/null +++ b/platformio.ini @@ -0,0 +1,18 @@ +; PlatformIO Project Configuration File +; +; Build options: build flags, source filter +; Upload options: custom upload port, speed and extra flags +; Library options: dependencies, extra library storages +; Advanced options: extra scripting +; +; Please visit documentation for the other options and examples +; https://docs.platformio.org/page/projectconf.html + +[env:esp32dev] +platform = espressif32 +board = esp32dev +framework = arduino +lib_deps = + https://github.com/admarschoonen/WIFIMANAGER-ESP32.git#v0.99.11 + https://github.com/admarschoonen/dESPatch.git#v0.9.4 + bblanchon/ArduinoJson @ ^7.1.0 diff --git a/src/WifiHandler.cpp b/src/WifiHandler.cpp new file mode 100644 index 0000000..71957a8 --- /dev/null +++ b/src/WifiHandler.cpp @@ -0,0 +1,68 @@ +#include +#include // https://github.com/admarschoonen/WiFiManager + +#include "../include/WifiHandler.hpp" + +WiFiManager wifiManager; +Ticker ticker; + +static void tick(void) { + int state = 0; + + if (LED_BUILTIN >= 0) { + state = digitalRead(LED_BUILTIN); + digitalWrite(LED_BUILTIN, !state); + } +} + +void wifiManagerCb(WiFiManager::Status status) { + ticker.detach(); + + if (status.mode == WiFiManager::Mode::CONNECTING) { + ticker.attach(TICKER_RATE_CONNECTING, tick); + Serial.println("CONNECTING"); + } else if (status.mode == WiFiManager::Mode::SCANNING) { + ticker.attach(TICKER_RATE_CONNECTING, tick); + Serial.println("SCANNING"); + } else if (status.mode == WiFiManager::Mode::PORTAL) { + ticker.attach(TICKER_RATE_CONFIG, tick); + Serial.println("PORTAL"); + } else if (status.mode == WiFiManager::Mode::ERASING) { + ticker.attach(TICKER_RATE_ERASE, tick); + Serial.println("ERASING"); + } else if (status.mode == WiFiManager::Mode::CONNECTED) { + ticker.detach(); + digitalWrite(LED_BUILTIN, HIGH); + Serial.println("CONNECTED"); + } else if (status.mode == WiFiManager::Mode::DISCONNECTED) { + ticker.detach(); + digitalWrite(LED_BUILTIN, LOW); + Serial.println("DISCONNECTED"); + } +} + +void connect() { + Serial.begin(115200); + + wifiManager.resetSettings(); + // wifiManager.configure("esp32-", true, LED_BUILTIN, true, BUTTON_BUILTIN, + // false); + wifiManager.configure("esp32-", true, wifiManagerCb, BUTTON_BUILTIN, false); + + // fetches ssid and pass and tries to connect + // if it does not connect it starts an access point + // and goes into a blocking loop awaiting configuration + if (!wifiManager.autoConnect()) { + Serial.println("failed to connect and hit timeout"); + // reset and try again, or maybe put it to deep sleep + ESP.restart(); + delay(1000); + } + + // if you get here you have connected to the WiFi + Serial.print("connected with address: "); + Serial.println(WiFi.localIP()); + + // keep LED on + digitalWrite(LED_BUILTIN, LED_ON_VALUE_DEFAULT); +} diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..01d66f0 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,28 @@ +#include + +#include "../include/WifiHandler.hpp" +#include "../include/root_ca.h" + +DESPatch dESPatch; + +void setup() { + Serial.begin(115200); + connect(); + + const char url[] = + "https://apikey:cqprlgiafadnidsgeqozcpldkaeqimqw@despatch.luon.net/" + "files/4/despatch.json"; + unsigned long interval = 60; // By default check for updates every 60 seconds + + int x = dESPatch.configure(url, true, false, interval, false, root_ca); + + Serial.print("dESPatch.configure() returned with code "); + Serial.println(x); + Serial.println(":-)"); +} + +void loop(void) { + Serial.println("hello :-)"); + dESPatch.checkForUpdate(true); + delay(500); +} diff --git a/test/README b/test/README new file mode 100644 index 0000000..9b1e87b --- /dev/null +++ b/test/README @@ -0,0 +1,11 @@ + +This directory is intended for PlatformIO Test Runner and project tests. + +Unit Testing is a software testing method by which individual units of +source code, sets of one or more MCU program modules together with associated +control data, usage procedures, and operating procedures, are tested to +determine whether they are fit for use. Unit testing finds problems early +in the development cycle. + +More information about PlatformIO Unit Testing: +- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html