esp_garden git · master
Distributed ESP sensor and actuator system (garden)
C++ 70.7% Markdown 18% C 10.7%git clone https://git.christianimmanuel.de/embedded/esp_garden.gitwget https://git.christianimmanuel.de/embedded/esp_garden/archive/esp_garden.tar.gzclient_pump/main/main.cpp raw
#include "ClientPump.h"
#include "esp_system.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
extern "C" void set_gpio_output_level(int gpio_num,int level);
extern "C" esp_err_t esp_base_mac_addr_set(const uint8_t mac[6]);
long long next_message_unix = 0;
bool received_starting_message = false;
PumpConfig_s pump_configs[PUMP_COUNT] = {
{"pump_1", 0, 0, 0, 0, INACTIVE},
{"pump_2", 0, 0, 0, 0, INACTIVE},
};
void start_Pump(PumpConfig_s& pump_data) {
set_gpio_output_level(8,1);
set_gpio_output_level(10,1);
ESP_LOGI("start_Pump", "Starting Pump %s", pump_data.pump_name);
pump_data.pumping_started_at_unix = get_CurrentUnix();
pump_data.pumping_status = RUNNING;
}
void stop_Pump(PumpConfig_s& pump_data) {
set_gpio_output_level(10,0);
set_gpio_output_level(8,0);
ESP_LOGI("stop_Pump", "Stopped Pump %s", pump_data.pump_name);
pump_data.pumping_status = INACTIVE;
}
void pump_loop(void*) {
while (true) {
bool pumping = false;
for (size_t i = 0; i < PUMP_COUNT; i++) {
PumpConfig_s& cfg = pump_configs[i];
if (START == cfg.pumping_status) {
pumping = true;
received_starting_message = false;
start_Pump(cfg);
}
else if (RUNNING == cfg.pumping_status) {
long long stop_time = cfg.pumping_started_at_unix + cfg.pumping_duration;
long long now = get_CurrentUnix();
if (stop_time <= now)
stop_Pump(cfg);
else
pumping = true;
}
}
if (!pumping && next_message_unix != 0 && !received_starting_message)
sleep_UntilNextSend(next_message_unix);
// give other tasks CPU time
vTaskDelay(pdMS_TO_TICKS(100));
}
}
extern "C" void app_main(void) {
static const char *TAG = "app_main";
uint32_t setup_start = esp_timer_get_time() / 1000ULL;
ESP_LOGI(TAG, "Initializing ClientPump...");
esp_base_mac_addr_set(PEER_PUMP);
setup_Timezone();
init_WiFi();
init_EspNow();
next_message_unix = 0;
received_starting_message = false;
uint32_t setup_duration = (esp_timer_get_time() / 1000ULL) - setup_start;
ESP_LOGI(TAG, "Setup duration: %u ms", setup_duration);
xTaskCreate(pump_loop, "pump_loop", 4096, nullptr, 5, nullptr);
}