1
0
Quellcode durchsuchen

Its starting to work on HW

Thomas Chef vor 2 Jahren
Ursprung
Commit
911f5e2365
8 geänderte Dateien mit 106 neuen und 28 gelöschten Zeilen
  1. 1 0
      main/CMakeLists.txt
  2. 6 2
      main/config.h
  3. 10 25
      main/http_client.c
  4. 10 0
      main/http_client.h
  5. 55 0
      main/kWhCounter.c
  6. 12 0
      main/kWhCounter.h
  7. 11 0
      main/main.c
  8. 1 1
      main/wifi.c

+ 1 - 0
main/CMakeLists.txt

@@ -4,6 +4,7 @@ idf_component_register(SRCS
 "wifi.c" "mqtt.c"
 "send.c"
 "relay_control.c"
+"kWhCounter.c"
 
 
 

+ 6 - 2
main/config.h

@@ -6,13 +6,17 @@
 #define SW_VERSION "1.0"
 
 // These defines configures which code to generate (to save download time during development)
-//#define WIFI_ENABLED
+#define WIFI_ENABLED
+#define HTTP_ENABLED
 //#define MQTT_ENABLED
 //#define ENABLE_SEND
-#define ENABLE_RELAY_OUTPUT 
+#define ENABLE_RELAY_OUTPUT
+#define ENABLE_KWH_COUNTER
 
 #define VVB_RELAY_OUTPUT_IO      GPIO_NUM_22   // Output GPIO of a relay control of VVB
 
+#define KWH_COUNTER_INPUT_IO      GPIO_NUM_16   // Input
+
 
 
 

+ 10 - 25
main/http_client.c

@@ -67,37 +67,29 @@ esp_err_t _http_event_handler(esp_http_client_event_t *evt)
 static void http_rest_with_url(void *pvParameters)
 {
     esp_http_client_config_t config = {
-        .url = "http://192.168.1.110/electrical/register_sensor_data.php",
+        .url = "http://192.168.1.110/electrical/system/isBoilerOn.php",
         .event_handler = _http_event_handler,
     };
     esp_http_client_handle_t client = esp_http_client_init(&config);
 
-    
+    //char post_data[10];
+    //sprintf(post_data,"",);
 
-    sensor_data *data = (sensor_data *)pvParameters;
-
-    char post_data[4096];
-    sprintf(post_data,"dataStr=%.4f&bigCnt=%u&cnt=%d",
-                        data->energyData_kWh, data->bigCnt, data->cnt
-                        );
-
-    //printf("\n%s\n",post_data);
-
-    esp_http_client_set_method(client, HTTP_METHOD_POST);
-    esp_http_client_set_post_field(client, post_data, strlen(post_data));
+    esp_http_client_set_method(client, HTTP_METHOD_GET);
+    //esp_http_client_set_post_field(client, post_data, strlen(post_data));
     esp_err_t err = esp_http_client_perform(client);
     if (err == ESP_OK) {
-        ESP_LOGI(TAG, "HTTP POST Status = %d, content_length = %d",
+        ESP_LOGI(TAG, "HTTP GET Status = %d, content_length = %d",
                 esp_http_client_get_status_code(client),
                 esp_http_client_get_content_length(client));
     } else {
-        ESP_LOGE(TAG, "HTTP POST request failed: %s", esp_err_to_name(err));
+        ESP_LOGE(TAG, "HTTP GET request failed: %s", esp_err_to_name(err));
     }
 
     esp_http_client_cleanup(client);
 }
 
-static void http_send_data_task(void *pvParameters)
+static void http_get_data_task(void *pvParameters)
 {
 
     http_rest_with_url(pvParameters);
@@ -105,16 +97,9 @@ static void http_send_data_task(void *pvParameters)
     vTaskDelete(NULL);
 }
 
-void sendHTTPMessage(const double inData, const uint32_t bigCnt, const int32_t cnt) {
-
-    static sensor_data data;
-
-    data.energyData_kWh = inData;
-    data.bigCnt = bigCnt;
-    data.cnt = cnt;
-    void *const ptr = (void *const)&data;
+void sendHTTPMessage() {
 
-    if( commIsUpAndRunning == 1 ) xTaskCreate(&http_send_data_task, "send_data_task", 8192, ptr, 5, NULL);
+    if( commIsUpAndRunning == 1 ) xTaskCreate(&http_get_data_task, "get_data_task", 8192, NULL, 5, NULL);
 }
 
 #endif

+ 10 - 0
main/http_client.h

@@ -0,0 +1,10 @@
+#ifndef __HTTP_H__
+#define __HTTP_H__
+
+#include "config.h"
+
+void sendHTTPMessage();
+
+
+
+#endif

+ 55 - 0
main/kWhCounter.c

@@ -0,0 +1,55 @@
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+#include "freertos/queue.h"
+#include "driver/ledc.h"
+#include "driver/pcnt.h"
+#include "esp_attr.h"
+#include "esp_log.h"
+
+#include "kWhCounter.h"
+
+#ifdef ENABLE_KWH_COUNTER
+
+uint32_t kWh_cnt = 0;
+
+void counterControlTask(void *pvParameters) {
+
+    ESP_LOGI("kWhCounter", "counterControlTask starting. Core:%d",xPortGetCoreID());
+
+    uint32_t state = 0;
+
+    TickType_t vLastWakeTime = xTaskGetTickCount();
+    const TickType_t xFreq = 100 / portTICK_PERIOD_MS;
+
+    while( 1 ) {
+
+        for(uint8_t i=10; i>0; i-- ) {
+
+            vTaskDelayUntil( &vLastWakeTime, xFreq );
+
+            if( gpio_get_level(KWH_COUNTER_INPUT_IO) == 1 ) state++;
+            vTaskDelay(100 / portTICK_PERIOD_MS);
+        }
+
+        if( state > 0 ) kWh_cnt++;
+
+        ESP_LOGI("kWhCounter", "Measure. Pin: %u  Tot:%u", state, kWh_cnt);
+
+        state = 0;
+    }
+
+}
+
+
+
+
+void kWhCounter_init()
+{
+    ESP_LOGI("kWhCounter", "kWhCounter_init()");
+
+    gpio_set_direction(KWH_COUNTER_INPUT_IO, GPIO_MODE_INPUT);
+
+    xTaskCreate(counterControlTask, "counterControlTask", 1024*10, NULL, 2, NULL);
+}
+
+#endif

+ 12 - 0
main/kWhCounter.h

@@ -0,0 +1,12 @@
+#ifndef __KWH_CONUTER_H__
+#define __KWH_CONUTER_H__
+
+#include "config.h"
+
+
+void kWhCounter_init(void);
+
+extern uint32_t kWh_cnt;
+
+
+#endif

+ 11 - 0
main/main.c

@@ -6,6 +6,8 @@
 #include "send.h"
 #include "mqtt.h"
 #include "relay_control.h"
+#include "kWhCounter.h"
+#include "http_client.h"
 
 
 // Chip info:
@@ -21,6 +23,10 @@ void app_main(void)
     relay_control_init();
 #endif
 
+#ifdef ENABLE_KWH_COUNTER
+    kWhCounter_init();
+#endif
+
 #ifdef WIFI_ENABLED
     initWifi();             // Init WIFI
 #endif
@@ -34,6 +40,11 @@ void app_main(void)
     initSend();
 #endif
 
+    vTaskDelay(10000 / portTICK_PERIOD_MS);
+    while(1) {
+        sendHTTPMessage();
+        vTaskDelay(30000 / portTICK_PERIOD_MS);
+    }
     vTaskDelete(NULL);
 }
 

+ 1 - 1
main/wifi.c

@@ -99,7 +99,7 @@ static void setupAndConfigureWiFi(void)
     ESP_ERROR_CHECK(esp_wifi_start());
 }
 
-void    wifiTask(void *pvParameters)
+void wifiTask(void *pvParameters)
 {
     ESP_LOGI("WIFI", "wifiTask starting. Core:%d\n",xPortGetCoreID());
     //Initialize NVS