summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
Diffstat (limited to 'main')
-rw-r--r--main/CMakeLists.txt2
-rw-r--r--main/Kconfig.projbuild13
-rw-r--r--main/network.c23
-rw-r--r--main/network.h7
-rw-r--r--main/sprayduck.c60
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);
}
}