【史上最全面esp32教程】RGB彩灯篇

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


提示:以下是本篇文章正文内容,下面案例可供参考

rgb彩灯的介绍

ESP32 RGB彩灯是一种可以通过ESP32开发板控制的灯具,它可以实现多种灯光效果,如闪烁、跳变、渐变等。使用ESP32 RGB彩灯可以实现远程控制,可以通过Wi-Fi或蓝牙连接到ESP32开发板,然后使用Arduino IDE编写代码来控制RGB彩灯的亮度和颜色。此外,还可以使用PWM波来控制RGB彩灯的亮度,以实现更多的灯光效果。使用ESP32 RGB彩灯可以实现多种灯光效果,可以为家庭或办公室带来更多的色彩和活力。
B站的RGB彩灯效果展示:

Arduino开源硬件编程学习炫酷玩法-RGB全彩灯珠点阵,彩灯效果,汉字显示,字符显示,传感器扩展,声控音乐效果灯

使用方法

连线

pin16连接到rgb彩灯上面即可。

需要在软件中选择"项目"–>“加载库”–>“管理库”–>输入"Adafruit_NeoPixel"安装即可。

操作

包含头文件#include <Adafruit_NeoPixel.h>
定义彩灯类Adafruit_NeoPixel pixels(彩灯数量, pin脚, NEO_GRB + NEO_KHZ800);

rgb灯珠的开始

pixels.begin();

设置亮度:

pixels.setBrightness(255);

设置全部灯珠颜色:

pixels.fill(0xFF0000);

清除

pixels.clear();

设置指定的灯珠的rgb值:

pixels.setPixelColor(index, pixels.Color(r,g,b));

显示:

pixels.show();

彩灯变换颜色实验

我这里只有5个灯珠,所以最大灯珠就写了5.


#include <Adafruit_NeoPixel.h>

// 设置灯珠数量
#define NUMPIXELS        5

// 设置输出数据引脚
#define PIN_NEOPIXEL    16

// 初始化灯珠控制实例
Adafruit_NeoPixel pixels(NUMPIXELS, PIN_NEOPIXEL, NEO_GRB + NEO_KHZ800);

// 当前灯珠指向
int16_t idx = 0;


// 启动设置
void setup() {

  // 灯珠控制开始
  pixels.begin();

  // 设置亮度为255
  pixels.setBrightness(255);

  // 设置灯珠颜色,全部关闭
  pixels.fill(0x000000);

  delay(100);

  // 设置灯珠颜色
  pixels.fill(0xFF0000);

  delay(100);

  pixels.clear();
}


uint16_t c1 = 0;
uint16_t c2 = 0;
uint16_t c3 = 0;     
uint16_t sign_bit =0;
uint16_t sign = 1;
// 循环主体程序
void loop() {
    if(sign_bit == 0)
    {
      //这个if语句在循环体内只运行一次,该if语句及下方if语句可以用switch代替
        if(sign)
        {
          c1++;
          if(c1>=255)
            sign=0;
        }
        else
        {
          c2++;
          if(c2>=255)
          {
            sign=1;
            sign_bit = 1;
          }
        }
    }
    if(sign_bit == 1)
    {
        if(sign)
        {
          c1--;
          if(c1<=0)
            sign=0;
        }
        else
        {
          c3++;
          if(c3>=255)
          {
            sign=1;
            sign_bit = 2;
          }
        }
    }
    if(sign_bit == 2)
    {
        if(sign)
        {
          c2--;
          if(c2<=0)
            sign=0;
        }
        else
        {
          c1++;
          if(c1>=255)
          {
            sign=1;
            sign_bit = 3;
          }
        }
    }
    if(sign_bit == 3)
    {
        if(sign)
        {
          c3--;
          if(c3<=0)
            sign=0;
        }
        else
        {
          c2++;
          if(c2>=255)
          {
            sign=1;
            sign_bit = 1;
          }
        }
    }
  
    //在这里注释的是一个一个将灯珠点亮并实现渐变
    idx++;
    idx%=5;
    pixels.setPixelColor(idx, pixels.Color(c1,c2,c3));

    
    /*=======================================
    全部点亮用该函数
    pixels.fill(pixels.Color(c1,c2,c3));
    =======================================*/
  
    delay(10);//延时,改变速度
    // 显示
    pixels.show();
  
}

if里面的东西可以直接抄,以及上面的变量,其他的实验请大家自己完成。

彩灯呼吸灯效果

原理:通过setBrightness(255);函数实现。

/* 深圳市普中科技有限公司(PRECHIN 普中)
   技术支持:www.prechin.net
 * 
 * 实验名称:RGB彩灯实验
 * 
 * 接线说明:RGB彩灯模块-->ESP32 IO
 *         WS-->(16)
 * 
 * 实验现象:程序下载成功后,RGB彩灯循环点亮且循环变化颜色
 * 
 * 注意事项:需要在软件中选择"项目"-->"加载库"-->"管理库"-->输入"Adafruit_NeoPixel"安装即可。
 * 
 */

#include <Adafruit_NeoPixel.h>

// 设置灯珠数量
#define NUMPIXELS        5

// 设置输出数据引脚
#define PIN_NEOPIXEL    16

// 初始化灯珠控制实例
Adafruit_NeoPixel pixels(NUMPIXELS, PIN_NEOPIXEL, NEO_GRB + NEO_KHZ800);

// 当前灯珠指向
int16_t idx = 0;


// 启动设置
void setup() {
  // 调试串口速率设置
  Serial.begin(115200);

  // 灯珠控制开始
  pixels.begin();

  // 设置亮度为255
  pixels.setBrightness(0);

  // 设置灯珠颜色,全部关闭
  pixels.fill(0x000000);

  delay(100);

  // 设置灯珠颜色
  pixels.fill(0xFF0000);

  delay(100);

  pixels.clear();
}

unsigned int bright = 0;//定义亮度变量

// 循环主体程序
void loop() {
  pixels.setPixelColor(0,pixels.Color(220,255,251));

  bright++;
  bright%=256;

  pixels.setBrightness(bright);

  delay(10);//延时,改变速度
  // 显示
  pixels.show();
  
}

运行后就可以看到第一个rgb彩灯在变换亮度。
一起变换也是一样的,指定index,设置亮度就ok了。

总结

大家可以想一些其他的好看的效果,并实现他。