From 7db85d712e1050200428b1fa7cc15ef3f1b1aa21 Mon Sep 17 00:00:00 2001 From: Sven Luethi Date: Mon, 16 Sep 2024 16:18:56 +0200 Subject: [PATCH] modified: firmware/main/src/controller.c modified: firmware/main/src/leds.c modified: firmware/main/src/main.c modified: firmware/main/src/wifi.c --- firmware/main/src/controller.c | 35 ++++++++++++++------------- firmware/main/src/leds.c | 2 ++ firmware/main/src/main.c | 15 +++++++----- firmware/main/src/wifi.c | 44 +++++++++++++++++++++++++++------- 4 files changed, 65 insertions(+), 31 deletions(-) diff --git a/firmware/main/src/controller.c b/firmware/main/src/controller.c index 4759314..82f677a 100644 --- a/firmware/main/src/controller.c +++ b/firmware/main/src/controller.c @@ -6,7 +6,7 @@ #include #include #include -#include +//#include #include #include "controller.h" #include "functions.h" @@ -71,6 +71,7 @@ esp_err_t send_sensor_data(unsigned id, float humidity, float temperature) { }; // Create cJSON object + /* cJSON *json_payload = cJSON_CreateObject(); if (json_payload == NULL) { ESP_LOGE(TAG, "Failed to create JSON object"); @@ -78,22 +79,14 @@ esp_err_t send_sensor_data(unsigned id, float humidity, float temperature) { } // Add data to the JSON object - if (!cJSON_AddNumberToObject(json_payload, "temperature", temperature) || + if ( + !cJSON_AddNumberToObject(json_payload, "temperature", temperature) || !cJSON_AddNumberToObject(json_payload, "humidity", humidity) || !cJSON_AddNumberToObject(json_payload, "id", id)) { ESP_LOGE(TAG, "Failed to add data to JSON object"); cJSON_Delete(json_payload); return ESP_FAIL; } - /* - char tmp[100] = "{\"humidity\": "; - strcat(tmp, floatToString(humidity)); - strcat(tmp, ",\"temperature\": "); - strcat(tmp, floatToString(temperature)); - strcat(tmp, ",\"id\": "); - strcat(tmp, intToString(id)); - strcat(tmp, "}"); - */ // Print JSON object char *json_string = cJSON_PrintUnformatted(json_payload); @@ -102,15 +95,25 @@ esp_err_t send_sensor_data(unsigned id, float humidity, float temperature) { cJSON_Delete(json_payload); return ESP_FAIL; } + */ - ESP_LOGI(TAG, "Set up htttp client..."); + char msg[60] = "{\"humidity\":"; + strcat(msg, floatToString(humidity)); + strcat(msg, ",\"temperature\":"); + strcat(msg, floatToString(temperature)); + strcat(msg, ",\"id\":"); + strcat(msg, intToString(id)); + strcat(msg, "}"); + + + ESP_LOGI(TAG, "Set up http client..."); esp_http_client_handle_t client = esp_http_client_init(&config); // Set HTTP headers esp_http_client_set_header(client, "Content-Type", "application/json"); // Set POST data - esp_http_client_set_post_field(client, json_string, strlen(json_string)); - + //esp_http_client_set_post_field(client, json_string, strlen(json_string)); + esp_http_client_set_post_field(client, msg, strlen(msg)); // Perform the HTTP POST request err = esp_http_client_perform(client); @@ -133,8 +136,8 @@ esp_err_t send_sensor_data(unsigned id, float humidity, float temperature) { // Cleanup esp_http_client_cleanup(client); - cJSON_Delete(json_payload); - free(json_string); + //cJSON_Delete(json_payload); + //free(json_string); return 0; } diff --git a/firmware/main/src/leds.c b/firmware/main/src/leds.c index 3e771f6..7380936 100644 --- a/firmware/main/src/leds.c +++ b/firmware/main/src/leds.c @@ -38,6 +38,8 @@ esp_err_t led_init() { gpio_set_direction(LED2,GPIO_MODE_OUTPUT); gpio_set_direction(LED_INT,GPIO_MODE_OUTPUT); led0_on(); + led1_off(); + led2_off(); return ESP_OK; } diff --git a/firmware/main/src/main.c b/firmware/main/src/main.c index 07a4e23..11df7d1 100644 --- a/firmware/main/src/main.c +++ b/firmware/main/src/main.c @@ -49,7 +49,7 @@ void mainTask(void *pvParameters) { } */ void app_main() { - ESP_ERROR_CHECK(nvs_flash_init()); + //ESP_ERROR_CHECK(nvs_flash_init()); ESP_ERROR_CHECK(led_init()); ESP_ERROR_CHECK(wifi_init()); ESP_ERROR_CHECK(sht31_init()); @@ -68,20 +68,23 @@ void app_main() { while (1) { if (sht31_read_temp_hum(&temperature, &humidity) == ESP_OK) { - split_float(temperature, &temp_int_part, &temp_dec_part); - split_float(humidity, &hum_int_part, &hum_dec_part); - ESP_LOGI(TAG, "Temperature: %i.%i°C, Humidity: %i.%i%%", temp_int_part, (int)(temp_dec_part*1000), hum_int_part, (int)(hum_dec_part*1000)); + //split_float(temperature, &temp_int_part, &temp_dec_part); + //split_float(humidity, &hum_int_part, &hum_dec_part); + //ESP_LOGI(TAG, "Temperature: %i.%i°C, Humidity: %i.%i%%", temp_int_part, (int)(temp_dec_part*1000), hum_int_part, (int)(hum_dec_part*1000)); + ESP_LOGI(TAG, "Temperature: %s°C, Humidity: %s%%", floatToString(temperature), floatToString(humidity)); if(wifi_on() == ESP_OK) { // Send temperature... - send_sensor_data(0, humidity, temperature); + ESP_LOGI(TAG, "Sending temperature and humidity values to control node..."); + send_sensor_data(1, humidity, temperature); + ESP_LOGI(TAG, "Done sending temperature and humidity values to control node."); wifi_off(); } } else { ESP_LOGE(TAG, "Failed to read from SHT31 sensor"); } - vTaskDelay(10000 / portTICK_RATE_MS); + vTaskDelay(60000 / portTICK_RATE_MS); } diff --git a/firmware/main/src/wifi.c b/firmware/main/src/wifi.c index b446d33..78dc563 100644 --- a/firmware/main/src/wifi.c +++ b/firmware/main/src/wifi.c @@ -3,16 +3,38 @@ #include #include //#include +//#include "esp_netif.h" #include "functions.h" #include "wifi.h" #include "leds.h" static const char * TAG = "wifi.c"; -esp_err_t wifi_init(void) { +esp_err_t wifi_init() { + // Init IP Stack tcpip_adapter_init(); ESP_ERROR_CHECK(esp_event_loop_create_default()); + return ESP_OK; +} + +static bool wait_for_connected() { + tcpip_adapter_ip_info_t ip_info; + unsigned repeats = 10; + for(unsigned i = 0; i < repeats; ++i) + { + if ( tcpip_adapter_get_ip_info( TCPIP_ADAPTER_IF_STA, &ip_info ) == ESP_OK && ip_info.ip.addr != 0 ) { + ESP_LOGI(TAG, "IP Address: " IPSTR, IP2STR(&ip_info.ip)); + return ESP_OK; + } + vTaskDelay(1000 / portTICK_RATE_MS); + } + ESP_LOGE(TAG, "Timed out waiting for ip address from dhcp server."); + return ESP_FAIL; +} + +// Function to turn on WiFi +esp_err_t wifi_on() { wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); ESP_ERROR_CHECK(esp_wifi_init(&cfg)); @@ -34,18 +56,20 @@ esp_err_t wifi_init(void) { //ESP_ERROR_CHECK(esp_wifi_set_ps(WIFI_PS_MIN_MODEM)); ESP_ERROR_CHECK(esp_wifi_set_ps(WIFI_PS_MAX_MODEM)); - return ESP_OK; -} - -// Function to turn on WiFi -esp_err_t wifi_on() { ESP_LOGI(TAG, "Turning WiFi ON..."); esp_wifi_start(); // Start WiFi ESP_LOGI(TAG, "WiFi is ON and connecting..."); esp_wifi_connect(); - ESP_LOGI(TAG, "WiFi is ON and connected to AP."); led1_on(); - return ESP_OK; + ESP_LOGI(TAG, "WiFi is ON and connected to AP."); + if (wait_for_connected() == ESP_OK) { + led2_on(); + return ESP_OK; + } + else { + wifi_off(); + return ESP_FAIL; + } } // Function to turn off WiFi @@ -54,7 +78,9 @@ esp_err_t wifi_off() { esp_wifi_disconnect(); ESP_LOGI(TAG, "WiFi disconnected. Turning WiFi OFF..."); esp_wifi_stop(); // Stop WiFi - ESP_LOGI(TAG, "WiFi is OFF."); + esp_wifi_deinit(); led1_off(); + led2_off(); + ESP_LOGI(TAG, "WiFi is OFF."); return ESP_OK; }