Add RGB light as a device.

This commit is contained in:
2025-05-03 11:50:44 +03:00
parent eab859ebe2
commit 1f217020d6
3 changed files with 197 additions and 1 deletions

View File

@@ -12,6 +12,10 @@
#include <esp_log.h>
#include <app_reset.h>
#include <ws2812_led.h>
#include "esp_err.h"
#include "esp_rmaker_core.h"
#include "esp_rmaker_standard_types.h"
#include "app_priv.h"
#define RMT_TX_CHANNEL RMT_CHANNEL_0
@@ -27,6 +31,11 @@
#define WIFI_RESET_BUTTON_TIMEOUT 3
#define FACTORY_RESET_BUTTON_TIMEOUT 10
static uint16_t rgb_hue = RGB_HUE_DEFAULT;
static uint16_t rgb_saturation = RGB_SATURATION_DEFAULT;
static uint16_t rgb_brightness = RGB_BRIGHTNESS_DEFAULT;
static bool rgb_power = RGB_POWER_DEFAULT;
esp_err_t app_driver_set_gpio(const char *name, bool state)
{
if (strcmp(name, "Red") == 0) {
@@ -41,6 +50,62 @@ esp_err_t app_driver_set_gpio(const char *name, bool state)
return ESP_OK;
}
esp_err_t app_light_set_led(uint32_t hue, uint32_t saturation, uint32_t brightness)
{
// Her ne zaman bu bu işlev çağrılırsa, RGB ışığın gücü açılır
if (!rgb_power) {
rgb_power = true;
esp_rmaker_param_update_and_report(
esp_rmaker_device_get_param_by_type(light_device, ESP_RMAKER_PARAM_POWER),
esp_rmaker_bool(rgb_power));
}
return ws2812_led_set_hsv(hue, saturation, brightness);
}
esp_err_t app_light_set_power(bool power)
{
rgb_power = power;
if (power) {
ws2812_led_set_hsv(rgb_hue, rgb_saturation, rgb_brightness);
} else {
ws2812_led_clear();
}
return ESP_OK;
}
esp_err_t app_light_init(void)
{
esp_err_t ret = ws2812_led_init();
if (ret != ESP_OK) {
return ret;
}
if (rgb_power) {
ret = ws2812_led_set_hsv(rgb_hue, rgb_saturation, rgb_brightness);
} else {
ret = ws2812_led_clear();
}
return ESP_OK;
}
esp_err_t app_light_set_brightness(uint16_t brightness)
{
rgb_brightness = brightness;
return app_light_set_led(rgb_hue, rgb_saturation, brightness);
}
esp_err_t app_light_set_hue(uint16_t hue)
{
rgb_hue = hue;
return app_light_set_led(hue, rgb_saturation, rgb_brightness);
}
esp_err_t app_light_set_saturation(uint16_t saturation)
{
rgb_saturation = saturation;
return app_light_set_led(rgb_hue, saturation, rgb_brightness);
}
void app_driver_init()
{
app_reset_button_register(app_reset_button_create(BUTTON_GPIO, BUTTON_ACTIVE_LEVEL),
@@ -58,4 +123,6 @@ void app_driver_init()
gpio_set_level(OUTPUT_GPIO_RED, false);
gpio_set_level(OUTPUT_GPIO_GREEN, false);
gpio_set_level(OUTPUT_GPIO_BLUE, false);
app_light_init();
}