micropython web ws2812_MicroPython实例之TPYBoard v102炫彩跑马灯WS2812B

一、实验目的

了解ws2812b的工作原理

学习ws2812b的驱动方法

二、实验器材

TPYBoard v102 1块

ws2812b RGB-Ring-8 1个

micro USB数据线 1条

杜邦线 若干

三、WS2812B的介绍

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

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

实物图

af5fc2e0cc1fe3c8989e7e788ae9075e.png

上图是8个灯珠的。

WS2812B的引脚说明:

22855ab22bd75e26c6603b28af038a52.png

硬件连接

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

15d31052c54b4630ac64c56e918707de.png

程序源码如下:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/459202.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql数据库表复用_MySQL 数据库之表操作

一、创建表的完整语法create table 表(字段名1 类型 [(宽度) 约束条件],字段名2 类型 [(宽度) 约束条件],字段名3 类型 [(宽度) 约束条件]);1.类型:使用限制字段必须以什么样的数据类型传值约束条件:约束条件是在类型之…

Android有道词典查询功能

有道词典 任务要求&#xff1a;完成查词等功能 因为需要申请API key&#xff0c;这里直接给出地址供使用&#xff1a;http://fanyi.youdao.com/openapi?pathdata-mode 1、activity_main.xml基本格局&#xff08;不做任何说明&#xff09; 代码如下&#xff1a; 1 <Relative…

从零开始学Axure原型设计(高级篇)

如果你熟悉了Axure的部件库&#xff0c;那么你可以得心应手地画出心目中产品的线框图&#xff1b;如果你会用Axure的母版、动态面板功能&#xff0c;那么你应该能够画出一些简单网站的原型图&#xff1b;但只有你精通了Axure的条件逻辑、变量、函数等高级交互&#xff0c;才能将…

python vector 初始化_从零开始搭建机器学习算法框架(python)--计算框架

介绍今天开始一个新的系列&#xff0c;这个系列的目标是用python在不使用任何第三方库的情况下去实现各类机器学习或者深度学习的算法。之所以会有这种想法是因为每当我想提高编程技巧的时候&#xff0c;我总希望能够做一些简单又有趣的小项目练手。我一直对机器学习算法颇感兴…

windows phone 页面主题设计

达到如图这个效果&#xff1a; 1.保证状态栏背景色与主题栏颜色相同需设置状态栏的透明度&#xff0c;代码如下&#xff1a;shell:SystemTray.IsVisible"True" shell:SystemTray.Opacity"0.01" 2.顶部状态栏高度为25&#xff0c;字的上下要留部分空白3.内容…

JAVA如何才能导出这样的EXCEL?

2019独角兽企业重金招聘Python工程师标准>>> 最近的项目有个需求&#xff0c;需要做个报表&#xff0c;excel如上所示。没有很好的办法&#xff0c;求指教。 转载于:https://my.oschina.net/secret620/blog/611450

Xcode 修改工程名以及注意事项

1、先把整个工程文件夹名改为新的工程名。 2、打开工程&#xff0c;单击&#xff0c;输入新的工程名,会出现&#xff0c;点击确定。 3、回到工程界面&#xff0c;在中选择 Manage Schemes,然后再弹出的对话框&#xff0c;把工程名改为新的名字。 4、最好在工程中&#xff0c;把…

脚本命令配置mysql_MySQL 自动化部署脚本

一、环境说明操作系统&#xff1a;CentOS数据库版本&#xff1a;MySQL 5.7/8.0参数&#xff1a;buffer pool 会根据系统内存指定、默认双一、GTID、SlowLog脚本默认安装路径&#xff1a;/usr/local/mysql脚本默认数据路径&#xff1a;/data/mysql*(根据安装包版本适应 比如 5.7…

第2章 数字之魅——快速寻找满足条件的两个数

快速寻找满足条件的两个数 问题描述 能否快速找出一个数组中的两个数字&#xff0c;让这两个数字之和等于一个给定的数字&#xff0c;为了简化起见&#xff0c;我们假设这个数组中肯定存在这样一组或以上符合要求的解。 分析与解法 【解法一】 代码如下&#xff1a; 1 package …

eigen 列向量转矩阵_快速入门矩阵运算——开源库Eigen

矩阵是数学中一个重要的工具&#xff0c;广泛应用于各种场景下的数值分析&#xff0c;例如&#xff0c;数字信号处理&#xff0c;图像处理等。我们如何在程序中使用矩阵进行运算呢&#xff1f;本文将为大家介绍一个开源的矩阵运算工具——Eigen。Eigen is a C template library…

mysql raid_DBA们应该知道的RAID卡知识_MySQL

bitsCN.com对于数据库这种特殊应用IOphotoshop/ target_blank classinfotextkey>PS往往会成为瓶颈&#xff0c;突破的这个瓶颈的有效方法不多&#xff0c;软件方面主要是读写分离&#xff0c;垂直拆分&#xff0c;分区表技术&#xff0c;cluster。硬件方面主要是raid&#x…

基于Maven的SSH框架搭建

2019独角兽企业重金招聘Python工程师标准>>> 1.工程介绍 工程是结合了Springstruts2hibernate&#xff0c;实现了一个简单的form表单提交的功能&#xff0c;可能需要对spring&#xff0c;struts2&#xff0c;hibernate有一个基础的了解才好理解。 2.工程结构图 首先…

交通警察手势信号(动画演示)

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** 一、交通警察手势信号&#xff0d;停止信号 二、交通警察手势信号&#xff0d;直行信…

mysql和mybatis面试题_BATJ面试题汇总详解:MyBatis+MySQL+Spring+Redis+多线程

SpringSpring 概述什么是spring?使用Spring框架的好处是什么&#xff1f;Spring由哪些模块组成&#xff1f;解释AOP模块Spring配置文件什么是Spring IOC 容器&#xff1f;依赖注入什么是Spring的依赖注入&#xff1f;有哪些不同类型的IOC(依赖注入)方式&#xff1f;哪种依赖注…

Codeblocks和gdb调试 (转)

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** 使用C::B和gdb调试是一件简单的事情。下面&#xff0c;让我们调试一个简单的循环&…

mysql5.7.17 win7_win7下mysql5.7.17安装配置方法图文教程

win7下安装mysql5.7.17图文教程&#xff0c;分享给大家。1.下载安装包请在以下有zip包和msi两种类型包&#xff0c;建议新手选择zip包下载&#xff0c;有助于熟习mysql2.解压mysql压缩包下载完成后解压&#xff0c;将其放在要安装的目录下面&#xff0c;如&#xff1a;e:\mysql…

停一下

15年过去已半载有余&#xff0c;回头看年初定下的目标&#xff0c;有种管中窥豹的感觉。之前和肉山讨论的时候&#xff0c;他对我想要发展的方向并没有表示赞同。 现在认为他是对的&#xff0c;发展的方向太靠前了&#xff0c;ui&#xff0c;canvas&#xff0c;svg&#xff0c;…

which 命令

我们经常在linux要查找某个文件&#xff0c;但不知道放在哪里了&#xff0c;可以使用下面的一些命令来搜索&#xff1a; which 查看可执行文件的位置。 whereis 查看文件的位置。 locate 配合数据库查看文件位置。 find 实际搜寻硬盘查询文件名…

18ch

18.2 线程和进程 18.2.1 什么是进程&#xff1f; 18.2.1 什么是进程&#xff1f; 计算机程序只不过是磁盘中可执行的&#xff0c;二进制的数据。它们只有在被读取到内存中&#xff0c;被操作系统调用的时候才开始它们的生命周期。进程&#xff08;重量级进程&#xff09;是程序…

安卓四大组件总览

在安卓中四大组件 &#xff08;Component&#xff09;指的是&#xff1a;Activity&#xff0c;Service&#xff0c;BroadcastReceiver&#xff0c;ContentProvider。此博客仅仅对安卓中四大组件从整体上进行简单的分析&#xff0c;了解他们在安卓系统框架中处的位置与作用&…