RGB的色彩模式是工业界一种颜色标准,RGB名称即代表着:R红色、G绿色、B蓝色,总共为三个通道的颜色。每个通道的刺激量以及通道之间相互迭加的刺激量从而可组成为1670万种色彩!可呈现出人类视力所能感知到的所有颜色,也是运用最广的颜色系统之一。
在日常生活中我们电脑上的RGB所谓“多少数值”其实就是指亮度,一般使用整数来表示。RGB各有256级的亮度,用数字表示为从0、1、2...直到255,数字的最高是255,但0也是数值之一,0表示没有刺激量,255表示刺激量最大值。R、G、B均为255时就合成了白光,R、G、B均为0时就形成了黑色。依次类推,不同通道的数值变化和迭加会呈现不同的颜色。
WS2812是由世界半导体(Worldsemi)推出的具体芯片型号。它把传统的RGB发光芯片和控制芯片(IC)直接封装在了一起(通常是 5050 封装)。简单理解WS2812的底层发光原理是用的RGB,但它在RGB的基础上增加了一颗控制芯片,使其成为了可寻址(Addressable)的灯珠串
在使用中如果控制多个RGB就需要多个PWM引脚,然而经过封装的WS2812无论多少颗灯都只需要一个GPIO,只需要通过特定时序的单总线数据包传输控制指令就可以了。

防水等级:IP30(不防水)
工作温度:-25℃~+80℃
存储温度:-40℃~+85℃
| 以树莓派Pico开发板为例,提醒: 请按下图的引脚标识接线,务必不能接错。如果接错线通电后会导致设备烧毁! |

| WS2812 下载ws2812这个源代码并解压得到三个例程,上传至树莓派Pico文件内,可分别运行每个查看不同图案风格 |

结果:运行程序后可查看灯板闪烁不同颜色自动切换
1.坐标映射逻辑:
如果你要级联多个灯板,需要修改代码里UM_LEDS = 64修改灯的数量(比如 2 块板是128颗)。
但如果要显示字母或数字,只改 NUM_LEDS 字符会错乱。因为代码里的 get_pixel_index(x, y) 映射算法是基于单个 8×8 矩阵算的。多个灯板拼在一起后,你的总体分辨率变了(例如从 8×8 变成了 8×16 或 16×16),需要修改坐标转换函数:
如果横向拼接成 8×16(长条):必须把x范围扩到0~15,并根据物理连接顺序(第一块板的 DOUT 接第二块板的 DIN)在代码里判断像素点属于哪一块板。
如果田字形拼接成 16×16(大方块):走线逻辑会变成“先排右上再排右下”或类似结构,坐标公式也需要相应调整。
按键中断:在循环内部实时检测红/绿/蓝按键,若按下则立即退出彩虹模式(将 current_mode 设为 0),提升系统响应速度。
2.硬件供电:大电流问题(防止烧板)
如果你级联多个灯板后,电流会成倍增加
1 块灯板(64灯): 全亮峰值约 3.8A(通常使用在 1A~2A 左右)。
2 块灯板(128灯): 全亮峰值约 7.6A
4 块灯板(256灯): 全亮峰值约 15A
注意: 绝对不能把大电流直接从第一块灯板的 VCC/GND 串联“串”给后面的灯板(因为 PCB 走线承受不了太高电流,后面的灯板会因压降导致发红、变暗甚至烧毁铜箔)。
正确做法: 采用并联供电,即 5V 电源的主线分别拉出几条粗线,直接接到每块灯板的 5V 和 GND 上;数据线(DIN/DOUT)则依然串联。
3.信号传输:加拉电阻或电平转换
数据线跨越多个灯板后,如果数据线过长,信号容易受到干扰产生杂波,导致后面的灯板闪烁或乱亮,级联超过 2~3 块时,建议在第一块灯板的 DIN 引脚前串联一个 330Ω 左右的电阻,保证所有灯板与 Pico/ESP32 的 GND(地线)紧密共地。
| 本次以ESP32-S3主板为例按下图接好连接线,务必注意不可接反,否则会烧毁设备。 |

| ws2812 下载ws2812这个源代码,在管理器里安装好依赖库,用Arduino IDE编译上传程序查看(如下图) |
需要在Arduino IDE中点击左侧栏的 库管理器(Library Manager)(或按 Ctrl + Shift + I),搜索并安装依赖库:
Adafruit NeoPixel

1.全局配置与对象初始化
引脚与参数:用 #define 定义了控制引脚(GPIO 14)、灯珠总数(64颗)和亮度限制(30),方便随时修改。
实例化对象:Adafruit_NeoPixel strip(...) 用于建立与灯条通信的对象,指定了灯珠数量、控制引脚和数据传输协议(NEO_GRB + NEO_KHZ800)。
2. 数据定义(颜色与字模)
COLOR_LIST[]:预先生成彩虹 7 种颜色的 RGB 数据数组。DIGITS & LETTERS:用二维数组保存了5x5的字符点阵(1 代表点亮,0 代表熄灭)。通过 PROGMEM 关键字将这些固定字模存在 Flash 存储器中,节省 ESP32 的内存(RAM)。
3. 核心辅助函数
getPixelIndex(x, y)(坐标转换):由于 8×8 灯板通常采用“蛇形/S型”走线(偶数行从左往右,奇数行从右往左),该函数将直角坐标 (X, Y)换算成灯珠的实际一维物理序号。drawChar5x5(...)(绘制字符):先清空屏幕,然后将5x5的字模居中(上下左右各空 1 像素)放置在 8×8 灯板上,并赋予指定的颜色。
4. 主程序流程
setup():初始化 WS2812 驱动,设置全局亮度并清空显示。
loop()(三大效果无限循环):
全屏七彩:用 fill() 逐个将整板刷成 7 种颜色,每种停留 1 秒。
数字显示:用 drawChar5x5() 循环绘制0-9,白色显示,间隔 0.8 秒。
字母显示:用 drawChar5x5() 循环绘制A-C,冰蓝色显示,间隔 1 秒。
联系人:张工
电话:0755-32914578
QQ:2251000002
微信:扫下方二维码添加,请备注来意
提供:人工智能,IOT物联网,工控数显,嵌入式软硬件开发,科创教育,产品定制,生产,方案解决...