ESP32控制WS2812/11灯带

这个部分中笔者将使用ESP32的RMT功能控制WS2812/11灯带。

什么是WS2812/2811灯带?与5050rgb灯带有何区别

  1. 不象5050rgb灯带只能同时显示一种颜色,ws2812/2811灯带上的每一个led都能被单独精确控制,显示(8位*3)种颜色。
  2. WS2812/2811只需一根信号线就能控制灯带上所有led。多个灯带间可以通过串联轻松延长。
  3. 在30hz的刷新频率下一个信号线能够控制至多500个led。

WS2811芯片 与WS2812led.

WS2811芯片实现了上述功能。WS2812led灯珠为内置了2811芯片的RGB灯珠。
一些灯带用一个WS2811芯片驱动3个普通5050RGB灯珠,而另一些全部使用了集成了芯片的WS2812灯珠。WS2812灯条都为5v供电,芯片驱动版本的灯带有12v供电版本。

WS2812/2811的控制信号

如上所说,WS2812芯片依靠一个信号线控制上百个LED的颜色,这是如何实现的呢?
每个LED的信号有24位,由R,G,B各八位组成。每个数据位的高低由信号引脚的波形决定:

T0H,T0L,T1H,T1L的时间值由具体的芯片决定,具体请参考worldsemi网站的技术手册。
当发送多个led的数据时,每个芯片都会吞掉最前面的24位数据。两个数据帧之间需要间隔280微秒以上。

ESP32输出WS2812控制信号

为了接入wifi,这个项目使用ESP32作为灯带控制器和MQTT网关。笔者使用的是arduino-ide的开发环境(关于如何在arduino-ide或类似环境中开发esp32)。
控制WS2812/11的arduino库有WS2812FX和NeoPixelBus,但是它们都不支持ESP32硬件。好在esp32有内置的RMT库专门用来输出数字波形,并且提供了控制ws2812的范例程序(arduinoIDE-文件-示例-esp32-RMT-RMTWriteNeoPixel)。

//设置led数量,声明rmt对象。
#define NR_OF_LEDS   50
#define NR_OF_ALL_BITS (24*NR_OF_LEDS)
//rmt数据
rmt_data_t led_data[NR_OF_ALL_BITS];
//rmt对象
rmt_obj_t* rmt_send = NULL;
//每一个led的颜色状态。
uint8_t allColor[NR_OF_LEDS][3];
//初始化rmt对象
//18:针脚,true:输出或输入,RMT_MEM_64:内存数量if ((rmt_send = rmtInit(18, true, RMT_MEM_64)) == NULL){Serial.println("init sender failed\n");}//设置rmt的时间单位,这里为100ns,返回实际设置的时间单位。float realTick = rmtSetTick(rmt_send, 100);Serial.printf("real tick set to: %fns\n", realTick);
  int led, col, bit;int i = 0;for (led = 0; led < NR_OF_LEDS; led++) {for (col = 0; col < 3; col++ ) {for (bit = 0; bit < 8; bit++) {//位为1时。if  (allColor[led][col]  & (1 << (8 - bit))) {//先输出高电平led_data[i].level0 = 1;//高电平输出时间为8*100ns=0.8微秒led_data[i].duration0 = 8;//再输出低电平led_data[i].level1 = 0;//低电平输出时间为4*100ns=0.4微秒led_data[i].duration1 = 4;} else {//位为0时。led_data[i].level0 = 1;led_data[i].duration0 = 4;led_data[i].level1 = 0;led_data[i].duration1 = 8;}i++;}}}
//输出的目标波形。
// "0":
//         +-------+              +--
//         |       |              |
//         |       |              |
//         |       |              |
//      ---|       |--------------|
//         +       +              +
//         | 0.4us |   0.8us   |
//
// "1":
//         +-------------+       +--
//         |             |       |
//         |             |       |
//         |             |       |
//         |             |       |
//      ---+             +-------+
//         |    0.8us    | 0.4us |
//输出波形
rmtWrite(rmt_send, led_data, NR_OF_ALL_BITS);

注意:只要没有关闭电源,WS2812/2811芯片会保存颜色输出状态。因此只有需要改变灯带状态时,esp32才需要重新输出控制数据。

注意:esp32的一些引脚无法使用rmt功能,运行时会出现缓存读取错误。

硬件连接


如果ESP32板上没有5v-3.3V线性电源则请自行添加。
另外,一些WS2812/11灯带需要5V控制电平,不支持ESP32 3.3V的控制电平。请添加三极管升压电路或者用高低电平转换模块解决。
如果使用12v的灯带和电源还需添加降压模块给esp32供电。

建议当灯带长度超过5米时建议每5米分别供电,不然后面的灯带会有较大的压降。另外灯带最后可添加稳压电容。

第二部分:https://blog.csdn.net/CharlieZ8/article/details/88044235
第三部分:https://blog.csdn.net/CharlieZ8/article/details/88096061

物联网控制的智能LED灯带(1):WS2812灯带控制(WS2812/2811,ESP32,NODE-RED)相关推荐

  1. IO口多路查理复用:三个单片机IO口控制六个LED

    简 介: 本文介绍了单片机的IO控制 LED 中的复用技术,特别查理复用基本原理和特点进行了介绍.使用一款IS31FL3731可以构成16×9的PWM亮度可控的 LED 矩阵. 关键词: 查理复用,C ...

  2. 最简单DIY蓝牙PS2遥控器控制蓝牙智能小车

    51单片机物联网智能小车系列文章目录 第一篇:最简单DIY的51蓝牙遥控小车设计方案 第二篇:最简单DIY串口蓝牙硬件实现方案 第三篇:最简单DIY蓝牙PS2遥控器控制蓝牙智能小车 文章目录 51单片 ...

  3. c语言控制led闪烁次数,单片机C语言程序设计之定时器控制4个LED滚动闪烁

    描述 通过单片机课程设计,熟练掌握C语言的编程方法,将理论联系到实践中去,提高我们的动脑和动手的能力.通过定时器控制4只LED滚动闪烁系统的设计,掌握定时/计数器的使用方法,和简单程序的编写,最终提高 ...

  4. Esp8266进阶之路11 企业者的福音之8266接入阿里智能,点亮一盏LED灯,期待天猫精灵语音控制的不约而至!

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...

  5. 【实战】物联网安防监控项目【4】———从网页上控制A9的LED灯

    前言 学习了一个新知识,当然要记录一下啦.这两天学习了boa服务器.cgic标准库和html标签语言,又双叕解锁一个嵌入式的新玩法.cgic库是沟通C语言和html网页编程语言的一座桥梁,通过在lin ...

  6. USB接口 | Modbus智能LED三色声光报警器 警示灯带蜂鸣器

    智能LED声光报警器是竣达公司开发的一款声光告警设备,作为一总线器件,可与我厂目前生产的智能机房动力环境监控主机配套使用.也可二次开发,用于系统的联动控制.该报警器采用高亮度的LED光源,触发告警后发 ...

  7. 支付宝小程序控制硬件②】 全网首篇,个人支付宝小程序控制智能硬件esp8266,从设计电路到设计协议控制两盏LED灯调节亮度。

    本系列属于支付宝小程序控制智能硬件 esp8266等芯片的思路编程,欢迎大家点点手指关注我半颗心脏,博客文章列表干货多多,有任何疑问评论区留言,第一时间看到回复! [支付宝小程序控制硬件①] 申请个人 ...

  8. 距离传感器控制灯泡代码_生迪全彩智能 LED 灯泡体验评测

    市面上大多数智能灯具无外乎智能控制,冷暖标准区间的简单调光,仅仅满足我们日常照明之外,似乎用处不多.如果有一款能在自己房间制造多彩氛围的灯泡就好了. 这次有幸体验到了华为智能家居生态链产品生迪全彩智能 ...

  9. Arduino控制WS2812灯带(灯环)

    设计者:STCode(公众号同名) Arduino控制WS2812灯带(灯环) 1) WS2812灯 WS2812灯带 WS2812灯环 WS2812是一个集控制电路与发光电路于一体的智能外空LED光 ...

  10. 【小项目关键技术五】控制全彩 WS2812 灯环/灯带

    Ref: Arduino控制WS2812灯带(灯环) #include <FastLED.h>#define LED_PIN 13// Information about the LED ...

最新文章

  1. docker load 出错 open /var/lib/docker/tmp/docker-import-837327978/bin/json: no such file or directory
  2. C++ return ,break,continue,关键字
  3. fetch 自动加cookie_如何在shell中动态获取chrome浏览器的cookie信息
  4. VIM配置(不用这么麻烦了,文章尾部附带他人写得脚本安装)
  5. 1.IDA-基本操作(改变Image Base地址、打开、保存IDA的不同方式)
  6. 浮点数可以直接相加么?_鸭粪屎可以直接做有机肥么?
  7. 安卓应用安全指南 5.5.3 处理隐私数据 高级话题
  8. 算法知识点——(4)降维
  9. Windows手动蓝屏触发方法
  10. Photoshop抠图(运用背景橡皮擦工具进行抠图)
  11. 自制JDM+IC Prog 1.06A烧写12C508A成功
  12. android 隐私文件夹,秘密文件夹 – 隐私保护,隐藏文件夹和文件
  13. 什么力量推动了互联网的进化
  14. pytorch【Conv2d参数介绍】
  15. python识别手写数字字体_基于tensorflow框架对手写字体MNIST数据集的识别
  16. python 读取文件去除回车
  17. 泰拉瑞亚 Terraria Mac版
  18. 我的2012,一个2b青年的表白
  19. TensorFlow 中的 CTCGreedyDecoder
  20. Latex设置A4页面及页边距调整

热门文章

  1. 《剑指offer》重建二叉树的解法
  2. 如何打开.azw3 .epub .mobi文件?
  3. 【2014.01】普林斯顿数学指南(第一卷) [英]Timothy Gowers编 齐民友译
  4. 自定义百度网盘加密分享密码
  5. 英语数字听力学习软件操作
  6. [EXUI][原创]菜单简单创建和点击事件的触发
  7. 计算机专业英语交换机,计算机专业英语词汇
  8. JMeter使用教程-压测
  9. 电路设计_元器件选型总结1
  10. 网络社区划分的算法分类