The APA106 is a smart RGB-LED with an integrated controller chip, allowing full-color control via a single digital data line. It supports 24-bit color (8 bits per channel) and can be daisy-chained for addressable lighting effects. Operating at 5V, it’s similar to the WS2812 but offers faster response times and better PWM dimming performance, making it ideal for animations and displays.
| Type: | Addressable RGB LED |
|---|---|
| Controller: | APA106 IC (integrated) |
| Diameter: | 8mm (through-hole) |
| Input voltage: | 5V DC |
| Current consumption: | Up to 60mA (full brightness, all colors) |
| Color resolution: | 8-bit per channel (256 levels) |
| Protocol: | Single-wire, WS2811/WS2812 compatible |
| Data rate: | Up to 800 kbps |
| Refresh rate: | 30 fps (512 LEDs low-speed, 1024 high-speed) |
📄 APA106 RGB-LED datasheet (266 kB)
| Pin No | Pin | Description |
|---|---|---|
| 1 | DIN | "Data In": Data input signal (connects to the microcontroller) |
| 2 | VDD | Power supply from +4.5V to +6V |
| 3 | GND | Ground connection |
| 4 | DO / DOUT | "Data Out": Data output signal (can be connected to DIN of the next APA106 LED) |
The following sketch demonstrates cycling through the primary colors of the LED module one after another.
The Adafruit_NeoPixel library is used to control
the RGB module. Note that when creating the Adafruit_NeoPixel object, the constant
NEO_RGB is used to ensure the correct color order for the LED.
This may vary from module to module and might require experimentation.
#include <Adafruit_NeoPixel.h>
#define LED_PIN 9 // or any other PWM capable pin
#define LED_AMOUNT 2
#define BRIGHTNESS 50 // [1..255]
#define DEMO_DELAY 1000 // in milliseconds
Adafruit_NeoPixel apaLeds = Adafruit_NeoPixel(LED_AMOUNT, LED_PIN, NEO_RGB + NEO_KHZ800);
void setup() {
apaLeds.begin();
}
void loop() {
for (byte i=0; i<LED_AMOUNT; i++) {
apaLeds.setPixelColor(i, apaLeds.Color(0, 0, 0));
apaLeds.show();
delay(DEMO_DELAY);
apaLeds.setPixelColor(i, apaLeds.Color(BRIGHTNESS, 0, 0));
apaLeds.show();
delay(DEMO_DELAY);
apaLeds.setPixelColor(i, apaLeds.Color(0, BRIGHTNESS, 0));
apaLeds.show();
delay(DEMO_DELAY);
apaLeds.setPixelColor(i, apaLeds.Color(0, 0, BRIGHTNESS));
apaLeds.show();
delay(DEMO_DELAY);
}
}