KY-016 RGB Full Color LED Module

View on Amazon
Overview
About KY-016 RGB Full Color LED Module
The KY-016 RGB Full Color LED Module features a 5mm RGB LED with a common cathode configuration, allowing it to display up to 16.7 million colors by adjusting the intensity of its red, green, and blue components through PWM (Pulse Width Modulation). Each color channel operates at a forward current of 20mA, with forward voltages of 1.8V for red and 2.8V for green and blue. This module is ideal for projects requiring colorful visual indicators, such as mood lighting, status displays, or decorative effects.
Get Your KY-016
Prices are subject to change. We earn from qualifying purchases as an Amazon Associate.
KY-016 Specifications
Complete technical specification details for KY-016 RGB Full Color LED Module
📊 Technical Parameters
KY-016 Pinout
The **KY-016** is a 4-pin RGB LED module with common cathode configuration:
Visual Pinout Diagram

Pin Types
Quick Tips
**Interface**: PWM control for each color channel,🌈 **Colors**: 16.7 million colors via RGB mixing
**Configuration**: Common cathode (GND shared),⚡ **Current**: 20mA per channel
**Resistors**: R=180Ω (1.8V), G=100Ω (2.8V), B=100Ω (2.8V),🎯 **Applications**: Mood lighting, status indicators, decorative effects, color displays
Pin Descriptions
| Pin Name | Type | Description | Notes |
|---|---|---|---|
1 Pin 1 (GND) | Power | Common cathode (ground) | Connect to GND |
2 Pin 2 (R) | Communication | Red LED anode | 1.8V forward voltage, 180Ω resistor |
3 Pin 3 (G) | Communication | Green LED anode | 2.8V forward voltage, 100Ω resistor |
4 Pin 4 (B) | Communication | Blue LED anode | 2.8V forward voltage, 100Ω resistor |
Wiring KY-016 to ESP32
To interface the **KY-016** with an **ESP32** for RGB color control:
Visual Wiring Diagram

Connection Status
Protocol
Pin Connections
| KY-016 Pin | Connection | ESP32 Pin | Description |
|---|---|---|---|
1 Pin 1 (GND) Required | GND | Common ground | |
2 Pin 2 (R) Required | GPIO25 | Red channel (via 180Ω resistor) | |
3 Pin 3 (G) Required | GPIO26 | Green channel (via 100Ω resistor) | |
4 Pin 4 (B) Required | GPIO27 | Blue channel (via 100Ω resistor) |
**Current-Limiting Resistors**: Red=180Ω, Green/Blue=100Ω (required for LED protection)
**PWM Control**: Use PWM on all three GPIO pins for color mixing
**GPIO Selection**: Use any PWM-capable GPIOs, shown pins are examples
**3.3V Logic**: ESP32's 3.3V output is sufficient with proper resistors
KY-016 Troubleshooting
Common issues and solutions to help you get your sensor working
Common Issues
Issue: The LED does not turn on.
Solutions:
- Verify all connections are secure and correctly placed.
- Ensure appropriate current-limiting resistors are used for each LED channel.
- Check that the GPIO pins are correctly configured as outputs in the code.
Issue: The LED displays unexpected colors.
Solutions:
- Confirm that the PWM signals are correctly set for each color channel.
- Ensure that the correct GPIO pins are assigned to the respective LED colors in the code.
- Check for any short circuits or incorrect wiring between the LED pins.
Debugging Tips
Use the Serial Monitor to check for error messages and verify the sensor's output. Add debug prints in your code to track the sensor's state.
Use a multimeter to verify voltage levels and check for continuity in your connections. Ensure the power supply is stable and within the sensor's requirements.
Additional Resources
KY-016 Programming Examples
Ready-to-use code examples for different platforms and frameworks
#define RED_PIN 10
#define GREEN_PIN 11
#define BLUE_PIN 12
void setup() {
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
}
void loop() {
analogWrite(RED_PIN, 255); // Red at full brightness
analogWrite(GREEN_PIN, 0); // Green off
analogWrite(BLUE_PIN, 0); // Blue off
delay(1000);
analogWrite(RED_PIN, 0);
analogWrite(GREEN_PIN, 255); // Green at full brightness
analogWrite(BLUE_PIN, 0);
delay(1000);
analogWrite(RED_PIN, 0);
analogWrite(GREEN_PIN, 0);
analogWrite(BLUE_PIN, 255); // Blue at full brightness
delay(1000);
}This Arduino code sets up the KY-016 RGB LED module by defining the pins connected to the red, green, and blue LEDs. In the loop, it cycles through red, green, and blue colors, each displayed for one second.
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/ledc.h"
#define RED_PIN GPIO_NUM_25
#define GREEN_PIN GPIO_NUM_26
#define BLUE_PIN GPIO_NUM_27
#define LEDC_TIMER LEDC_TIMER_0
#define LEDC_MODE LEDC_HIGH_SPEED_MODE
#define LEDC_CHANNEL_R LEDC_CHANNEL_0
#define LEDC_CHANNEL_G LEDC_CHANNEL_1
#define LEDC_CHANNEL_B LEDC_CHANNEL_2
void configure_led_pwm(gpio_num_t pin, ledc_channel_t channel) {
ledc_timer_config_t ledc_timer = {
.speed_mode = LEDC_MODE,
.timer_num = LEDC_TIMER,
.duty_resolution = LEDC_TIMER_8_BIT,
.freq_hz = 5000,
.clk_cfg = LEDC_AUTO_CLK
};
ledc_timer_config(&ledc_timer);
ledc_channel_config_t ledc_channel = {
.gpio_num = pin,
.speed_mode = LEDC_MODE,
.channel = channel,
.intr_type = LEDC_INTR_DISABLE,
.timer_sel = LEDC_TIMER,
.duty = 0,
.hpoint = 0
};
ledc_channel_config(&ledc_channel);
}
void set_color(uint32_t red, uint32_t green, uint32_t blue) {
ledc_set_duty(LEDC_MODE, LEDC_CHANNEL_R, red);
ledc_update_duty(LEDC_MODE, LEDC_CHANNEL_R);
ledc_set_duty(LEDC_MODE, LEDC_CHANNEL_G, green);
ledc_update_duty(LEDC_MODE, LEDC_CHANNEL_G);
ledc_set_duty(LEDC_MODE, LEDC_CHANNEL_B, blue);
ledc_update_duty(LEDC_MODE, LEDC_CHANNEL_B);
}
void app_main(void) {
configure_led_pwm(RED_PIN, LEDC_CHANNEL_R);
configure_led_pwm(GREEN_PIN, LEDC_CHANNEL_G);
configure_led_pwm(BLUE_PIN, LEDC_CHANNEL_B);
while (1) {
set_color(255, 0, 0); // Red
vTaskDelay(pdMS_TO_TICKS(1000));
set_color(0, 255, 0); // Green
vTaskDelay(pdMS_TO_TICKS(1000));
set_color(0, 0, 255); // Blue
vTaskDelay(pdMS_TO_TICKS(1000));
}
}This ESP-IDF code configures the KY-016 RGB LED module using PWM on GPIO25 (red), GPIO26 (green), and GPIO27 (blue). The configure_led_pwm() function sets up the PWM channels for each LED, while set_color() adjusts the brightness of each color. The LED cycles through red, green, and blue every second.
output:
- platform: ledc
pin: GPIO25
id: red_led
- platform: ledc
pin: GPIO26
id: green_led
- platform: ledc
pin: GPIO27
id: blue_led
light:
- platform: rgb
name: "KY-016 RGB LED"
red: red_led
green: green_led
blue: blue_led
gamma_correct: 2.8This ESPHome configuration sets up the KY-016 RGB LED module using PWM on GPIO25, GPIO26, and GPIO27. The LED's color can be adjusted through Home Assistant, allowing full RGB control.
platformio.ini
[env:esp32]
platform = espressif32
board = esp32dev
framework = arduinomain.cpp
#include <Arduino.h>
#define RED_PIN 25
#define GREEN_PIN 26
#define BLUE_PIN 27
void setup() {
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
}
void loop() {
analogWrite(RED_PIN, 255);
analogWrite(GREEN_PIN, 0);
analogWrite(BLUE_PIN, 0);
delay(1000);
analogWrite(RED_PIN, 0);
analogWrite(GREEN_PIN, 255);
analogWrite(BLUE_PIN, 0);
delay(1000);
analogWrite(RED_PIN, 0);
analogWrite(GREEN_PIN, 0);
analogWrite(BLUE_PIN, 255);
delay(1000);
}This PlatformIO code configures the KY-016 RGB LED module on GPIO25, GPIO26, and GPIO27. The LED cycles through red, green, and blue every second using PWM signals.
import machine
import time
RED_PIN = machine.PWM(machine.Pin(25), freq=1000)
GREEN_PIN = machine.PWM(machine.Pin(26), freq=1000)
BLUE_PIN = machine.PWM(machine.Pin(27), freq=1000)
def set_color(r, g, b):
RED_PIN.duty(r)
GREEN_PIN.duty(g)
BLUE_PIN.duty(b)
while True:
set_color(1023, 0, 0) # Red
time.sleep(1)
set_color(0, 1023, 0) # Green
time.sleep(1)
set_color(0, 0, 1023) # Blue
time.sleep(1)This MicroPython script configures GPIO25, GPIO26, and GPIO27 as PWM outputs for the KY-016 RGB LED module. The set_color() function controls the brightness of each LED channel, cycling through red, green, and blue every second.
Wrapping Up KY-016
The ESP32 KY-016 RGB Full Color LED Module is a powerful KY-0xx module sensor that offers excellent performance and reliability. With support for multiple development platforms including Arduino, ESP-IDF, ESPHome, PlatformIO, and MicroPython, it's a versatile choice for your IoT projects.
Best Practices
For optimal performance, ensure proper wiring and follow the recommended configuration for your chosen development platform.
Safety First
Always verify power supply requirements and pin connections before powering up your project to avoid potential damage.
Ready to Start Building?
Now that you have all the information you need, it's time to integrate the KY-016 into your ESP32 project and bring your ideas to life!








