[Micropython]发光二极管制作炫彩跑马灯
| 
 管脚名 
 | 
 功能描述 
 | 
| 
 5V 
 | 
 供电引脚,输入5V 
 | 
| 
 GND 
 | 
 电源接地 
 | 
| 
 DOUT(DO) 
 | 
 数据信号输出 
 | 
| 
 DIN(DI) 
 | 
 数据信号输入 
 | 
| 
 TPYBoard v102 
 | 
 WS2812B 
 | 
| 
 VIN 
 | 
 5V 
 | 
| 
 GND 
 | 
 GND 
 | 
| 
 X7(MISO SPI1) 
 | 
 DO 
 | 
| 
 X8(MOSI SPI1) 
 | 
 DI 
 | 
| 
 import pyb 
import math 
from ws2812 import WS2812 
ring = 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 = 0 
    while 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 data 
        step += 1 
for data in data_generator(ring.led_count): 
    ring.show(data) 
    pyb.delay(100) 
 | 
| 
 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 
 | 
[Micropython]发光二极管制作炫彩跑马灯的更多相关文章
- [MicroPython]TPYBoard v102炫彩跑马灯WS2812B
		
一.实验目的 了解ws2812b的工作原理 学习ws2812b的驱动方法 二.实验器材 TPYBoard v102 1块 ws2812b RGB-Ring-8 1个 micro USB数据线 1条 杜 ...
 - Tableau学习Step6一如何制作炫彩地图
		
Tableau学习Step6一如何制作炫彩地图 本文首发于博客冰山一树Sankey,去博客浏览效果更好. 一.统计地图概述 1.1 统计地图的基本概念 统计地图的本质:数据的正确对应 将数据信息和地理 ...
 - vue制作滚动条幅-跑马灯效果实例代码
		
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
 - vue学习第二天:Vue跑马灯效果制作
		
分析: 1. 给开始按钮绑定一个点击事件 2.在按钮的事件处理函数中,写相关的业务代码 3.拿到msg字符串 4.调用字符串的substring来进行字符串的截取操作 5.重新赋值利用vm实例的特性来 ...
 - web报表设计器在线制作炫酷图表
		
相信很多人都看过这些大屏的图表,是不是感觉效果很酷炫,做起来会很复杂,按照传统的方式去做,使用数据分析工具结合ps美化可能耗时要数月才能做出来.但这个时候用Smartbi自助仪表盘功能,全方位的满足各 ...
 - 【雕爷学编程】Arduino动手做(56)---8路LED跑马灯模块
		
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...
 - CSS3——3D旋转图(跑马灯效果图)
		
CSS3新增了很多新的属性,可以用很少的代码实现炫酷的动画效果,但由于兼容性各浏览器的能力存在不足,有特别需求的网站就呵呵啦.H5C3已是大势所趋了,之前看过一个新闻,Chrome将在年底全面转向H5 ...
 - 【STM32H7教程】第18章    STM32H7的GPIO应用之跑马灯
		
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第18章 STM32H7的GPIO应用之跑马灯 本 ...
 - vue.js(4)--字符串跑马灯
		
制作一个字符串的跑马灯效果 (1)实例代码 <!DOCTYPE html> <html lang="en"> <head> <meta c ...
 
随机推荐
- jqgrid嵌套子表格
			
jqgrid的subGrid子表格 jqGrid的一项高级功能就是嵌套子表格,使用起来也非常简单.使用的方式有两种: 使用普通的subGrid子表格: 使用一个完整jqGrid作为子表格: 1.选项含 ...
 - (三)—Linux文件传输与mysql数据库安装
			
文件传输工具使用 为了速成,关于linux系统的学习都先放一放,用到哪个知识点就查哪个,这里想在linux下装一些服务练练手,最先想到的就是装个mysql数据库试试. 因为我用的是虚拟机下的li ...
 - 利用qq设置个性化的域名邮箱
			
首先有域名.先去注冊先,国内有非常多域名交易平台.我是在易名中国网上注冊的一个域名,Lios.top,因为这个域名价值非常低.一年才 10元,价格非常实惠. 下一步就是去qq邮箱的设置里,找到账户,然 ...
 - java使用线程请求訪问每次间隔10分钟连续5次,之后停止请求
			
java使用线程请求訪问每次间隔10分钟连续5次,收到对应的时候停止请求 package com.qlwb.business.util; /** * * * @类编号: * @类名称:RequestT ...
 - Ubuntu下关闭防火墙
			
默认情况下ubuntu无firewall,除非你自己安装了,怎么装的就怎么删呗. . 假设是已启用的自备的iptables 删了即可了 sudo apt-get remove iptables.
 - bootstarp模板02
			
HTML代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="ut ...
 - Android 获取手机信息
			
private void initData() { TelephonyManager mTm = (TelephonyManager) getActivity().getSystemService(C ...
 - spring的bean是在什么时候实例化的
			
如果没有特殊配置,当bean的scope为原型,也就是singleton的时候,在启动spring容器的时候完成实例化.且需要注意的是,当实例化一个bean的时候,先执行其构造函数代码,然后再执行se ...
 - AJAX扩展-POST传递参数并跳转页面
			
拓展的代码: 这段代码的原理是创建一个表单,所有args都创建一个隐藏的input,用post方法把这些参数传递过去 注意form表单一定要加载到页面中,即下面代码中标红的部分,不然参数是无法被传递的 ...
 - 刚 安装 Oracle时,登录会出现的问题,   ora-28000: the account is locked
			
来这个连接 就OK了: https://jingyan.baidu.com/article/48b37f8d1ec3fd1a6464883a.html 第一步: 进入cmd: 然后将下面的sql输入就 ...