数码之家

 找回密码
 立即注册
搜索
查看: 21441|回复: 16

[Arduino] ESP8266基于Arduino使用FastLED驱动WS2812B灯带

[复制链接]
发表于 2019-12-29 10:34:45 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
* 坛子里也有ESP8266驱动WS2812B的教程,带联网和远程控制:https://www.mydigit.cn/forum.php?mod=viewthread&tid=109563
* 这个帖子只是我的学习心得和思考。

* 要说WS2812B灯珠与ESP8266的共同点,我觉得就是廉价又易用,WS2812B已经广泛在各种使用场景中流行,园林景观灯,点阵屏等。
u=3966991273,3233378348&fm=26&gp=0.jpg

对于单片机爱好者来说,考虑其高性价比和让人眼花缭乱的炫技效果,它也成为囤货必备。

* 回想以前普通的三色LED灯珠,每个点需要三根线独立控制RGB,如果灯珠很多,需要使用串行控制线,电路中可能还要设计大量的串行信号译码芯片,例如74HC959,可能还要设计大量的三极管来增加LED驱动电流,实际上以前的很多点阵屏都是这样做的,大量的外围电路增加了模块的成本和重量,稳定性也降低。

g99640918E4BC47F93BCA56CA0B011BE60.jpg

* WS2812B灯珠与普通的RGB三色灯珠区别在于其每个灯珠中都集成了恒流驱动电路,以及控制电路,使得外围不再需要设计太多的电路,而驱动方式还是和以前采用了74HC959类似的,级联输出,理论上一根串行信号线可以驱动若干个LED灯珠,每个灯珠的颜色,亮灭都是可以单独控制的。在实际生产中,官方说明是一根信号线至少可以级联1024个灯珠,也就是说我们可能只需要一个单片机IO,就可以控制一个32x32像素的全彩点阵屏,而且不需要太多的外围电路。

000-jMAQHTZorJgl.jpg

* 如果使用ESP8266基于Arduino来驱动WS2812B,那就是一种简单又实用的操作了,因为Arduino是特别容易上手的软件开发环境。
* 我首先是玩一个Blink,这是最简单的,如果不想关心WS2812B实际的驱动信号细节,直接使用FastLED这个库即可。
* 先安装FastLED库,工具->管理库->搜索安装FastLED即可。这个库也可以用在其他的Arduino设备上,不一定是ESP8266,它支持的LED也有很多种,WS2812只是其中之一。
微信截图_20191229105220.png

* 当然如果是全新安装的ArduinoIED,得首先装ESP8266支持,可以参考https://arduino-esp8266.readthedocs.io/en/latest/index.html
* 用NodeMCU电路接线如图,VCC,GND,IN即可
微信截图_20191229110756.png



* 实物如下图:
DSC04261.JPG

* 第一个Blink程序:
  1. #include <FastLED.h>

  2. #define LED_PIN     8     //我的LED信号线IN接在8引脚
  3. #define NUM_LEDS    12    //我的灯带一共级联了12颗LED
  4. CRGB leds[NUM_LEDS];

  5. void setup() {
  6.   FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
  7.   FastLED.setBrightness(20);  //可以设置全局亮度,调低亮度不刺眼
  8. }

  9. void loop() {
  10.   // 显示一下粉色
  11.   leds[0] = CRGB::HotPink;
  12.   FastLED.show();
  13.   delay(1000);
  14.   // 显示一下黑色,黑色就是熄灭
  15.   leds[0] = CRGB::Black;
  16.   FastLED.show();
  17.   delay(1000);
  18. }
复制代码
001.gif



* 再来玩个呼吸灯

  1. #include <FastLED.h>

  2. #define LED_PIN     8     //我的LED信号线IN接在8引脚
  3. #define NUM_LEDS    12    //我的灯带一共级联了12颗LED
  4. CRGB leds[NUM_LEDS];

  5. void setup() {
  6.   FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
  7.   FastLED.setBrightness(20);  //可以设置全局亮度,调低亮度不刺眼
  8. }

  9. int h = 0;

  10. void loop() {
  11.   leds[0] = CHSV( h, 255, 255); //用HSV色彩空间,不断改变H即可
  12.   FastLED.show();
  13.   delay(2);
  14.   h = (h + 1) % 255;
  15. }
复制代码
002.gif




* 所有LED一起呼吸
  1. #include <FastLED.h>

  2. #define LED_PIN     8     //我的LED信号线IN接在8引脚
  3. #define NUM_LEDS    12    //我的灯带一共级联了12颗LED
  4. CRGB leds[NUM_LEDS];

  5. void setup() {
  6.   FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
  7.   FastLED.setBrightness(20);  //可以设置全局亮度,调低亮度不刺眼
  8. }

  9. int h = 0;

  10. void loop() {
  11.   for (int i = 0; i < NUM_LEDS; i++) {
  12.     leds[i] = CHSV( h, 255, 255); //用HSV色彩空间,不断改变H即可
  13.     FastLED.show();
  14.   }
  15.   delay(2);
  16.   h = (h + 3) % 255;
  17. }
复制代码
003.gif




* 彩虹呼吸,大家颜色不一样
  1. #include <FastLED.h>

  2. #define LED_PIN     8     //我的LED信号线IN接在8引脚
  3. #define NUM_LEDS    12    //我的灯带一共级联了12颗LED
  4. CRGB leds[NUM_LEDS];

  5. void setup() {
  6.   FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
  7.   FastLED.setBrightness(20);  //可以设置全局亮度,调低亮度不刺眼
  8. }

  9. int h = 0;

  10. void loop() {
  11.   for (int i = 0; i < NUM_LEDS; i++) {
  12.     leds[i] = CHSV( (h + (255 / NUM_LEDS) * i), 255, 255); //用HSV色彩空间,不断改变H即可
  13.     FastLED.show();
  14.   }
  15.   delay(2);
  16.   h = (h + 3) % 255;
  17. }
复制代码
004.gif



* 使用FastLED来操作LED,代码非常精简易懂,再来个简单的流水灯
  1. #include <FastLED.h>

  2. #define LED_PIN     8     //我的LED信号线IN接在8引脚
  3. #define NUM_LEDS    12    //我的灯带一共级联了12颗LED
  4. CRGB leds[NUM_LEDS];

  5. void setup() {
  6.   FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
  7.   FastLED.setBrightness(20);  //可以设置全局亮度,调低亮度不刺眼
  8. }

  9. void loop() {
  10.   for (int i = 0; i < NUM_LEDS; i++) {
  11.     leds[i] = CRGB::Red;
  12.     FastLED.show();
  13.     delay(500);
  14.     leds[i] = CRGB::Black;
  15.   }
  16. }
复制代码

这样就可以让每个LED一次点亮成红色,感觉和普通的单片机操作流水灯没太大区别。
学会了点灯,我们就已经可以帮女主播做一块五彩斑斓的彩灯背景墙了。
当然下一步我计划学习把ESP8266的Wifi连接功能发挥出来,加入配网,接入贝壳物联,通过天猫精灵语音控制灯带切换颜色和呼吸灯模式,毕竟主播一般手上很忙,用语音会方便很多。



ESP8266基于Arduino接入贝壳物联,使用天猫精灵控制WS2812B灯带
https://www.mydigit.cn/forum.php?mod=viewthread&tid=113073




打赏

参与人数 2家元 +90 收起 理由
wenxueroom + 20 so 女主播呢?
家睦 + 70

查看全部打赏

发表于 2019-12-29 11:53:37 | 显示全部楼层
手上有个简易的ESP8266模块,不会玩啊!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-29 13:38:09 | 显示全部楼层
cj8510 发表于 2019-12-29 11:53
手上有个简易的ESP8266模块,不会玩啊!

用Arduino写程序玩的话还是容易上手的
回复 支持 反对

使用道具 举报

发表于 2019-12-29 23:02:46 来自手机浏览器 | 显示全部楼层
通过智能音箱的语音控制这个想法太棒了,支持折腾。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-30 20:45:13 | 显示全部楼层
zengcym 发表于 2019-12-29 23:02
通过智能音箱的语音控制这个想法太棒了,支持折腾。。

可以操作
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-30 22:34:07 | 显示全部楼层
zengcym 发表于 2019-12-29 23:02
通过智能音箱的语音控制这个想法太棒了,支持折腾。。

可以实现了,https://www.mydigit.cn/forum.php?mod=viewthread&tid=113073
回复 支持 反对

使用道具 举报

发表于 2020-1-15 22:55:41 | 显示全部楼层
强大,学习学习:victory:
回复 支持 反对

使用道具 举报

发表于 2020-2-3 00:50:52 | 显示全部楼层
都是大神,我先记号一下备用
回复 支持 反对

使用道具 举报

发表于 2020-2-3 19:09:45 | 显示全部楼层
这灯泡好玩:lol:
回复 支持 反对

使用道具 举报

发表于 2021-3-8 16:46:12 | 显示全部楼层
我的fastled用arduino板很好用,8266为什么编译出错?
回复 支持 反对

使用道具 举报

发表于 2021-3-13 16:16:43 | 显示全部楼层
本帖最后由 fryefryefrye 于 2021-3-13 18:40 编辑
pop手艺人 发表于 2021-3-8 16:46
我的fastled用arduino板很好用,8266为什么编译出错?

FastLed在8266上用就是有问题,几十个灯的时候,控制就不行了。

我用NeoPixel控制336个灯都没有问题。

无标题.jpg
回复 支持 反对

使用道具 举报

发表于 2021-4-15 01:33:01 | 显示全部楼层
pop手艺人 发表于 2021-3-8 16:46
我的fastled用arduino板很好用,8266为什么编译出错?

我也是在编译的时候出错,都不知道什么原因,莫名其妙

打赏

参与人数 1家元 +20 收起 理由
司明 + 20 謝謝分享

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2021-6-28 15:10:56 | 显示全部楼层
楼主在吗,为啥我的8266编译下载都正常,就是只亮一个2812,不受控制
回复 支持 反对

使用道具 举报

发表于 2021-6-30 19:09:26 来自手机浏览器 | 显示全部楼层
WS2812这个灯不知道是输入有电容还是输出有电容,总之灯串的多最后的波形就不对了,我最多串169个灯。而且每个灯的输出对地还接了电阻,第一个灯的输入高电平400ns串十个灯以后可能就变成500ns了,低电平没啥变化,所以串的多了后边的灯就亮的不对了。
回复 支持 反对

使用道具 举报

发表于 2021-8-4 22:46:48 | 显示全部楼层
1065307738 发表于 2021-6-30 19:09
WS2812这个灯不知道是输入有电容还是输出有电容,总之灯串的多最后的波形就不对了,我最多串169个灯。而且 ...

看11楼。换一个库试试看。
是买的成品灯带。
回复 支持 反对

使用道具 举报

发表于 2021-8-5 00:00:44 | 显示全部楼层
能做个流水灯吗?
回复 支持 反对

使用道具 举报

发表于 2022-2-10 17:14:51 | 显示全部楼层
学习8266点灯的好帖子,认真学习中。。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-4-20 07:11 , Processed in 0.234000 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

快速回复 返回顶部 返回列表