ESP32-EArduino开发板配有一个基于WS2812的RGB灯珠,其原理图如图1所示,从中我们可以知道它是由IO5来控制的。 图1 WS2812控制原理图 要在ArduinoIDE中编写程序,需添加第三方的FastLED库,其添加与使用方法为: 1.选取“项目”菜单下“加载库”的“管理库”选项,在库管理器的搜索栏,输入“FastLED”; 2. 在出现搜索结果后,点击“安装”按钮; 3. 在完成安装后,即可见到“INSTALLED”的提示,然后点击“关闭”以返回原界面; 图2 添加FastLED库 在添加FastLED库之后,即可编写相应的控制程序,其操作方法为: 1. 选取“文件”菜单下的“新建”选项,生成一个新文件; 2. 在“项目”菜单的“加载库”下可见到“FastLED”选项,点击它即可在新文件中添加FastLED的头文件; 3. 录入下列程序: #defineNUM_LEDS 1 #defineDATA_PIN 5 CRGBleds[NUM_LEDS]; void setup() { FastLED.addLeds<NEOPIXEL,DATA_PIN>(leds, NUM_LEDS); // GRBordering is assumed } void loop() { //灯珠显示红色 leds[0] = CRGB::Red; FastLED.show(); delay(500); // 灯珠显示绿色 leds[0] = CRGB::Green; FastLED.show(); delay(500); // 灯珠显示蓝色 leds[0] = CRGB::Blue; FastLED.show(); delay(500); } 4. 编译并上传程序,则其运行效果如图4所示。 图3 完成编译与上传 图4运行效果(红绿蓝3色循环点亮) 若使用图5所示的WS2812彩色灯带或灯环,则可以制作出更加丰富的显示效果。 图5 WS2812灯带与灯环 通过程序,可以控制灯环中的指定位置的若干灯以不同的色彩点亮,实现图6所示效果的程序为: #include"FastLED.h" #defineNUM_LEDS 12 // LED灯珠数量 #define LED_DTA4 // Arduino输出控制信号引脚 #defineLED_TYPE WS2812 // LED灯带型号 #defineCOLOR_ORDER GRB // RGB灯珠中红色、绿色、蓝色LED的排列顺序 CRGBleds[NUM_LEDS]; uint8_tmax_bright = 128; void setup() { delay(500); pinMode(LED_BUILTIN, OUTPUT); LEDS.addLeds<LED_TYPE, LED_DT,COLOR_ORDER>(leds, NUM_LEDS); // 初始化光带 FastLED.setBrightness(max_bright); // 设置光带亮度 } void loop() { fill_solid(leds,3,CRGB(255,0,0)); FastLED.show(); fill_solid(leds+3,6,CRGB(0,255,0)); FastLED.show(); fill_solid(leds+9,3,CRGB(0,0,255)); FastLED.show(); delay(25); } 图6 颜色设置效果 (3红6绿3蓝效果) 实现图7所示彩虹渐变效果的程序为: #include"FastLED.h" #defineNUM_LEDS 12 #defineDATA_PIN A4 CRGBleds[NUM_LEDS]; uint8_tbeginHue = 0; uint8_tdeltaHue = 20; void setup() { delay(200); pinMode(LED_BUILTIN, OUTPUT); LEDS.addLeds<LED_TYPE, LED_DT,COLOR_ORDER>(leds, NUM_LEDS); // 初始化光带 FastLED.setBrightness(max_bright); // 设置光带亮度 } void loop() { fill_rainbow(leds, NUM_LEDS, beginHue,deltaHue); FastLED.show(); delay(25); digitalWrite(LED_BUILTIN, HIGH); delay(500); digitalWrite(LED_BUILTIN, LOW); delay(500); } 图7彩虹渐变效果
|