Initial commit

master
Dustin 2022-05-08 20:34:58 -05:00
commit 87c4833a10
11 changed files with 940 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
/build/
/output/
config.h

7
.vscode/arduino.json vendored Normal file
View File

@ -0,0 +1,7 @@
{
"port": "/dev/ttyUSB0",
"configuration": "FlashFreq=80,UploadSpeed=921600,DebugLevel=none,PartitionScheme=default",
"board": "esp32:esp32:featheresp32",
"sketch": "gardensensor.ino",
"output": "./output"
}

573
.vscode/c_cpp_properties.json vendored Normal file
View File

@ -0,0 +1,573 @@
{
"version": 4,
"configurations": [
{
"name": "Arduino",
"compilerPath": "/home/dustin/.arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/gcc8_4_0-esp-2021r2-patch3/bin/xtensa-esp32-elf-g++",
"compilerArgs": [
"-mlongcalls",
"-Wno-frame-address",
"-ffunction-sections",
"-fdata-sections",
"-Wno-error=unused-function",
"-Wno-error=unused-variable",
"-Wno-error=deprecated-declarations",
"-Wno-unused-parameter",
"-Wno-sign-compare",
"-freorder-blocks",
"-Wwrite-strings",
"-fstack-protector",
"-fstrict-volatile-bitfields",
"-Wno-error=unused-but-set-variable",
"-fno-jump-tables",
"-fno-tree-switch-conversion",
"-std=gnu++11",
"-fexceptions",
"-fno-rtti"
],
"intelliSenseMode": "gcc-x64",
"includePath": [
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/newlib/platform_include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/freertos/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/freertos/include/esp_additions/freertos",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/freertos/port/xtensa/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/freertos/include/esp_additions",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_hw_support/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_hw_support/include/soc",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_hw_support/include/soc/esp32",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_hw_support/port/esp32",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_hw_support/port/esp32/private_include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/heap/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/log/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/lwip/include/apps",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/lwip/include/apps/sntp",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/lwip/lwip/src/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/lwip/port/esp32/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/lwip/port/esp32/include/arch",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/soc/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/soc/esp32",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/soc/esp32/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/hal/esp32/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/hal/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/hal/platform_port/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_rom/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_rom/include/esp32",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_rom/esp32",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_common/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_system/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_system/port/soc",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_system/port/public_compat",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp32/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/xtensa/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/xtensa/esp32/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/driver/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/driver/esp32/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_pm/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_ringbuf/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/efuse/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/efuse/esp32/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/vfs/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_wifi/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_event/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_netif/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_eth/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/tcpip_adapter/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_phy/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_phy/esp32/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_ipc/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/app_trace/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_timer/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/mbedtls/port/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/mbedtls/mbedtls/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/mbedtls/esp_crt_bundle/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/app_update/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/spi_flash/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/bootloader_support/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/nvs_flash/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/pthread/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_gdbstub/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_gdbstub/xtensa",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_gdbstub/esp32",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/espcoredump/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/espcoredump/include/port/xtensa",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/wpa_supplicant/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/wpa_supplicant/port/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/wpa_supplicant/esp_supplicant/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/ieee802154/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/console",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/asio/asio/asio/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/asio/port/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/bt/common/osi/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/bt/include/esp32/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/bt/common/api/include/api",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/bt/common/btc/profile/esp/blufi/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/bt/common/btc/profile/esp/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/bt/host/bluedroid/api/include/api",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/cbor/port/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/unity/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/unity/unity/src",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/cmock/CMock/src",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/coap/port/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/coap/libcoap/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/nghttp/port/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/nghttp/nghttp2/lib/includes",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-tls",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-tls/esp-tls-crypto",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_adc_cal/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_hid/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/tcp_transport/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_http_client/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_http_server/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_https_ota/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_lcd/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_lcd/interface",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/protobuf-c/protobuf-c",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/protocomm/include/common",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/protocomm/include/security",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/protocomm/include/transports",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/mdns/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_local_ctrl/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/sdmmc/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_serial_slave_link/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_websocket_client/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/expat/expat/expat/lib",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/expat/port/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/wear_levelling/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/fatfs/diskio",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/fatfs/vfs",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/fatfs/src",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/freemodbus/common/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/idf_test/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/idf_test/include/esp32",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/jsmn/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/json/cJSON",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/libsodium/libsodium/src/libsodium/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/libsodium/port_include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/mqtt/esp-mqtt/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/openssl/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/perfmon/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/spiffs/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/ulp/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/wifi_provisioning/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/button/button/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/rmaker_common/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/json_parser/upstream/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/json_parser/upstream",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/json_generator/upstream",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_schedule/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_rainmaker/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/qrcode/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/ws2812_led",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/dotprod/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/support/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/windows/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/windows/hann/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/windows/blackman/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/windows/blackman_harris/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/windows/blackman_nuttall/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/windows/nuttall/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/windows/flat_top/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/iir/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/fir/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/math/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/math/add/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/math/sub/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/math/mul/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/math/addc/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/math/mulc/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/math/sqrt/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/matrix/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/fft/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/dct/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/conv/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/common/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/kalman/ekf/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/kalman/ekf_imu13states/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_littlefs/src",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_littlefs/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dl/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dl/include/tool",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dl/include/typedef",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dl/include/image",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dl/include/math",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dl/include/nn",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dl/include/layer",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dl/include/detect",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dl/include/model_zoo",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-sr/esp-tts/esp_tts_chinese/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-sr/include/esp32",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp32-camera/driver/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp32-camera/conversions/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/fb_gfx/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/qspi_qspi/include",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/cores/esp32",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/variants/feather_esp32",
"/home/dustin/Arduino/libraries/Adafruit_seesaw_Library",
"/home/dustin/Arduino/libraries/Adafruit_BusIO",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/libraries/Wire/src",
"/home/dustin/Arduino/libraries/ArduinoJson/src",
"/home/dustin/Arduino/libraries/PubSubClient/src",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/libraries/WiFiClientSecure/src",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/libraries/WiFi/src",
"/home/dustin/Arduino/libraries/incbin/src",
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/libraries/SPI/src",
"/home/dustin/.arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/gcc8_4_0-esp-2021r2-patch3/xtensa-esp32-elf/include/c++/8.4.0",
"/home/dustin/.arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/gcc8_4_0-esp-2021r2-patch3/xtensa-esp32-elf/include/c++/8.4.0/xtensa-esp32-elf",
"/home/dustin/.arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/gcc8_4_0-esp-2021r2-patch3/xtensa-esp32-elf/include/c++/8.4.0/backward",
"/home/dustin/.arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/gcc8_4_0-esp-2021r2-patch3/lib/gcc/xtensa-esp32-elf/8.4.0/include",
"/home/dustin/.arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/gcc8_4_0-esp-2021r2-patch3/lib/gcc/xtensa-esp32-elf/8.4.0/include-fixed",
"/home/dustin/.arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/gcc8_4_0-esp-2021r2-patch3/xtensa-esp32-elf/sys-include",
"/home/dustin/.arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/gcc8_4_0-esp-2021r2-patch3/xtensa-esp32-elf/include"
],
"forcedInclude": [
"/home/dustin/.arduino15/packages/esp32/hardware/esp32/2.0.3/cores/esp32/Arduino.h"
],
"cStandard": "c11",
"cppStandard": "c++11",
"defines": [
"HAVE_CONFIG_H",
"MBEDTLS_CONFIG_FILE=\"mbedtls/esp_config.h\"",
"UNITY_INCLUDE_CONFIG_H",
"WITH_POSIX",
"_GNU_SOURCE",
"IDF_VER=\"v4.4.1-1-gb8050b365e\"",
"ESP_PLATFORM",
"_POSIX_READER_WRITER_LOCKS",
"F_CPU=240000000L",
"ARDUINO=10607",
"ARDUINO_FEATHER_ESP32",
"ARDUINO_ARCH_ESP32",
"ARDUINO_BOARD=\"FEATHER_ESP32\"",
"ARDUINO_VARIANT=\"feather_esp32\"",
"ARDUINO_PARTITION_default",
"ESP32",
"CORE_DEBUG_LEVEL=0",
"ARDUINO_USB_CDC_ON_BOOT=0",
"__DBL_MIN_EXP__=(-1021)",
"__FLT32X_MAX_EXP__=1024",
"__cpp_attributes=200809",
"__UINT_LEAST16_MAX__=0xffff",
"__ATOMIC_ACQUIRE=2",
"__FLT_MIN__=1.1754943508222875e-38F",
"__GCC_IEC_559_COMPLEX=0",
"__cpp_aggregate_nsdmi=201304",
"__UINT_LEAST8_TYPE__=unsigned char",
"__INTMAX_C(c)=c ## LL",
"__CHAR_BIT__=8",
"__UINT8_MAX__=0xff",
"__WINT_MAX__=0xffffffffU",
"__FLT32_MIN_EXP__=(-125)",
"__cpp_static_assert=200410",
"__ORDER_LITTLE_ENDIAN__=1234",
"__SIZE_MAX__=0xffffffffU",
"__WCHAR_MAX__=0xffff",
"__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1=1",
"__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2=1",
"__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4=1",
"__DBL_DENORM_MIN__=double(4.9406564584124654e-324L)",
"__GCC_ATOMIC_CHAR_LOCK_FREE=2",
"__GCC_IEC_559=0",
"__FLT32X_DECIMAL_DIG__=17",
"__FLT_EVAL_METHOD__=0",
"__cpp_binary_literals=201304",
"__FLT64_DECIMAL_DIG__=17",
"__GCC_ATOMIC_CHAR32_T_LOCK_FREE=2",
"__cpp_variadic_templates=200704",
"__UINT_FAST64_MAX__=0xffffffffffffffffULL",
"__SIG_ATOMIC_TYPE__=int",
"__DBL_MIN_10_EXP__=(-307)",
"__FINITE_MATH_ONLY__=0",
"__cpp_variable_templates=201304",
"__GNUC_PATCHLEVEL__=0",
"__FLT32_HAS_DENORM__=1",
"__UINT_FAST8_MAX__=0xffffffffU",
"__has_include(STR)=__has_include__(STR)",
"__DEC64_MAX_EXP__=385",
"__INT8_C(c)=c",
"__INT_LEAST8_WIDTH__=8",
"__UINT_LEAST64_MAX__=0xffffffffffffffffULL",
"__SHRT_MAX__=0x7fff",
"__LDBL_MAX__=1.7976931348623157e+308L",
"__UINT_LEAST8_MAX__=0xff",
"__GCC_ATOMIC_BOOL_LOCK_FREE=2",
"__UINTMAX_TYPE__=long long unsigned int",
"__DEC32_EPSILON__=1E-6DF",
"__FLT_EVAL_METHOD_TS_18661_3__=0",
"__CHAR_UNSIGNED__=1",
"__UINT32_MAX__=0xffffffffU",
"__GXX_EXPERIMENTAL_CXX0X__=1",
"__LDBL_MAX_EXP__=1024",
"__WINT_MIN__=0U",
"__INT_LEAST16_WIDTH__=16",
"__SCHAR_MAX__=0x7f",
"__WCHAR_MIN__=0",
"__INT64_C(c)=c ## LL",
"__DBL_DIG__=15",
"__GCC_ATOMIC_POINTER_LOCK_FREE=2",
"__SIZEOF_INT__=4",
"__SIZEOF_POINTER__=4",
"__GCC_ATOMIC_CHAR16_T_LOCK_FREE=2",
"__USER_LABEL_PREFIX__",
"__STDC_HOSTED__=1",
"__LDBL_HAS_INFINITY__=1",
"__XTENSA_EL__=1",
"__FLT32_DIG__=6",
"__FLT_EPSILON__=1.1920928955078125e-7F",
"__GXX_WEAK__=1",
"__SHRT_WIDTH__=16",
"__LDBL_MIN__=2.2250738585072014e-308L",
"__DEC32_MAX__=9.999999E96DF",
"__cpp_threadsafe_static_init=200806",
"__FLT32X_HAS_INFINITY__=1",
"__INT32_MAX__=0x7fffffff",
"__INT_WIDTH__=32",
"__SIZEOF_LONG__=4",
"__UINT16_C(c)=c",
"__PTRDIFF_WIDTH__=32",
"__DECIMAL_DIG__=17",
"__FLT64_EPSILON__=2.2204460492503131e-16F64",
"__INTMAX_WIDTH__=64",
"__FLT64_MIN_EXP__=(-1021)",
"__has_include_next(STR)=__has_include_next__(STR)",
"__LDBL_HAS_QUIET_NAN__=1",
"__FLT64_MANT_DIG__=53",
"__GNUC__=8",
"__GXX_RTTI=1",
"__cpp_delegating_constructors=200604",
"__FLT_HAS_DENORM__=1",
"__SIZEOF_LONG_DOUBLE__=8",
"__BIGGEST_ALIGNMENT__=16",
"__STDC_UTF_16__=1",
"__FLT64_MAX_10_EXP__=308",
"__FLT32_HAS_INFINITY__=1",
"__DBL_MAX__=double(1.7976931348623157e+308L)",
"__cpp_raw_strings=200710",
"__INT_FAST32_MAX__=0x7fffffff",
"__DBL_HAS_INFINITY__=1",
"__DEC32_MIN_EXP__=(-94)",
"__INTPTR_WIDTH__=32",
"__FLT32X_HAS_DENORM__=1",
"__INT_FAST16_TYPE__=int",
"__LDBL_HAS_DENORM__=1",
"__cplusplus=201402L",
"__cpp_ref_qualifiers=200710",
"__DEC128_MAX__=9.999999999999999999999999999999999E6144DL",
"__INT_LEAST32_MAX__=0x7fffffff",
"__DEC32_MIN__=1E-95DF",
"__DEPRECATED=1",
"__cpp_rvalue_references=200610",
"__DBL_MAX_EXP__=1024",
"__WCHAR_WIDTH__=16",
"__FLT32_MAX__=3.4028234663852886e+38F32",
"__DEC128_EPSILON__=1E-33DL",
"__PTRDIFF_MAX__=0x7fffffff",
"__FLT32_HAS_QUIET_NAN__=1",
"__GNUG__=8",
"__LONG_LONG_MAX__=0x7fffffffffffffffLL",
"__SIZEOF_SIZE_T__=4",
"__cpp_rvalue_reference=200610",
"__cpp_nsdmi=200809",
"__SIZEOF_WINT_T__=4",
"__LONG_LONG_WIDTH__=64",
"__cpp_initializer_lists=200806",
"__FLT32_MAX_EXP__=128",
"__cpp_hex_float=201603",
"__GXX_ABI_VERSION=1013",
"__FLT_MIN_EXP__=(-125)",
"__cpp_lambdas=200907",
"__INT_FAST64_TYPE__=long long int",
"__FP_FAST_FMAF=1",
"__FLT64_DENORM_MIN__=4.9406564584124654e-324F64",
"__DBL_MIN__=double(2.2250738585072014e-308L)",
"__FLT32X_EPSILON__=2.2204460492503131e-16F32x",
"__FLT64_MIN_10_EXP__=(-307)",
"__DEC128_MIN__=1E-6143DL",
"__REGISTER_PREFIX__",
"__UINT16_MAX__=0xffff",
"__DBL_HAS_DENORM__=1",
"__FLT32_MIN__=1.1754943508222875e-38F32",
"__UINT8_TYPE__=unsigned char",
"__NO_INLINE__=1",
"__FLT_MANT_DIG__=24",
"__LDBL_DECIMAL_DIG__=17",
"__VERSION__=\"8.4.0\"",
"__UINT64_C(c)=c ## ULL",
"__cpp_unicode_characters=200704",
"__cpp_decltype_auto=201304",
"__GCC_ATOMIC_INT_LOCK_FREE=2",
"__FLT32_MANT_DIG__=24",
"__FLOAT_WORD_ORDER__=__ORDER_LITTLE_ENDIAN__",
"__SCHAR_WIDTH__=8",
"__INT32_C(c)=c",
"__DEC64_EPSILON__=1E-15DD",
"__ORDER_PDP_ENDIAN__=3412",
"__DEC128_MIN_EXP__=(-6142)",
"__FLT32_MAX_10_EXP__=38",
"__INT_FAST32_TYPE__=int",
"__UINT_LEAST16_TYPE__=short unsigned int",
"__INT16_MAX__=0x7fff",
"__cpp_rtti=199711",
"__SIZE_TYPE__=unsigned int",
"__UINT64_MAX__=0xffffffffffffffffULL",
"__INT8_TYPE__=signed char",
"__cpp_digit_separators=201309",
"__ELF__=1",
"__xtensa__=1",
"__FLT_RADIX__=2",
"__INT_LEAST16_TYPE__=short int",
"__LDBL_EPSILON__=2.2204460492503131e-16L",
"__UINTMAX_C(c)=c ## ULL",
"__SIG_ATOMIC_MAX__=0x7fffffff",
"__GCC_ATOMIC_WCHAR_T_LOCK_FREE=2",
"__SIZEOF_PTRDIFF_T__=4",
"__FLT32X_MANT_DIG__=53",
"__FLT32X_MIN_EXP__=(-1021)",
"__DEC32_SUBNORMAL_MIN__=0.000001E-95DF",
"__INT_FAST16_MAX__=0x7fffffff",
"__FLT64_DIG__=15",
"__UINT_FAST32_MAX__=0xffffffffU",
"__UINT_LEAST64_TYPE__=long long unsigned int",
"__FLT_HAS_QUIET_NAN__=1",
"__FLT_MAX_10_EXP__=38",
"__LONG_MAX__=0x7fffffffL",
"__DEC128_SUBNORMAL_MIN__=0.000000000000000000000000000000001E-6143DL",
"__FLT_HAS_INFINITY__=1",
"__cpp_unicode_literals=200710",
"__UINT_FAST16_TYPE__=unsigned int",
"__DEC64_MAX__=9.999999999999999E384DD",
"__INT_FAST32_WIDTH__=32",
"__CHAR16_TYPE__=short unsigned int",
"__PRAGMA_REDEFINE_EXTNAME=1",
"__SIZE_WIDTH__=32",
"__INT_LEAST16_MAX__=0x7fff",
"__DEC64_MANT_DIG__=16",
"__INT64_MAX__=0x7fffffffffffffffLL",
"__UINT_LEAST32_MAX__=0xffffffffU",
"__FLT32_DENORM_MIN__=1.4012984643248171e-45F32",
"__GCC_ATOMIC_LONG_LOCK_FREE=2",
"__SIG_ATOMIC_WIDTH__=32",
"__INT_LEAST64_TYPE__=long long int",
"__INT16_TYPE__=short int",
"__INT_LEAST8_TYPE__=signed char",
"__DEC32_MAX_EXP__=97",
"__INT_FAST8_MAX__=0x7fffffff",
"__INTPTR_MAX__=0x7fffffff",
"__cpp_sized_deallocation=201309",
"__cpp_range_based_for=200907",
"__FLT64_HAS_QUIET_NAN__=1",
"__FLT32_MIN_10_EXP__=(-37)",
"__EXCEPTIONS=1",
"__LDBL_MANT_DIG__=53",
"__DBL_HAS_QUIET_NAN__=1",
"__FLT64_HAS_INFINITY__=1",
"__SIG_ATOMIC_MIN__=(-__SIG_ATOMIC_MAX__ - 1)",
"__cpp_return_type_deduction=201304",
"__INTPTR_TYPE__=int",
"__UINT16_TYPE__=short unsigned int",
"__WCHAR_TYPE__=short unsigned int",
"__SIZEOF_FLOAT__=4",
"__UINTPTR_MAX__=0xffffffffU",
"__INT_FAST64_WIDTH__=64",
"__DEC64_MIN_EXP__=(-382)",
"__cpp_decltype=200707",
"__FLT32_DECIMAL_DIG__=9",
"__INT_FAST64_MAX__=0x7fffffffffffffffLL",
"__GCC_ATOMIC_TEST_AND_SET_TRUEVAL=1",
"__FLT_DIG__=6",
"__UINT_FAST64_TYPE__=long long unsigned int",
"__INT_MAX__=0x7fffffff",
"__INT64_TYPE__=long long int",
"__FLT_MAX_EXP__=128",
"__DBL_MANT_DIG__=53",
"__cpp_inheriting_constructors=201511",
"__INT_LEAST64_MAX__=0x7fffffffffffffffLL",
"__FP_FAST_FMAF32=1",
"__DEC64_MIN__=1E-383DD",
"__WINT_TYPE__=unsigned int",
"__UINT_LEAST32_TYPE__=unsigned int",
"__SIZEOF_SHORT__=2",
"__LDBL_MIN_EXP__=(-1021)",
"__FLT64_MAX__=1.7976931348623157e+308F64",
"__WINT_WIDTH__=32",
"__INT_LEAST8_MAX__=0x7f",
"__FLT32X_MAX_10_EXP__=308",
"__WCHAR_UNSIGNED__=1",
"__LDBL_MAX_10_EXP__=308",
"__ATOMIC_RELAXED=0",
"__DBL_EPSILON__=double(2.2204460492503131e-16L)",
"__XTENSA_WINDOWED_ABI__=1",
"__UINT8_C(c)=c",
"__FLT64_MAX_EXP__=1024",
"__INT_LEAST32_TYPE__=int",
"__SIZEOF_WCHAR_T__=2",
"__INT_FAST8_TYPE__=int",
"__GNUC_STDC_INLINE__=1",
"__FLT64_HAS_DENORM__=1",
"__FLT32_EPSILON__=1.1920928955078125e-7F32",
"__DBL_DECIMAL_DIG__=17",
"__STDC_UTF_32__=1",
"__INT_FAST8_WIDTH__=32",
"__DEC_EVAL_METHOD__=2",
"__FLT32X_MAX__=1.7976931348623157e+308F32x",
"__XTENSA__=1",
"__ORDER_BIG_ENDIAN__=4321",
"__cpp_runtime_arrays=198712",
"__UINT64_TYPE__=long long unsigned int",
"__UINT32_C(c)=c ## U",
"__INTMAX_MAX__=0x7fffffffffffffffLL",
"__cpp_alias_templates=200704",
"__BYTE_ORDER__=__ORDER_LITTLE_ENDIAN__",
"__FLT_DENORM_MIN__=1.4012984643248171e-45F",
"__INT8_MAX__=0x7f",
"__LONG_WIDTH__=32",
"__UINT_FAST32_TYPE__=unsigned int",
"__CHAR32_TYPE__=unsigned int",
"__FLT_MAX__=3.4028234663852886e+38F",
"__cpp_constexpr=201304",
"__INT32_TYPE__=int",
"__SIZEOF_DOUBLE__=8",
"__cpp_exceptions=199711",
"__FLT_MIN_10_EXP__=(-37)",
"__FLT64_MIN__=2.2250738585072014e-308F64",
"__INT_LEAST32_WIDTH__=32",
"__INTMAX_TYPE__=long long int",
"__DEC128_MAX_EXP__=6145",
"__FLT32X_HAS_QUIET_NAN__=1",
"__ATOMIC_CONSUME=1",
"__GNUC_MINOR__=4",
"__INT_FAST16_WIDTH__=32",
"__UINTMAX_MAX__=0xffffffffffffffffULL",
"__DEC32_MANT_DIG__=7",
"__FLT32X_DENORM_MIN__=4.9406564584124654e-324F32x",
"__DBL_MAX_10_EXP__=308",
"__LDBL_DENORM_MIN__=4.9406564584124654e-324L",
"__INT16_C(c)=c",
"__cpp_generic_lambdas=201304",
"__STDC__=1",
"__FLT32X_DIG__=15",
"__PTRDIFF_TYPE__=int",
"__ATOMIC_SEQ_CST=5",
"__UINT32_TYPE__=unsigned int",
"__FLT32X_MIN_10_EXP__=(-307)",
"__UINTPTR_TYPE__=unsigned int",
"__DEC64_SUBNORMAL_MIN__=0.000000000000001E-383DD",
"__DEC128_MANT_DIG__=34",
"__LDBL_MIN_10_EXP__=(-307)",
"__SIZEOF_LONG_LONG__=8",
"__cpp_user_defined_literals=200809",
"__GCC_ATOMIC_LLONG_LOCK_FREE=1",
"__FLT32X_MIN__=2.2250738585072014e-308F32x",
"__LDBL_DIG__=15",
"__FLT_DECIMAL_DIG__=9",
"__UINT_FAST16_MAX__=0xffffffffU",
"__GCC_ATOMIC_SHORT_LOCK_FREE=2",
"__INT_LEAST64_WIDTH__=64",
"__UINT_FAST8_TYPE__=unsigned int",
"__cpp_init_captures=201304",
"__ATOMIC_ACQ_REL=4",
"__ATOMIC_RELEASE=3",
"USBCON"
]
}
]
}

49
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,49 @@
{
"C_Cpp.clang_format_fallbackStyle": "{ BasedOnStyle: Google, IndentWidth: 4, ColumnLimit: 79 }",
"files.associations": {
"array": "cpp",
"atomic": "cpp",
"*.tcc": "cpp",
"cctype": "cpp",
"clocale": "cpp",
"cmath": "cpp",
"cstdarg": "cpp",
"cstddef": "cpp",
"cstdint": "cpp",
"cstdio": "cpp",
"cstdlib": "cpp",
"cstring": "cpp",
"cwchar": "cpp",
"cwctype": "cpp",
"deque": "cpp",
"unordered_map": "cpp",
"vector": "cpp",
"exception": "cpp",
"algorithm": "cpp",
"functional": "cpp",
"iterator": "cpp",
"memory": "cpp",
"memory_resource": "cpp",
"numeric": "cpp",
"optional": "cpp",
"random": "cpp",
"string": "cpp",
"string_view": "cpp",
"system_error": "cpp",
"tuple": "cpp",
"type_traits": "cpp",
"utility": "cpp",
"fstream": "cpp",
"initializer_list": "cpp",
"iosfwd": "cpp",
"istream": "cpp",
"limits": "cpp",
"new": "cpp",
"ostream": "cpp",
"sstream": "cpp",
"stdexcept": "cpp",
"streambuf": "cpp",
"cinttypes": "cpp",
"typeinfo": "cpp"
}
}

12
constants.h Normal file
View File

@ -0,0 +1,12 @@
#define DEVICE_MANUFACTURER "Dustin C. Hatch"
#define DEVICE_NAME "Garden Sensor"
#define DEVICE_MODEL "Garden Sensor"
#define TOPIC_CFG_MOISTURE "homeassistant/sensor/garden_moisture/config"
#define TOPIC_CFG_TEMPERATURE "homeassistant/sensor/garden_temperature/config"
#define TOPIC_CFG_BATTERY "homeassistant/sensor/garden_battery/config"
#define TOPIC_CFG_RSSI "homeassistant/sensor/garden_rssi/config"
#define TOPIC_ERRORS "garden/errors"
#define TOPIC_STATE "garden/state"
#define SLEEP_MILLIS (1000 * 60)

159
gardensensor.ino Normal file
View File

@ -0,0 +1,159 @@
#include <Adafruit_seesaw.h>
#include <ArduinoJson.h>
#include <PubSubClient.h>
#include <WiFiClientSecure.h>
#include <incbin.h>
#include "config.h"
#include "constants.h"
#include "mqtt_discovery.hpp"
#include "values.hpp"
INCTXT(RootCA, "isrgrootx1.pem");
WiFiClientSecure sock;
PubSubClient mqtt(sock);
Values values;
Adafruit_seesaw ss;
void setup() {
delay(1000); // VSCode is slow to open the serial console after upload
Serial.begin(115200);
pinMode(13, OUTPUT);
digitalWrite(13, 1);
if (!wifi_connect()) {
Serial.printf("Failed to connect to WiFi, status %s\n", WiFi.status());
reboot();
}
if (!mqtt_connect()) {
Serial.println("Could not connect to MQTT");
reboot();
}
if (!publish_all_config(&mqtt, WiFi.macAddress().c_str())) {
Serial.println("Failed to publish device configuration!");
Serial.println(mqtt.state());
}
if (!ss.begin(0x36)) {
auto msg = "Seesaw not found";
Serial.println(msg);
mqtt_send_error(msg);
reboot();
}
if (!values.read(&ss)) {
auto msg = "Failed to get sensor values";
Serial.println(msg);
mqtt_send_error(msg);
reboot();
} else {
Serial.println("Got Values:");
Serial.printf(" Moisture: %d\n", values.moisture);
Serial.printf(" Temperature: %.02f\n", values.temperature);
Serial.printf(" Battery: %.02f\n", values.battery);
Serial.printf(" RSSI: %d\n", values.rssi);
if (!values.send(&mqtt, TOPIC_STATE)) {
Serial.println("Failed to send sensor values");
}
}
Serial.println("Disconnecting from MQTT broker ...");
mqtt.disconnect();
delay(1000);
Serial.println("Entering deep sleep ...");
Serial.flush();
esp_sleep_enable_timer_wakeup((SLEEP_MILLIS - millis()) * 1000);
esp_deep_sleep_start();
}
void loop() {
digitalWrite(13, 0);
while (1) delay(1471228928);
}
void error_led_blink() {
while (1) {
digitalWrite(13, 1);
delay(500);
digitalWrite(13, 0);
delay(500);
}
}
boolean wifi_connect() {
Serial.printf("Connecting to WiFi (%s) ", CFG_WIFI_SSID);
WiFi.begin(CFG_WIFI_SSID, CFG_WIFI_PSK);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
if (millis() >= 5000) {
break;
}
Serial.print(".");
Serial.flush();
}
Serial.println();
if (WiFi.status() != WL_CONNECTED) {
return false;
}
Serial.println("WiFi connected");
Serial.printf(" IP address: %s\n", WiFi.localIP().toString());
Serial.printf(" DNS server: %s\n", WiFi.dnsIP().toString());
Serial.printf(" Default gateway: %s\n", WiFi.gatewayIP().toString());
return true;
}
boolean mqtt_connect() {
sock.setCACert(gRootCAData);
int retries = 3;
mqtt.setServer(CFG_MQTT_SERVER, CFG_MQTT_PORT);
for (;;) {
Serial.print("Connecting to MQTT ... ");
Serial.flush();
if (!mqtt.connect(CFG_MQTT_CLIENTID, CFG_MQTT_USERNAME,
CFG_MQTT_PASSWORD)) {
Serial.println(mqtt.state());
mqtt.disconnect();
delay(1000);
retries--;
if (retries < 1) {
return false;
}
} else {
Serial.println("OK");
break;
}
}
if (!mqtt.setBufferSize(512)) {
Serial.println("Failed to set MQTT client buffer size!");
return false;
}
return true;
}
void mqtt_send_error(const __FlashStringHelper* msg) {
mqtt_send_error((const char*)msg);
}
void mqtt_send_error(const char* msg) {
if (!mqtt.connected()) {
Serial.println("MQTT client not connected, cannot send error message");
return;
}
mqtt.publish(TOPIC_ERRORS, msg);
}
void reboot() {
if (mqtt.connected()) {
mqtt.disconnect();
}
Serial.println("Rebooting in 2 seconds");
delay(2000);
ESP.restart();
}

31
isrgrootx1.pem Normal file
View File

@ -0,0 +1,31 @@
-----BEGIN CERTIFICATE-----
MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4
WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu
ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY
MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc
h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+
0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U
A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW
T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH
B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC
B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv
KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn
OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn
jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw
qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI
rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq
hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ
3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK
NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5
ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur
TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC
jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc
oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq
4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA
mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d
emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=
-----END CERTIFICATE-----

54
mqtt_discovery.cpp Normal file
View File

@ -0,0 +1,54 @@
#include "mqtt_discovery.hpp"
#include <ArduinoJson.h>
#include "constants.h"
static bool publish_config(PubSubClient* mqtt, const char* topic,
const char* name, const char* unique_id,
const char* value_template, const char* identifier,
const char* device_class, const char* unit) {
StaticJsonDocument<256> doc;
doc["unique_id"] = unique_id;
doc["name"] = name;
doc["state_topic"] = TOPIC_STATE;
doc["value_template"] = value_template;
if (device_class != NULL) {
doc["device_class"] = device_class;
}
if (unit != NULL) {
doc["unit_of_measurement"] = unit;
}
auto device = doc.createNestedObject("device");
device["manufacturer"] = DEVICE_MANUFACTURER;
device["name"] = DEVICE_NAME;
device["model"] = DEVICE_MODEL;
auto ident = device.createNestedArray("identifiers");
ident.add(identifier);
String msg;
serializeJson(doc, msg);
auto payload = msg.c_str();
Serial.printf("Publishing configuration for %s (%zd bytes) to %s ... ",
unique_id, strlen(payload), topic);
auto r = mqtt->publish(topic, payload, true);
Serial.println(r ? "OK" : "FAILED");
return r;
}
bool publish_all_config(PubSubClient* mqtt, const char* ident) {
bool ret = true;
publish_config(mqtt, TOPIC_CFG_MOISTURE, "Garden Sensor Moisture",
"sensor.garden_sensor_moisture",
"{{ value_json.moisture }}", ident, NULL, NULL);
publish_config(mqtt, TOPIC_CFG_TEMPERATURE, "Garden Sensor Temperature",
"sensor.garden_sensor_temperature",
"{{ value_json.temperature }}", ident, "temperature", "°C");
publish_config(mqtt, TOPIC_CFG_BATTERY, "Garden Sensor Battery Level",
"sensor.garden_sensor_battery_level",
"{{ value_json.battery_level }}", ident, "voltage", "V");
publish_config(mqtt, TOPIC_CFG_RSSI, "Garden Sensor Signal Strength",
"sensor.garden_sensor_rssi", "{{ value_json.rssi }}", ident,
"signal_strength", "dBm");
return ret;
}

4
mqtt_discovery.hpp Normal file
View File

@ -0,0 +1,4 @@
#include <PubSubClient.h>
bool publish_all_config(PubSubClient* mqtt, const char* ident);

32
values.cpp Normal file
View File

@ -0,0 +1,32 @@
#include "values.hpp"
#include <ArduinoJson.h>
#include <WiFi.h>
static inline double round2(double value) {
return (int)(value * 100 + 0.5) / 100.0;
}
bool Values::read(Adafruit_seesaw* ss) {
moisture = ss->touchRead(0);
temperature = ss->getTemp();
battery = analogRead(A13) * 3.3 / 4095.0 * 2;
rssi = WiFi.RSSI();
return true;
}
bool Values::send(PubSubClient* mqtt, const char* topic) {
StaticJsonDocument<64> doc;
doc["moisture"] = moisture;
doc["temperature"] = round2(temperature);
doc["battery_level"] = round2(battery);
doc["rssi"] = rssi;
String msg;
serializeJson(doc, msg);
auto payload = msg.c_str();
Serial.printf("Publishing sensor values (%d bytes) to %s\n",
strlen(payload), topic);
return mqtt->publish(topic, payload);
}

16
values.hpp Normal file
View File

@ -0,0 +1,16 @@
#include <Adafruit_seesaw.h>
#include <PubSubClient.h>
class Values {
public:
uint16_t moisture;
float temperature;
float battery;
int8_t rssi;
Values() {};
~Values() {};
bool read(Adafruit_seesaw* ss);
bool send(PubSubClient* mqtt, const char* topic);
};