Skip to content

Commit db24130

Browse files
Merge branch 'fix/lightbulb_power' into 'master'
fix(lightbulb): Fixed the issue of low power output in CCT mode See merge request ae_group/esp-iot-solution!1130
2 parents 23c164e + 0f802cd commit db24130

File tree

4 files changed

+21
-21
lines changed

4 files changed

+21
-21
lines changed

components/led/lightbulb_driver/CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# ChangeLog
22

3+
## v1.3.3 - 2024-11-07
4+
5+
### Bug Fixes:
6+
7+
* Fixed the issue of low power output in CCT mode.
8+
39
## v1.3.2 - 2024-09-19
410

511
### Enhancements:

components/led/lightbulb_driver/idf_component.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
version: "1.3.2"
1+
version: "1.3.3"
22
description: Provide multiple dimming driver solutions to easily build lightbulb applications
33
url: https://github.com/espressif/esp-iot-solution/tree/master/components/led/lightbulb_driver
44
dependencies:

components/led/lightbulb_driver/src/lightbulb.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -300,43 +300,43 @@ static uint8_t precise_kelvin_convert_to_percentage(uint16_t kelvin)
300300
*/
301301
static void cct_and_brightness_convert_and_power_limit(lightbulb_led_beads_comb_t led_beads, float multiple, uint8_t cct, uint8_t brightness, uint16_t white_value[])
302302
{
303+
uint16_t max_value = 0;
304+
hal_get_driver_feature(QUERY_MAX_INPUT_VALUE, &max_value);
305+
303306
if (led_beads == LED_BEADS_1CH_C || led_beads == LED_BEADS_4CH_RGBC || led_beads == LED_BEADS_4CH_RGBCC) {
304-
uint16_t value = brightness * 255 / 100;
307+
uint16_t value = brightness / 100.0 * max_value;
305308
hal_get_linear_table_value((uint8_t)value, &white_value[3]);
306309
if (led_beads == LED_BEADS_4CH_RGBCC) {
307310
hal_get_linear_table_value((uint8_t)value, &white_value[4]);
308311
}
309312
} else if (led_beads == LED_BEADS_1CH_W || led_beads == LED_BEADS_4CH_RGBW || led_beads == LED_BEADS_4CH_RGBWW) {
310-
uint16_t value = brightness * 255 / 100;
311-
hal_get_linear_table_value((uint8_t)value, &white_value[4]);
313+
uint16_t value = brightness / 100.0 * max_value;
314+
hal_get_linear_table_value(value, &white_value[4]);
315+
312316
if (led_beads == LED_BEADS_4CH_RGBWW) {
313317
hal_get_linear_table_value((uint8_t)value, &white_value[3]);
314318
}
315319
} else if ((led_beads == LED_BEADS_2CH_CW || led_beads == LED_BEADS_5CH_RGBCW) && IS_WHITE_OUTPUT_HARDWARE_MIXED()) {
316-
uint16_t value1 = cct * 255 / 100;
317-
uint16_t value2 = brightness * 255 / 100;
320+
uint16_t value1 = cct / 100.0 * max_value;
321+
uint16_t value2 = brightness / 100.0 * max_value;
318322
hal_get_linear_table_value((uint8_t)value1, &white_value[3]);
319323
hal_get_linear_table_value((uint8_t)value2, &white_value[4]);
320324
} else if (led_beads == LED_BEADS_2CH_CW || ((led_beads == LED_BEADS_5CH_RGBCW) && (s_lb_obj->cap.enable_precise_cct_control == false))) {
321-
uint16_t max_value;
322325
float max_power;
323326
float _c = cct / 100.0;
324327
float _w = (100 - cct) / 100.0;
325-
326-
hal_get_driver_feature(QUERY_MAX_INPUT_VALUE, &max_value);
327328
float baseline = MAX(_c, _w);
329+
328330
max_power = MIN(max_value * multiple, max_value / baseline);
329331
_c = max_power * _c * (brightness / 100.0);
330332
_w = max_power * _w * (brightness / 100.0);
331333
hal_get_linear_table_value((uint16_t)_c, &white_value[3]);
332334
hal_get_linear_table_value((uint16_t)_w, &white_value[4]);
333335
} else {
334-
uint16_t max_value;
335336
float max_power;
336337
lightbulb_cct_mapping_data_t data = search_mapping_cct_data(cct);
337338
ESP_LOGD(TAG, "%f, %f, %f, %f, %f", data.rgbcw[0], data.rgbcw[1], data.rgbcw[2], data.rgbcw[3], data.rgbcw[4]);
338339

339-
hal_get_driver_feature(QUERY_MAX_INPUT_VALUE, &max_value);
340340
float baseline = MAX(data.rgbcw[0], data.rgbcw[1]);
341341
baseline = MAX(baseline, data.rgbcw[2]);
342342
baseline = MAX(baseline, data.rgbcw[3]);

examples/lighting/lightbulb/main/lightbulb_example_main.c

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,10 @@
1313
const char *TAG = "lightbulb demo";
1414

1515
//Based on PWM test 5ch (rgbcw)
16-
#define TEST_PWM_RGBCW_LIGHTBULB 1
1716
#define PWM_C_GPIO 5
1817
#define PWM_W_GPIO 4
1918

2019
//Based on BP5758D test 5ch (rgbww)
21-
#define TEST_IIC_RGBWW_LIGHTBULB 1
2220
#define MIX_TABLE_SIZE 15
2321
lightbulb_cct_mapping_data_t table[MIX_TABLE_SIZE] = {
2422
{.cct_kelvin = 2200, .cct_percentage = 0, .rgbcw = {0.547, 0.0, 0.0, 0.0, 0.453}},
@@ -102,8 +100,8 @@ void app_main(void)
102100
.type = DRIVER_BP57x8D,
103101
.driver_conf.bp57x8d.freq_khz = 300,
104102
.driver_conf.bp57x8d.enable_iic_queue = true,
105-
.driver_conf.bp57x8d.iic_clk = 3,
106-
.driver_conf.bp57x8d.iic_sda = 7,
103+
.driver_conf.bp57x8d.iic_clk = CONFIG_BP5758D_IIC_CLK_GPIO,
104+
.driver_conf.bp57x8d.iic_sda = CONFIG_BP5758D_IIC_SDA_GPIO,
107105
.driver_conf.bp57x8d.current = {10, 10, 10, 30, 30},
108106
#endif
109107
// 2. Configure the drive capability
@@ -114,11 +112,7 @@ void app_main(void)
114112
#if CONFIG_LIGHTBULB_DEMO_DRIVER_SELECT_WS2812
115113
.capability.led_beads = LED_BEADS_3CH_RGB,
116114
#elif CONFIG_LIGHTBULB_DEMO_DRIVER_SELECT_BP5758D
117-
#if TEST_IIC_RGBWW_LIGHTBULB
118115
.capability.led_beads = LED_BEADS_5CH_RGBCW,
119-
#else
120-
.capability.led_beads = LED_BEADS_5CH_RGBCW,
121-
#endif
122116
#elif CONFIG_LIGHTBULB_DEMO_DRIVER_SELECT_PWM && TEST_PWM_RGBCW_LIGHTBULB
123117
.capability.led_beads = LED_BEADS_5CH_RGBCW,
124118
#else
@@ -135,8 +129,8 @@ void app_main(void)
135129
.io_conf.pwm_io.warm_brightness = PWM_W_GPIO,
136130
#endif
137131
#ifdef CONFIG_LIGHTBULB_DEMO_DRIVER_SELECT_BP5758D
138-
.io_conf.iic_io.red = OUT1,
139-
.io_conf.iic_io.green = OUT2,
132+
.io_conf.iic_io.red = OUT2,
133+
.io_conf.iic_io.green = OUT1,
140134
.io_conf.iic_io.blue = OUT3,
141135
.io_conf.iic_io.cold_white = OUT5,
142136
.io_conf.iic_io.warm_yellow = OUT4,

0 commit comments

Comments
 (0)