"
- "
🎯 ESP32 Точка Доступа
"
- "
"
- "
📡 Информация о сервере
"
- "
✅ HTTP сервер работает
"
- "
🌐 IP адрес: 192.168.4.1
"
- "
💾 Свободно памяти: 0 байт
"
- "
🕐 Время работы: 0 сек
"
- "
"
- "
"
- "
💡 Управление GPIO2 (встроенный LED)
"
- " "
- " "
- " "
- " "
- "
"
- "
📊 Получить данные с датчика
"
- "
"
- "
Данные не загружены
"
- "
"
- "
"
- " "
- ""
- "";
-
httpd_resp_set_type(req, "text/html; charset=utf-8");
httpd_resp_send(req, (const char*)assets_index_html, HTTPD_RESP_USE_STRLEN);
return ESP_OK;
@@ -289,29 +155,25 @@ static esp_err_t save_thresholds_handler(httpd_req_t *req) {
char *content = NULL;
size_t content_len = req->content_len;
- // Проверка длины содержимого
- if (content_len > 512) { // Ограничение размера для безопасности
+ if (content_len > 512) {
httpd_resp_send_err(req, HTTPD_400_BAD_REQUEST, "Content too large");
return ESP_FAIL;
}
- // Выделение памяти под содержимое запроса
content = malloc(content_len + 1);
if (!content) {
httpd_resp_send_err(req, HTTPD_500_INTERNAL_SERVER_ERROR, "Memory allocation failed");
return ESP_FAIL;
}
- // Чтение тела запроса
int ret = httpd_req_recv(req, content, content_len);
if (ret <= 0) {
free(content);
httpd_resp_send_err(req, HTTPD_400_BAD_REQUEST, "Failed to receive data");
return ESP_FAIL;
}
- content[content_len] = '\0'; // Null-terminator
+ content[content_len] = '\0';
- // Парсинг JSON
cJSON *json = cJSON_Parse(content);
free(content);
@@ -320,7 +182,6 @@ static esp_err_t save_thresholds_handler(httpd_req_t *req) {
return ESP_FAIL;
}
- // Извлечение параметров low и up
cJSON *low_item = cJSON_GetObjectItem(json, "low");
cJSON *up_item = cJSON_GetObjectItem(json, "up");
@@ -347,7 +208,6 @@ static esp_err_t save_thresholds_handler(httpd_req_t *req) {
return ESP_FAIL;
}
- // Проверка значений (опционально)
if (low_value >= up_value) {
httpd_resp_send_err(req, HTTPD_400_BAD_REQUEST, "Low value must be less than up value");
return ESP_FAIL;
@@ -356,10 +216,9 @@ static esp_err_t save_thresholds_handler(httpd_req_t *req) {
nvs_handle_t my_handle;
esp_err_t err;
- // 1. Открываем раздел "nvs" и пространство имен "storage" на запись/чтение
- err = nvs_open("storage", NVS_READWRITE, &my_handle);
+ err = nvs_open(NVS_PARTITION, NVS_READWRITE, &my_handle);
if (err != ESP_OK) {
- ESP_LOGE("TAG", "Error opening NVS");
+ ESP_LOGE(TAG, "Error opening NVS");
return 1;
}
@@ -369,14 +228,11 @@ static esp_err_t save_thresholds_handler(httpd_req_t *req) {
err = nvs_set_i32(my_handle, THRESHOLD_UP_NVS_NAME, up_value);
ESP_ERROR_CHECK(err);
- // 4. Сохраняем изменения во flash
err = nvs_commit(my_handle);
ESP_ERROR_CHECK(err);
- // 5. Закрываем хендл
nvs_close(my_handle);
- // Формирование успешного ответа
snprintf(response, sizeof(response), "{\"success\":true,\"low\":%d,\"up\":%d}", low_value, up_value);
httpd_resp_set_type(req, "application/json");
@@ -390,20 +246,17 @@ static esp_err_t set_thresholds_handler(httpd_req_t *req) {
char *content = NULL;
size_t content_len = req->content_len;
- // Проверка длины содержимого
- if (content_len > 512) { // Ограничение размера для безопасности
+ if (content_len > 512) {
httpd_resp_send_err(req, HTTPD_400_BAD_REQUEST, "Content too large");
return ESP_FAIL;
}
- // Выделение памяти под содержимое запроса
content = malloc(content_len + 1);
if (!content) {
httpd_resp_send_err(req, HTTPD_500_INTERNAL_SERVER_ERROR, "Memory allocation failed");
return ESP_FAIL;
}
- // Чтение тела запроса
int ret = httpd_req_recv(req, content, content_len);
if (ret <= 0) {
free(content);
@@ -421,7 +274,6 @@ static esp_err_t set_thresholds_handler(httpd_req_t *req) {
return ESP_FAIL;
}
- // Извлечение параметров low и up
cJSON *low_item = cJSON_GetObjectItem(json, "low");
cJSON *up_item = cJSON_GetObjectItem(json, "up");
@@ -448,7 +300,6 @@ static esp_err_t set_thresholds_handler(httpd_req_t *req) {
return ESP_FAIL;
}
- // Проверка значений (опционально)
if (low_value >= up_value) {
httpd_resp_send_err(req, HTTPD_400_BAD_REQUEST, "Low value must be less than up value");
return ESP_FAIL;
@@ -457,7 +308,6 @@ static esp_err_t set_thresholds_handler(httpd_req_t *req) {
atomic_store(&g_threshold_low, low_value);
atomic_store(&g_threshold_up, up_value);
- // Формирование успешного ответа
snprintf(response, sizeof(response), "{\"success\":true,\"low\":%d,\"up\":%d}", low_value, up_value);
httpd_resp_set_type(req, "application/json");
@@ -467,16 +317,13 @@ static esp_err_t set_thresholds_handler(httpd_req_t *req) {
}
void wifi_init_softap(void) {
- // Инициализация сетевого интерфейса
ESP_ERROR_CHECK(esp_netif_init());
ESP_ERROR_CHECK(esp_event_loop_create_default());
esp_netif_t *ap_netif = esp_netif_create_default_wifi_ap();
- // Инициализация Wi-Fi
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
- // Настройка точки доступа
wifi_config_t wifi_config = {
.ap = {
.ssid = CONFIG_AP_WIFI_SSID,
@@ -502,19 +349,12 @@ void wifi_init_softap(void) {
ip_info.gw.addr = ipaddr_addr(CONFIG_AP_GATEWAY);
ip_info.netmask.addr = ipaddr_addr(CONFIG_AP_NETMASK);
- // Останавливаем DHCP сервер, который автоматически запустился
ESP_ERROR_CHECK(esp_netif_dhcps_stop(ap_netif));
- // Устанавливаем наши настройки IP
ESP_ERROR_CHECK(esp_netif_set_ip_info(ap_netif, &ip_info));
ESP_ERROR_CHECK(esp_netif_dhcps_start(ap_netif));
- ESP_LOGI(TAG, "=========================================");
- ESP_LOGI(TAG, "📶 Wifi name (SSID): %s", CONFIG_AP_WIFI_SSID);
- ESP_LOGI(TAG, "🔑 Password: %s", strlen(CONFIG_AP_WIFI_PASS) ? CONFIG_AP_WIFI_PASS : "Open network");
- ESP_LOGI(TAG, "🌐 Webinterface IP address: %s:%s", CONFIG_AP_IP, CONFIG_WEBINTERFACE_PORT);
- ESP_LOGI(TAG, "=========================================");
}
static void disablePump(void) {
@@ -525,7 +365,7 @@ static void enablePump(void) {
gpio_set_level(CONFIG_PUMP_PIN, true);
}
-static void vPumpControllTask(void *pvParameters) {
+static void vPumpControlTask(void *pvParameters) {
while (1) {
int current_pressure = atomic_load(&g_current_pressure);
int low_treshhold = atomic_load(&g_threshold_low);
@@ -533,8 +373,10 @@ static void vPumpControllTask(void *pvParameters) {
if (current_pressure < low_treshhold) {
enablePump();
+ ESP_LOGI(TAG, "Pump enabled");
} else if (current_pressure >= up_treshhold) {
disablePump();
+ ESP_LOGI(TAG, "Pump disabled");
}
vTaskDelay(pdMS_TO_TICKS(1000));
}
@@ -555,11 +397,9 @@ static void vHttpServerTask(void *pvParameters) {
config.max_uri_handlers = 10;
config.stack_size = 8192;
- // Запуск HTTP сервера
if (httpd_start(&server, &config) == ESP_OK) {
- ESP_LOGI(TAG, "🚀 HTTP сервер запущен на порту %d", config.server_port);
+ ESP_LOGI(TAG, "🚀 HTTP server run on port %d", config.server_port);
- // Регистрация URI обработчиков
httpd_uri_t root = {
.uri = "/",
.method = HTTP_GET,
@@ -592,7 +432,7 @@ static void vHttpServerTask(void *pvParameters) {
};
httpd_register_uri_handler(server, &save_thresholds);
} else {
- ESP_LOGE(TAG, "❌ Ошибка запуска HTTP сервера");
+ ESP_LOGE(TAG, "❌Error HTTP server running");
}
while (1) {
@@ -610,14 +450,12 @@ void app_main(void) {
nvs_handle_t my_handle;
esp_err_t err;
- // 1. Открываем раздел "nvs" и пространство имен "storage" на запись/чтение
- err = nvs_open("storage", NVS_READWRITE, &my_handle);
+ err = nvs_open(NVS_PARTITION, NVS_READWRITE, &my_handle);
if (err != ESP_OK) {
- ESP_LOGE("TAG", "Error opening NVS");
+ ESP_LOGE(TAG, "Error opening NVS");
}
- int32_t threshold_up, threshold_low = 0;
-
+ int32_t threshold_low = 0;
err = nvs_get_i32(my_handle, THRESHOLD_LOW_NVS_NAME, &threshold_low);
if (err == ESP_OK) {
atomic_store(&g_threshold_low, threshold_low);
@@ -627,6 +465,7 @@ void app_main(void) {
ESP_ERROR_CHECK(err);
}
+ int32_t threshold_up = 0;
err = nvs_get_i32(my_handle, THRESHOLD_UP_NVS_NAME, &threshold_up);
if (err == ESP_OK) {
atomic_store(&g_threshold_up, threshold_up);
@@ -639,23 +478,20 @@ void app_main(void) {
adc_init();
pump_init();
-
- ESP_LOGI(TAG, "=========================================");
- ESP_LOGI(TAG, "ESP32 Точка Доступа + HTTP Сервер");
- ESP_LOGI(TAG, "=========================================");
-
-
wifi_init_softap();
vTaskDelay(pdMS_TO_TICKS(1000));
xTaskCreate(vHttpServerTask, "http_server", 8192, NULL, 5, NULL);
- xTaskCreate(vPumpControllTask, "pump_controll", 8192, NULL, 5, NULL);
+ xTaskCreate(vPumpControlTask, "pump_controll", 8192, NULL, 5, NULL);
xTaskCreate(vReadSensorTask, "read_sensor", 8192, NULL, 5, NULL);
- ESP_LOGI(TAG, "✅ Система готова к работе");
- ESP_LOGI(TAG, "📱 Подключитесь к Wi-Fi: %s", CONFIG_AP_WIFI_SSID);
- ESP_LOGI(TAG, "🌐 Откройте браузер: http://192.168.4.1");
+ ESP_LOGI(TAG, "=========================================");
+ ESP_LOGI(TAG, "✅ Ready to work");
+ ESP_LOGI(TAG, "📱 Connect to Wi-Fi: %s", CONFIG_AP_WIFI_SSID);
+ ESP_LOGI(TAG, "🔑 Wi-Fi Password: %s", strlen(CONFIG_AP_WIFI_PASS) ? CONFIG_AP_WIFI_PASS : "Open network");
+ ESP_LOGI(TAG, "🌐 Open browser: http://%s:%d", CONFIG_AP_IP, CONFIG_WEBINTERFACE_PORT);
+ ESP_LOGI(TAG, "=========================================");
while (1) {
vTaskDelay(pdMS_TO_TICKS(10000));
@@ -664,7 +500,6 @@ void app_main(void) {
memset(&sta_list, 0, sizeof(sta_list));
esp_wifi_ap_get_sta_list(&sta_list);
- ESP_LOGI(TAG, "📊 Подключено клиентов: %d", sta_list.num);
+ ESP_LOGI(TAG, "📊 Wi-Fi Clients connected: %d", sta_list.num);
}
}
-