本篇介绍ESP8266使用NeoPixel库来驱动IOT Kit板载WS2812彩灯。
1. WS2812彩灯介绍
WS2812是一个集控制电路与发光电路于一体的智能外控LED光源,外型与5050LED灯珠相同,每个灯珠都是一个像素点。像素点内包含数字接口、数据锁存、信号整形放大驱动电路,还包含高精度的内部振荡器和12V高压可编程定电流控制部分。
数据协议采用单线归零码的通讯方式,像素点在上电复位以后,DIN端接受从控制器传输过来的数据,首先送过来的24bit数据被第一个像素点提取后,送到像素点内部的数据锁存器,剩余的数据经过内部整形处理电路整形放大后通过DO端口开始转发输出给下一个级联的像素点,每经过一个像素点的传输,信号减少24bit。像素点采用自动整形转发技术,使得该像素点的级联个数不受信号传送的限制,仅仅受限信号传输速度要求。
按照数据传输协议即可对WS2812进行驱动,当然对于WS2812有许多开源的驱动库,下面进行Adafruit_NeoPixel驱动库的安装。
2. 安装驱动库
在Arduino IDE中点击「项目」—「加载库」—「管理库」,查找Adafruit_NeoPixel库,选择最新版本,点击安装。
在弹出的对话框中选择Install all,安装全部的关联库。
3. 硬件连接及程序下载
在IOT Kit上,WS2812通过跳线帽连接到ESP8266的GPIO0。
在Arduino IDE中新建sketch,拷贝如下代码保存并下载到开发板。
/*
* ws2812b
* ESP8266驱动WS2812彩灯
* 板载接口GPIO0
*/
#include <Adafruit_NeoPixel.h>
#define PIN 0 //GPIO0接口
#define NUMPIXELS 1 //彩灯个数
Adafruit_NeoPixel led(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
led.begin();
led.setBrightness(10); //设置亮度 (0~255)
}
void loop() {
led.setPixelColor(0,led.Color(255, 0, 0)); //红色
led.show(); //刷新显示
delay(1000);
led.setPixelColor(0,led.Color(0, 255, 0)); //绿色
led.show(); //刷新显示
delay(1000);
led.setPixelColor(0,led.Color(0, 0, 2550)); //蓝色
led.show(); //刷新显示
delay(1000);
led.clear();//清空显示
led.show(); //刷新显示
delay(1000);
}
上传成功后,板载WS2812彩灯将红绿蓝交替显示。
4.常用库函数介绍
下面对Adafruit_NeoPixel库常用函数进行介绍:
- Adafruit_NeoPixel led(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800):创建对象,包括信号引脚以及像素点数量,最后一个参数是像素类型标志,一般默认即可。
- led.begin():对象初始化。
- led.show():显示刷新,每次设置完毕必须调用此函数。
- led.clean():将颜色值清除到0。
- led.setBrightness():设置亮度。范围0~255。
- led.setPixelColor():设置颜色值,第一个参数为像素点序号。
- led.Color():将RGB单独颜色值打包成32位颜色值。
关于Adafruit_NeoPixel库详细介绍,请参考GitHub。
关注公众号「TonyCode」,获取完整代码。