63 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include <driver/gpio.h>
 | |
| #include "esp_log.h"
 | |
| 
 | |
| #include "relays.h"
 | |
| #include "constants.h"
 | |
| 
 | |
| static const char *TAG = "relays";
 | |
| 
 | |
| /**
 | |
|  * Device relays GPIO ids
 | |
|  */
 | |
| static int DEVICE_GPIO_IDS[4] = {4, 14, 15, 2};
 | |
| 
 | |
| int relays_count()
 | |
| {
 | |
|     return sizeof(DEVICE_GPIO_IDS) / sizeof(int);
 | |
| }
 | |
| 
 | |
| void relays_setup()
 | |
| {
 | |
|     int pin_bit_mask = 0;
 | |
|     for (size_t i = 0; i < relays_count(); i++)
 | |
|     {
 | |
|         pin_bit_mask |= 1ULL << DEVICE_GPIO_IDS[i];
 | |
|     }
 | |
| 
 | |
|     // zero-initialize the config structure.
 | |
|     gpio_config_t io_conf = {};
 | |
|     // disable interrupt
 | |
|     io_conf.intr_type = GPIO_INTR_DISABLE;
 | |
|     // set as output mode
 | |
|     io_conf.mode = GPIO_MODE_OUTPUT;
 | |
|     // bit mask of the pins that you want to set,e.g.GPIO18/19
 | |
|     io_conf.pin_bit_mask = pin_bit_mask;
 | |
|     // disable pull-down mode
 | |
|     io_conf.pull_down_en = 0;
 | |
|     // disable pull-up mode
 | |
|     io_conf.pull_up_en = 0;
 | |
|     // configure GPIO with the given settings
 | |
|     gpio_config(&io_conf);
 | |
| }
 | |
| 
 | |
| void relays_turn_off_all()
 | |
| {
 | |
|     ESP_LOGI(TAG, "Turning off all relays...");
 | |
| 
 | |
|     for (size_t i = 0; i < relays_count(); i++)
 | |
|     {
 | |
|         relays_set(i, false);
 | |
|     }
 | |
| }
 | |
| 
 | |
| void relays_set(int number, bool is_on)
 | |
| {
 | |
|     size_t gpio_id = DEVICE_GPIO_IDS[number];
 | |
|     ESP_LOGI(TAG, "Set relay %d (gpio %d) to %s", number, gpio_id, is_on ? "on" : "off");
 | |
| 
 | |
|     int res = gpio_set_level(gpio_id, is_on ? 0 : 1);
 | |
|     if (res != ESP_OK)
 | |
|     {
 | |
|         ESP_LOGE(TAG, "Failed to toggle GPIO %d : %d", gpio_id, res);
 | |
|     }
 | |
| } |