前言:
当前我们对“树莓派驱动ws2812”大概比较注重,我们都想要了解一些“树莓派驱动ws2812”的相关知识。那么小编在网摘上汇集了一些对于“树莓派驱动ws2812””的相关文章,希望同学们能喜欢,兄弟们快快来了解一下吧!RGB灯介绍
WS2812 是集控制电路和发光电路于一体的智能外控LED光源,其外型与一个5050的LED灯珠相同,每个灯珠即为一个像素点。每个像素点的RGB三基色可实现256级亮度显示,可产生16777216种色彩,扫描频率不低于400Hz/s,串行级联接口,只需一根信号线完成数据接收和解码。当刷新率30帧/秒时,级联数不小于1024个,数据发送速率可达800Kbps,产生的光颜色高度一致,性价比较高。
WS2812引脚示意图
引脚编号 引脚名称 说明 1 DO 控制数据信号输出端 2 DI 控制数据信号输入端 3 VCC 控制电路电源正极 4 NC 空脚 5 VDD LED电源正极 6 VSS 电源负极
数据时序图
0,1码的高低电平时间:
T0H 0 码, 高电平时间 0.35us ±150ns T0L 0 码, 低电平时间 0.8us ±150ns T1H 1 码, 高电平时间 0.7us ±150ns T1L 1 码, 低电平时间 0.6us ±150ns RES 低电平时间 约 50us -
TH+TL=1.25μs±600ns
时序图:
数据传输方式:
其中 D1 为 MCU 端发送的数据, D2 、 D3 、 D4 为级联电路自动整形转发的数据。
24bit数据的构成:
这是按照GRB顺序发送数据。
安装RGB LED相关库
先安装相关库。
sudo pip3 install rpi_ws281x adafruit-circuitpython-neopixelsudo python3 -m pip install --force-reinstall adafruit-blinkaCircuitPython不支持python2.x版本。
RGB LED和树莓派连接方式:
RGB LED 树莓派 VCC +5V GND GND DI D18 (GPIO1)
只有树莓派的 D10, D12, D18 或 D21引脚才能驱动WS2812 RGB灯。示例1:点亮RGB
实现点亮一个RGB灯。
#!/usr/bin/env python# coding=utf-8import timeimport boardimport neopixel# 定义RGB控制引脚,必须选择 D10, D12, D18 或者 D21pixel_pin = board.D18# 串联RGB灯珠的数量,这里只点亮第一个num_pixels = 1# 定义RGB数据顺序:RGB 或者 GRBCOLOR_ORDER = neopixel.GRBpixels = neopixel.NeoPixel( pixel_pin, num_pixels, brightness=0.3, auto_write=False, pixel_order=COLOR_ORDER)# 点亮第一个RGB灯,显示红色pixels.fill((255, 0, 0))pixels.show()程序必须用python3以root身份执行。
效果图:
示例2:RGB动态显示
实现一个红、绿、蓝、彩虹循环的示例程序。
#!/usr/bin/env python# coding=utf-8import timeimport boardimport neopixel# 定义RGB控制引脚,必须选择 D10, D12, D18 或者 D21pixel_pin = board.D18# 串联RGB灯珠的数量num_pixels = 3# 定义RGB数据顺序:RGB 或者 GRBCOLOR_ORDER = neopixel.GRBpixels = neopixel.NeoPixel( pixel_pin, num_pixels, brightness=0.3, auto_write=False, pixel_order=COLOR_ORDER)def wheel(pos): if pos < 0 or pos > 255: r = g = b = 0 elif pos < 85: r = int(pos * 3) g = int(255 - pos * 3) b = 0 elif pos < 170: pos -= 85 r = int(255 - pos * 3) g = 0 b = int(pos * 3) else: pos -= 170 r = 0 g = int(pos * 3) b = int(255 - pos * 3) return (r, g, b) if COLOR_ORDER in (neopixel.RGB, neopixel.GRB) else (r, g, b, 0)def rainbow(wait): for j in range(255): for i in range(num_pixels): pixel_index = (i * 256 // num_pixels) + j pixels[i] = wheel(pixel_index & 255) pixels.show() time.sleep(wait)while True: pixels.fill((255, 0, 0)) # 红 pixels.show() time.sl<ickey>eep(1) pixels.fill((0, 255, 0)) # 绿 pixels.show() time.sl<ickey>eep(1) pixels.fill((0, 0, 255)) # 蓝 pixels.show() time.sl<ickey>eep(1) rainbow(0.01) # 彩虹程序必须用python3以root身份执行。
效果图:
附:neopixel库的官方文档:Adafruit CircuitPython NeoPixel Library
标签: #树莓派驱动ws2812