A28. WS2812: RGB 彩色燈條

專案說明

控制一個串了 60 顆 WS2812 的 RGB 彩色燈條,發出紅/綠/藍的呼吸燈效果

此為 LinkIt 7697 BlocklyDuino v3 新功能, 預計於七月初發佈

此積木適用於 WS2812 和 SK6812 的 三色 LED 光條。此類光條最有名的就是 Adafruit 出 NeoPixel 系列,也是本積木底層採用的驅動程式庫

電路圖

  • LinkIt 7697
  • WS2812 彩色燈條
  • 麵包板
  • 杜邦線


(圖片由 Fritzing 產生, LinkIt 7697 fritzing 下載)

WS2812 可以多棵一直串接下去,LinkIt 7697 透過 1-wire (一根 GPIO) 的方式和一串的 WS2812 溝通。每顆 WS2812 拿走收到的第一筆訊號後,把後面的訊號原封不動地傳給一下個 WS2812

下面範例連接方式

  • 5V : 5V 電源供應
  • GND : 接 GND
  • DIN : 接 P2

WS2812 的亮度非常亮,為避免傷害眼睛,建議先用 Default 亮度 30,再依需求慢慢調亮

積木畫布



產生的 Arduino 程式如下

#include <Adafruit_NeoPixel.h>

int i;
int color;
int add;
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(60,2,NEO_GRB + NEO_KHZ800);

void setup()
{
  pixels.begin();
  pixels.setBrightness(30);
  color = 0;
  add = 1;
  Serial.begin(9600);
}

void loop()
{
  for (i = 0; i <= 19; i++) {
    pixels.setPixelColor(i, pixels.Color(color,0,0));
  }
  for (i = 20; i <= 39; i++) {
    pixels.setPixelColor(i, pixels.Color(0,color,0));
  }
  for (i = 40; i <= 59; i++) {
    pixels.setPixelColor(i, pixels.Color(0,0,color));
  }
  pixels.show();

  color = color + add;
  if (color >= 255) {
    add = -1;
  } else if (color <= 0) {
    add = 1;
  }

  Serial.println(color);
  delay(10);
}


RGB LED 燈條輸出效果,1~20 顆顯示紅色呼吸燈,21~40 顆顯示綠色呼吸燈,41~60 顆顯示藍色呼吸燈