你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
首页
热门
推荐
精选
登录
|
注册
乐鑫esp32 sdk编程驱动ws2812灯珠,实现彩虹光彩夺目效果。
立即下载
用AI写一个
金额:
5
元
支付方式:
友情提醒:源码购买后不支持退换货
立即支付
发布时间:2019-06-05
48人
|
浏览:6003次
|
收藏
|
分享
技术:官网3.0分支+vs code
运行环境:官网3.0分支+vs code
概述
乐鑫esp32 sdk编程驱动ws2812灯珠,实现彩虹光彩夺目效果。
详细
## 一、前言; -------------------------- 时过一年,再来写下`esp32`的学习笔记,网上已经流出很多教程了,对我们的学习极为重要的,像红旭的教程很详细很`nice`,感谢各位大佬的开源,助国内的物联网生态蓬勃发展! 前些时间又看见一些喷子在文章下喷人了,不得不说是“垃圾人”,非常影响我心情,看见一个我删除一个,**如果你不想看下去可以关闭网页走人,为何非要浪费这珍贵时间敲字在这喷人?** 博文的所有涉及的代码工程都是经过我编译成功才放放上去的! 关于为什么我不玩 `arduino`,这种`arduino`我在大学已经是很排斥的,因为简单适合diy有很多外设,可移植性不强,学到的技术少,码农方式开发,很多公司都不是采用`arduino`开发项目的,而且我接触的很多物联网平台都是采用`c`开发,不得不承认我当初的路是正确的! -------------------------- ## 二、`rmt`是什么; ------------------------ 驱动大部分外设来说,几乎是通过`gpio`口的高低电平来处理,而`ws2812`正是需要这样的电平; `RMT`(远程控制)模块驱动程序可用于发送和接收红外遥控信号。由于`RMT`灵活性,驱动程序还可用于生成或接收许多其他类型的信号。 由一系列脉冲组成的信号由`RMT`的发射器根据值列表生成。这些值定义脉冲持续时间和二进制级别。发射器还可以提供载波并用提供的脉冲对其进行调制; 总的来说它就是一个中间件,就是通过 `RMT`模块可以生成解码成包含脉冲持续时间和二进制电平的值的高低电平,从而实现发送和接收我们想要的信号! ![在这里插入图片描述](https://docs.espressif.com/projects/esp-idf/en/latest/_images/blockdiag-65e7fb12de44085d5549248b0aeed8bae3cbae29.png) 官网对`RMT`的详细说明在此:[传送门](https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/peripherals/rmt.html) -------------------------- ## 三、`ws2812`认识; ------------------------ 关于这个灯珠的资料网上多的是,我总的概述: - 1、每颗灯珠内置一个驱动芯片,我们只需要和这个驱动芯片通讯就可以达成调光的目的了!所以,我们不需要用 `pwm` 调节!!! - 2、其的管脚引出有四个,2个是供电用 的!还有2个是通讯的,`DIN`是输入,`DOUT`是输出!以及其是 5v 电压供电!切记! - 3、根据不同的厂商生产不同,驱动的方式有所不一样!下面发送数据顺序是:`green -- Red -- Blue` ,或者还有一种是 `Red --- green -- blue` , 如果发现你想调节红色变成看绿色,但是蓝色没变化!**对此,我已经在代码做了兼容**!! ![在这里插入图片描述](https://img-blog.csdn.net/20180908154855952?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d3dDE4ODExNzA3OTcx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) -------------------------- ## 四、我封装好的代码,如何使用? ------------------------ - 本人喜欢集成封装,所以把所有复杂的代码都封装了一次,只提供使用方法,见下! - 首先,我们必须要知道我们要设计`ws2812`的`DIN`接`esp32`的哪个脚! ``` #define WS2812_PIN 22 //gpio口 #define WS2812_COUNTS 20 // 灯珠个数 ``` - 初始化: ``` //第一个是 io口,第二个是 灯珠个数 ws2812_init(WS2812_PIN, WS2812_COUNTS); ``` - 设置`rgb`的有2个方法,因为上面说了根据各个厂家的灯珠定义不一样,所以发送方式不一样!下面是2个方法的使用说明! ``` /** * @description: 设置颜色 * @param {type} 此发送格式为rgb顺序 * @return: */ void ws2812_setColor(uint8_t r, uint8_t g, uint8_t b); /** * @description: 设置颜色 * @param {type} 此发送格式为grb顺序 * @return: */ void ws2812_setColor_grb(uint8_t g, uint8_t r, uint8_t b); ``` -------------------------- ## 五、如何实现彩虹渐变效果? ------------------------ - 总的来说,就是不断地发送`rgb`颜色,而且颜色和灯珠颗数发送也是不断变化的,因为这是一个级联的灯珠。 ``` /** * @description: 彩虹渐变效果演示 * @param {type} * @return: */ void TaskRainbow(void *pvParameters) { const uint8_t anim_step = 10; const uint8_t anim_max = 250; const uint8_t delay = 25; // 2种颜色之间的渐变时间间隔 rgbValue color = getRGBValue(anim_max, 0, 0); uint8_t step = 0; rgbValue color2 = getRGBValue(anim_max, 0, 0); uint8_t step2 = 0; rgbValue *pixels; pixels = malloc(sizeof(rgbValue) * WS2812_COUNTS); while (1) { color = color2; step = step2; for (uint8_t i = 0; i < WS2812_COUNTS; i++) { pixels[i] = color; if (i == 1) { color2 = color; step2 = step; } switch (step) { case 0: color.g += anim_step; if (color.g >= anim_max) step++; break; case 1: color.r -= anim_step; if (color.r == 0) step++; break; case 2: color.b += anim_step; if (color.b >= anim_max) step++; break; case 3: color.g -= anim_step; if (color.g == 0) step++; break; case 4: color.r += anim_step; if (color.r >= anim_max) step++; break; case 5: color.b -= anim_step; if (color.b == 0) step = 0; break; } } ws2812_setColors(pixels); delay_ms(delay); } } ``` -------------------------- ## 六、工程结构 ------------------------ - 本页面下载的工程是源码工程,非静态封装文件,涉及到隐私,以下截图为静态封装文件工程! ![](/contentImages/image/20190605/qw0MFqHI8RRlq9ZCUVQ.png)
本实例支付的费用只是购买源码的费用,如有疑问欢迎在文末留言交流,如需作者在线代码指导、定制等,在作者开启付费服务后,可以点击“购买服务”进行实时联系,请知悉,谢谢
感谢
5
手机上随时阅读、收藏该文章 ?请扫下方二维码
相似例子推荐
评论
作者
半颗心脏
13
例子数量
740
帮助
127
感谢
评分详细
可运行:
4.5
分
代码质量:
4.5
分
文章描述详细:
4.5
分
代码注释:
4.5
分
综合:
4.5
分
作者例子
基于Android的rgb七彩环颜色采集器
企业者的福音之8266接入阿里智能,点亮一盏灯。
乐鑫esp8266的 基于Nonos移植红外线1883,实现遥控器控制
Android开发SDK接入机智云,智能家居实现APP远程控制多设备
实现乐鑫esp8266的无线OTA升级,实现远程在线升级固件。
乐鑫esp8266基于freeRtos实现私有服务器本地远程OTA升级
乐鑫esp8266的串口通讯驱动源文件,nonos和rtos版本
esp8266烧录Html文件,实现内置网页控制设备!
动起来做一个微信小程序Mqtt协议控制智能硬件的框架,支持短线重连!
乐鑫esp8266使用 SPI 驱动Max7219芯片的驱八位数码管!
在支付宝小程序上websocket实现mqtt协议连接服务器控制硬件。
乐鑫esp32 sdk编程驱动ws2812灯珠,实现彩虹光彩夺目效果。
微信小程序ble蓝牙控制esp32,实现无需网络也可以控制亮度;