Sfoglia il codice sorgente

Relay out is working.

Thomas Chef 3 anni fa
parent
commit
722b24c35a
5 ha cambiato i file con 62 aggiunte e 2 eliminazioni
  1. 1 0
      main/CMakeLists.txt
  2. 3 2
      main/config.h
  3. 5 0
      main/main.c
  4. 43 0
      main/relay_control.c
  5. 10 0
      main/relay_control.h

+ 1 - 0
main/CMakeLists.txt

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

+ 3 - 2
main/config.h

@@ -5,12 +5,13 @@
 
 #define SW_VERSION "1.0"
 
-#define PULSES_PER_KWH      1000
-
 // These defines configures which code to generate (to save download time during development)
 //#define WIFI_ENABLED
 //#define MQTT_ENABLED
 //#define ENABLE_SEND
+#define ENABLE_RELAY_OUTPUT 
+
+#define VVB_RELAY_OUTPUT_IO      GPIO_NUM_22   // Output GPIO of a relay control of VVB
 
 
 

+ 5 - 0
main/main.c

@@ -5,6 +5,7 @@
 #include "wifi.h"
 #include "send.h"
 #include "mqtt.h"
+#include "relay_control.h"
 
 
 // Chip info:
@@ -16,6 +17,10 @@ void app_main(void)
 {
     ESP_LOGI("MAIN", "HomeEnergyMeter ESP32. Core:%d",xPortGetCoreID());
 
+#ifdef ENABLE_RELAY_OUTPUT
+    relay_control_init();
+#endif
+
 #ifdef WIFI_ENABLED
     initWifi();             // Init WIFI
 #endif

+ 43 - 0
main/relay_control.c

@@ -0,0 +1,43 @@
+#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 "relay_control.h"
+
+#ifdef ENABLE_RELAY_OUTPUT
+
+void relayControlTask(void *pvParameters) {
+
+    ESP_LOGI("RELAY", "relayControlTask starting. Core:%d",xPortGetCoreID());
+
+    uint8_t relayState = 0;
+
+    while( 1 ) {
+        
+        relayState = !relayState;
+        ESP_LOGI("RELAY", "Change relay state: %u",relayState);
+        gpio_set_level(VVB_RELAY_OUTPUT_IO, relayState);
+
+        vTaskDelay(5000 / portTICK_PERIOD_MS);
+    }
+
+}
+
+
+
+
+void relay_control_init()
+{
+    ESP_LOGI("RELAY", "relay_control_init()");
+
+    gpio_reset_pin(VVB_RELAY_OUTPUT_IO);
+    gpio_set_direction(VVB_RELAY_OUTPUT_IO, GPIO_MODE_OUTPUT);
+
+    xTaskCreate(relayControlTask, "relayControlTask", 1024*10, NULL, 2, NULL);
+}
+
+#endif

+ 10 - 0
main/relay_control.h

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