一、实验目的

了解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的接线示意图,如下:


程序源码如下:

import   pyb
import   mathfrom   ws2812 import WS2812ring   = WS2812(spi_bus=1, led_count=8, intensity=0.1)def   data_generator(led_count):data = [(0, 0, 0) for i in   range(led_count)]step = 0while True: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)yield datastep += 1for   data in data_generator(ring.led_count):ring.show(data)pyb.delay(100)

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

import   gc
import   pybclass   WS2812:"""Driver for WS2812 RGB LEDs. May be used   for controlling single LED or chainof 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_countself.intensity = intensity# prepare SPI data buffer (4 bytes   for each color)self.buf_length = self.led_count * 3   * 4self.buf = bytearray(self.buf_length)# SPI initself.spi = pyb.SPI(spi_bus,   pyb.SPI.MASTER, baudrate=3200000, polarity=0, phase=1)# turn LEDs offself.show([])def show(self, data):"""Show RGB data on LEDs. Expected data   = [(R, G, B), ...] where R, G and Bare intensities of colors in range   from 0 to 255. One RGB tuple for eachLED. 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 LEDhas 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   LEDNote: If you find this function ugly,   it's because speed optimisationsbeated purity of code."""buf = self.bufbuf_bytes = self.buf_bytesintensity = self.intensitymask = 0x03index = start * 12for 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 += 12return index // 12def 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 LEDsbuf = self.bufoff = self.buf_bytes[0]for index in range(end * 12,   self.buf_length):buf[index] = offindex += 1

  

本次参考的github上的一个项目。项目地址:
https://github.com/JanBednarik/micropython-ws2812
给大家看一下效果(额 最后一个灯珠坏了 大家可以自行忽略……)
https://v.qq.com/x/page/d05297wxo1b.html

转载于:https://www.cnblogs.com/xxosu/p/9167483.html

MicroPython实例之TPYBoard v102炫彩跑马灯WS2812B相关推荐

  1. micropython web ws2812_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. python can总线_MicroPython教程之TPYBoard v102 CAN总线通信

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

  5. android无焦点跑马灯滚动,Android跑马灯无焦点滚动

    如果对显示没有特别要求可以直接使用属性就能做到,在布局文件中将TextView属性设置一下: android:layout_width="fill_parent" android: ...

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

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

  7. Micropython TPYBoard v102 自动浇花实验

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

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

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

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

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

最新文章

  1. 黑马程序员--IO【1】
  2. js传中文参数 java取_js中文转码传输java后台 适用于用url传递中文参数
  3. 马化腾说它千年实现李彦宏说新瓶装旧酒,只有马云看好阿里笑了
  4. android 9宫格输入法,Android/WP原生九宫格输入法对比_诺基亚 Lumia 925_手机iOS频道-中关村在线...
  5. 用C#製作PDF文件全攻略
  6. ruby 数据类型Symbol
  7. .net中的设计模式---单例模式
  8. sim7020c功耗_SIM7020C NB-IoT HAT教程
  9. Python【王者荣耀】全英雄无水印皮肤
  10. 多屏互动之Windows与Mac下的非自带的远程桌面应用
  11. hadoop的单机版测试和集群节点的搭建
  12. 基于plc的隧道式,门框式全自动洗车机控制,组态王动画仿真
  13. Linux 学习网站汇总
  14. 5大好用又免费BI软件系统
  15. 腾讯云多人视频会议 TUIRoom 功能体验
  16. 智慧城市——商业综合体智能化建设
  17. html如何携带参数自动跳转页面
  18. 高速公路沥青路面病害分析及养护
  19. 英语词根基础知识-辅音音变1
  20. 柔性印刷线路板缺陷检测方法研究

热门文章

  1. python - Flask 基础(1)
  2. 详解python 字符串
  3. 前端---二级级联下拉列表的实现
  4. DotNetBar 中Ribbon汉化
  5. SharePoint 2010新特性文档集
  6. 数据结构笔记(三)-- 链式实现顺序表
  7. Ros编译 找不到package
  8. php 会员到期提醒_会员管理系统花了50万都没做成,用这五个功能轻松实现
  9. android 底部加载更多,android:ScrollView滑动到底部显示加载更多(示例代码)
  10. linux日志打印规则,Linux 打印简单日志(一)