一、实验目的

了解ws2812b的工作原理

学习ws2812b的驱动方法

二、实验器材

TPYBoard v102 1块

ws2812b RGB-Ring-8 1个

micro USB数据线 1条

杜邦线 若干

三、WS2812B的介绍

WS2812B是一个集控制电路与发光电路于一体的智能外控LED光源。 其外型与一个5050LED灯珠相同, 每个元件即为一个像素点。像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路, 还包含有高精度的内部振荡器和可编程定电流控制部分, 有效保证了像素点光的颜色高度一致。

数据协议采用单线归零码的通讯方式, 像素点在上电复位以后, DIN端接受从控制器传输过来的数据, 首先送过来的24bit数据被第一个像素点提取后, 送到像素点内部的数据锁存器, 剩余的数据经过内部整形处理电路整形放大后通过DO端口开始转发输出给下一个级联的像素点, 每经过一个像素点的传输, 信号减少24bit。像素点采用自动整形转发技术, 使得该像素点的级联个数不受信号传送的限制, 仅仅受限信号传输速度要求。

实物图

上图是8个灯珠的。

WS2812B的引脚说明:

硬件连接

将TPYBoard v102与WS2812B的接线示意图,如下:

程序源码如下:

importpybimportmathfrom ws2812 importWS2812

ring= WS2812(spi_bus=1, led_count=8, intensity=0.1)defdata_generator(led_count):

data= [(0, 0, 0) for i inrange(led_count)]

step=0whileTrue:

red= int((1 + math.sin(step * 0.1324)) * 127)

green= int((1 + math.sin(step * 0.1654)) * 127)

blue= int((1 + math.sin(step * 0.1)) * 127)

data[step% led_count] =(red, green, blue)yielddata

step+= 1

for data indata_generator(ring.led_count):

ring.show(data)

pyb.delay(100)

里面还需要引入一个ws2812.py 文件。内容如下:

import gc

import pyb

class WS2812:

"""

Driver for WS2812 RGB LEDs. May be used for controlling single LED or chain

of LEDs.

Example of use:

chain = WS2812(spi_bus=1, led_count=4)

data = [

(255, 0, 0), # red

(0, 255, 0), # green

(0, 0, 255), # blue

(85, 85, 85), # white

]

chain.show(data)

Version: 1.0

"""

buf_bytes = (0x11, 0x13, 0x31, 0x33)

def __init__(self, spi_bus=1, led_count=1, intensity=1):

"""

Params:

* spi_bus = SPI bus ID (1 or 2)

* led_count = count of LEDs

* intensity = light intensity (float up to 1)

"""

self.led_count = led_count

self.intensity = intensity

# prepare SPI data buffer (4 bytes for each color)

self.buf_length = self.led_count * 3 * 4

self.buf = bytearray(self.buf_length)

# SPI init

self.spi = pyb.SPI(spi_bus, pyb.SPI.MASTER, baudrate=3200000, polarity=0, phase=1)

# turn LEDs off

self.show([])

def show(self, data):

"""

Show RGB data on LEDs. Expected data = [(R, G, B), ...] where R, G and B

are intensities of colors in range from 0 to 255. One RGB tuple for each

LED. Count of tuples may be less than count of connected LEDs.

"""

self.fill_buf(data)

self.send_buf()

def send_buf(self):

"""

Send buffer over SPI.

"""

self.spi.send(self.buf)

gc.collect()

def update_buf(self, data, start=0):

"""

Fill a part of the buffer with RGB data.

Order of colors in buffer is changed from RGB to GRB because WS2812 LED

has GRB order of colors. Each color is represented by 4 bytes in buffer

(1 byte for each 2 bits).

Returns the index of the first unfilled LED

Note: If you find this function ugly, it's because speed optimisations

beated purity of code.

"""

buf = self.buf

buf_bytes = self.buf_bytes

intensity = self.intensity

mask = 0x03

index = start * 12

for red, green, blue in data:

red = int(red * intensity)

green = int(green * intensity)

blue = int(blue * intensity)

buf[index] = buf_bytes[green >> 6 & mask]

buf[index+1] = buf_bytes[green >> 4 & mask]

buf[index+2] = buf_bytes[green >> 2 & mask]

buf[index+3] = buf_bytes[green & mask]

buf[index+4] = buf_bytes[red >> 6 & mask]

buf[index+5] = buf_bytes[red >> 4 & mask]

buf[index+6] = buf_bytes[red >> 2 & mask]

buf[index+7] = buf_bytes[red & mask]

buf[index+8] = buf_bytes[blue >> 6 & mask]

buf[index+9] = buf_bytes[blue >> 4 & mask]

buf[index+10] = buf_bytes[blue >> 2 & mask]

buf[index+11] = buf_bytes[blue & mask]

index += 12

return index // 12

def fill_buf(self, data):

"""

Fill buffer with RGB data.

All LEDs after the data are turned off.

"""

end = self.update_buf(data)

# turn off the rest of the LEDs

buf = self.buf

off = self.buf_bytes[0]

for index in range(end * 12, self.buf_length):

buf[index] = off

index += 1

本次参考的github上的一个项目。项目地址:

https://github.com/JanBednarik/micropython-ws2812

给大家看一下效果(额 最后一个灯珠坏了 大家可以自行忽略……)

https://v.qq.com/x/page/d05297wxo1b.html

micropython web ws2812_MicroPython实例之TPYBoard v102炫彩跑马灯WS2812B相关推荐

  1. MicroPython实例之TPYBoard v102炫彩跑马灯WS2812B

    一.实验目的 了解ws2812b的工作原理 学习ws2812b的驱动方法 二.实验器材 TPYBoard v102 1块 ws2812b RGB-Ring-8 1个 micro USB数据线 1条 杜 ...

  2. 【Micropython】发光二极管手工制作炫彩跑马灯

    2019独角兽企业重金招聘Python工程师标准>>> 先甩锅 做完后才发现最后一个灯坏了,就坏了一个灯也不好意思去找淘宝店家,大家视频凑合着看把.不过并不影响实验效果.因为这个发光 ...

  3. sxssfworkbook 设置宽度_手机设置炫酷跑马灯!消息一来就显示闪光!朋友都说怎么弄?...

    手机设置炫酷跑马灯!消息一来就显示闪光!朋友都说怎么弄? 今天给大家分享一个好物,让你的来电显示和微信消息闪屏,特别的炫酷,大家接下来看看 吧!一键让你拥有像三星S10一样的息屏提醒和跑马灯的方法! ...

  4. MicroPython开发板:TPYBoard v102 播放音乐实例

    2019独角兽企业重金招聘Python工程师标准>>> 0x00 前言 前段时间看到TPYBoard的技术交流(q群号:157816561)里有人问关于TPYBoard播放音乐的问题 ...

  5. Micropython TPYBoard v102 自动浇花实验

    2019独角兽企业重金招聘Python工程师标准>>> 1.系统功能 监测土壤湿度.环境温度.光照强度 根据当前环境自动浇水,寒冷天气自动加热土壤 2.所需元器件 TPYBoard板 ...

  6. [MicroPython]TPYBoard v102 CAN总线通信

    0x00前言 CAN是控制器局域网络(Controller Area Network, CAN)的简称,是ISO国际标准化的串行通信协议.CAN总线结构简单,只需2根线与外部相连,并且内部集成了错误探 ...

  7. java实现can通信_[MicroPython]TPYBoard v102 CAN总线通信

    0x00前言 CAN是控制器局域网络(Controller Area Network, CAN)的简称,是ISO国际标准化的串行通信协议.CAN总线结构简单,只需2根线与外部相连,并且内部集成了错误探 ...

  8. python 开发板 播放音乐_MicroPython开发板:TPYBoard v102 播放音乐实例

    0x00前言 前段时间看到TPYBoard的技术交流群(群号:157816561)里有人问关于TPYBoard播放音乐的问题.最近抽空看了一下文档介绍,着手做了个实验. 0x01实验器材 TPYBoa ...

  9. python can总线_MicroPython教程之TPYBoard v102 CAN总线通信

    原标题:MicroPython教程之TPYBoard v102 CAN总线通信 0x00前言 CAN是控制器局域网络(ControllerAreaNetwork,CAN)的简称,是ISO国际标准化的串 ...

最新文章

  1. 又有多省明确开学时间!哪个省份的高校全国最早开学?
  2. oracle:集合查询
  3. 超松弛迭代法求方法组的解(Python实现)
  4. 未来已来,音视频江湖再起波澜
  5. JAX-RS 2.x与Spring MVC:返回对象列表的XML表示
  6. vue学习路线图,学习vue就是那么清晰。
  7. 《荒漠甘泉》4月21日
  8. linux 脚本调用企业微信_shell脚本实现企业微信报警
  9. BP神经网络预测实现
  10. 并发库之CountDownLatch
  11. android 让应用恢复前台显示_Android程序由后台切换到前台
  12. Java面试题:List一边遍历,一边删除
  13. python rabitmq_3、Python结合RabbitMQ实现消息传递
  14. 企业开发基础设施--序
  15. photos for mather's day
  16. popwindow 加个边框_PopupWindow仿微信浮层弹出框效果
  17. 台式计算机cpu品牌,台式电脑CPU天梯图2018年9月最新版 桌面CPU性能排名
  18. html图片滤色,CSS3图片混合(Blend)效果详解
  19. 深入探索Android内存优化
  20. 2.5 zio入门——ZIO类型别名

热门文章

  1. 迅雷影音怎样 1.5倍速度播放
  2. Postman用法说明
  3. 解决 java.lang.IllegalArgumentException: Repository interface must not be null on initialization!
  4. bootstrap validator 提供了哪些验证函数
  5. FreeSql (三十四)CodeFirst 迁移说明
  6. pureMVC简单示例及其原理讲解四(Controller层)
  7. [恢]hdu 1846
  8. GridView调用setAdapter()函数时发生错误
  9. corosync+openais+pacemaker+web
  10. CISCO PIX防火墙的配置