diff options
author | Aaditya Dhruv <[email protected]> | 2025-06-04 00:08:17 -0500 |
---|---|---|
committer | Aaditya Dhruv <[email protected]> | 2025-08-14 20:03:09 -0500 |
commit | ae92286baf2ec538984eb3ca186aea1619ac4b59 (patch) | |
tree | 0f2eb10397e236a3f7c6d116c986da8541ee571c /main | |
parent | 457c0d46c06c53e6d8e00391a1a4aa23c4c31ca0 (diff) |
Working prototype - Conditional watering based on sensor value
Diffstat (limited to 'main')
-rw-r--r-- | main/CMakeLists.txt | 2 | ||||
-rw-r--r-- | main/Kconfig.projbuild | 13 | ||||
-rw-r--r-- | main/network.c | 23 | ||||
-rw-r--r-- | main/network.h | 7 | ||||
-rw-r--r-- | main/sprayduck.c | 60 |
5 files changed, 82 insertions, 23 deletions
diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index e027065..d5e33a7 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -1,2 +1,2 @@ -idf_component_register(SRCS "sprayduck.c" +idf_component_register(SRCS "sprayduck.c" "network.c" INCLUDE_DIRS ".") diff --git a/main/Kconfig.projbuild b/main/Kconfig.projbuild new file mode 100644 index 0000000..348e4cc --- /dev/null +++ b/main/Kconfig.projbuild @@ -0,0 +1,13 @@ +menu "Sprayduck IO" + +config SENSOR_CHANNEL + string "ADC Channel" + default "ADC_CHANNEL_7" + help + ADC Channel Number for the moisture sensor +config LED_GPIO_PIN + int "LED GPIO" + default 22 + help + LED GPIO Pin for notification +endmenu diff --git a/main/network.c b/main/network.c new file mode 100644 index 0000000..d45ca2f --- /dev/null +++ b/main/network.c @@ -0,0 +1,23 @@ +#include "network.h" +#include "esp_log_level.h" +#include "esp_wifi_types_generic.h" + +void setup_network() { + esp_log_level_set("sprayduck", ESP_LOG_VERBOSE); + wifi_init_config_t config = WIFI_INIT_CONFIG_DEFAULT(); + config.nvs_enable = 0; + + ESP_ERROR_CHECK(esp_wifi_init(&config)); + + esp_wifi_set_mode(WIFI_MODE_STA); + + + wifi_sta_config_t sta_config = { + .ssid = "SSID", + .password = "PASSWORD" + }; + ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, (wifi_config_t*) &sta_config)); + + ESP_ERROR_CHECK(esp_wifi_start()); + ESP_ERROR_CHECK(esp_wifi_connect()); +} diff --git a/main/network.h b/main/network.h new file mode 100644 index 0000000..f14569f --- /dev/null +++ b/main/network.h @@ -0,0 +1,7 @@ +#include "esp_err.h" +#include "esp_wifi.h" +#include "esp_wifi_types_generic.h" + + +void setup_network(); + diff --git a/main/sprayduck.c b/main/sprayduck.c index 8619c3d..29f4461 100644 --- a/main/sprayduck.c +++ b/main/sprayduck.c @@ -1,25 +1,42 @@ #include "freertos/FreeRTOS.h" +#include "network.h" #include "freertos/task.h" #include "esp_log.h" #include "hal/gpio_types.h" #include <driver/gpio.h> -#include "esp_wifi.h" +#include <stdlib.h> #include "hal/adc_types.h" #include "esp_adc/adc_oneshot.h" -#define LED_GPIO_PIN 22 +#define THRESHOLD 2000 +#define FLIP_GPIO_PIN 23 +#define SENSOR_GPIO_PIN 22 #define SENSOR_CHANNEL ADC_CHANNEL_7 #define TAG "sprayduck" -static int adc_raw[10]; + +int read_sensor(adc_oneshot_unit_handle_t handler) { + int sum = 0; + int i = 0; + for (i = 0; i < 5; i++) { + int value = 0; + ESP_ERROR_CHECK(adc_oneshot_read(handler, SENSOR_CHANNEL, &value)); + ESP_LOGI(TAG, "ADC%d Channel[%d] Raw Data: %d", ADC_UNIT_1 + 1, SENSOR_CHANNEL, value); + sum += value; + } + return sum / 5; +} void app_main(void) { - bool led_state = false; + setup_network(); - gpio_reset_pin(LED_GPIO_PIN); - gpio_set_direction(LED_GPIO_PIN, GPIO_MODE_OUTPUT); + gpio_reset_pin(FLIP_GPIO_PIN); + gpio_set_direction(FLIP_GPIO_PIN, GPIO_MODE_OUTPUT); + + gpio_reset_pin(SENSOR_GPIO_PIN); + gpio_set_direction(SENSOR_GPIO_PIN, GPIO_MODE_OUTPUT); adc_oneshot_unit_handle_t handler; adc_oneshot_unit_init_cfg_t adc_config = { @@ -32,28 +49,27 @@ void app_main(void) adc_oneshot_chan_cfg_t channel_config = { .bitwidth = ADC_BITWIDTH_DEFAULT, .atten = ADC_ATTEN_DB_12, -}; - -ESP_ERROR_CHECK(adc_oneshot_config_channel(handler, SENSOR_CHANNEL, &channel_config)); - - - - + }; + ESP_ERROR_CHECK(adc_oneshot_config_channel(handler, SENSOR_CHANNEL, &channel_config)); + gpio_set_level((gpio_num_t) FLIP_GPIO_PIN, 1); while (1) { - //ESP_LOGI("sprayduck", "Flipping LED - state %d!", led_state); - if (led_state) { - gpio_set_level((gpio_num_t) LED_GPIO_PIN, 0); + //Turn on sensor + gpio_set_level((gpio_num_t) SENSOR_GPIO_PIN, 1); + int value = read_sensor(handler); + ESP_LOGI("sprayduck", "Checking sensor value average %d", value); + if (value > THRESHOLD) { + ESP_LOGI("sprayduck", "Pouring water"); + gpio_set_level((gpio_num_t) FLIP_GPIO_PIN, 0); } else { - gpio_set_level((gpio_num_t) LED_GPIO_PIN, 1); + ESP_LOGI("sprayduck", "Stopping the water"); + gpio_set_level((gpio_num_t) FLIP_GPIO_PIN, 1); } - - led_state = !led_state; -ESP_ERROR_CHECK(adc_oneshot_read(handler, SENSOR_CHANNEL, &adc_raw[0])); -ESP_LOGI(TAG, "ADC%d Channel[%d] Raw Data: %d", ADC_UNIT_1 + 1, SENSOR_CHANNEL, adc_raw[0]); - vTaskDelay(1000 / portTICK_PERIOD_MS); + // Turn off Sensor + gpio_set_level((gpio_num_t) SENSOR_GPIO_PIN, 0); + vTaskDelay(43200000 / portTICK_PERIOD_MS); } } |