树莓派科学小实验4B--05_跑马灯

2024-04-24 23:58

本文主要是介绍树莓派科学小实验4B--05_跑马灯,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

小实验目录

树莓派科学小实验
001 点亮第一盏LED灯
002 点亮LED灯组
003_开关控制LED灯
004_获取温湿度
005_跑马灯(ws2812b))


文章目录

  • 小实验目录
  • 前言
  • 一、实验元件
  • 二、 ws2812b原理
  • 三、 代码部分:
    • 1)导入并安装ws2812的库
    • 2)设定公共部分


前言

由于未知的原因,在一阵青烟中,我的树莓派4B主板和接口板都报销了。 直到今天我才接到高价从京东购买的新板子(做硬件开发真的很费钱啊!)新年第一烧,希望今年能红红火火的!
长话短说,回归正题:这个实验依然从github上导入所需的库文件。
https://github.com/rpi-ws281x/rpi-ws281x-python


提示:以下是本篇文章正文内容,下面案例可供参考

一、实验元件

带有8颗RGB灯珠的WS2812元器件板
在这里插入图片描述
GPIO扩展板一块 or 面包板一块
在这里插入图片描述

二、 ws2812b原理

这里是引用的2812原理说明,实际连接中使用3.3v的输出即可
在这里插入图片描述大致的接线图如下:

VCC: 3.3v 从树莓派的3.3v供电GPIO接出
GND: 接在了树莓派的共地接口上
控制脚:接在了IO12上(这里是需要接在PWM脚上,因为后面我们需要调整频率)
每一个灯珠都是串联在一起的。从DI到DO 在VCC和GND间需要一个滤波电容(100MF)
在这里插入图片描述

对于ws2812b可以从github上下载现成的库,没有必要去重新底层应用,我们可以直接调用。

三、 代码部分:

1)导入并安装ws2812的库

sudo pip install rpi_ws281x

2)设定公共部分

中文标准的部分是需要根据实际需要修改的,其他的可改可不改

# LED strip configuration:
LED_COUNT = 8        # 设定灯珠的数量,我的灯珠只有8颗.
LED_PIN = 12          #设定控制脚连接的位置(我的是12脚,注意这里需要使用PWM,如果是10脚将需要使用SPI控制)  
LED_FREQ_HZ = 800000  # 设定PWM的频率(就是灯珠的频率,800KHZ)
LED_DMA = 10          # DMA channel to use for generating signal (try 10)
LED_BRIGHTNESS = 255  # Set to 0 for darkest and 255 for brightest
LED_INVERT = False    # True to invert the signal (when using NPN transistor level shift)
LED_CHANNEL = 0       # set to '1' for GPIOs 13, 19, 41, 45 or 53

3)定义一个函数用来点亮
color:RGB格式的颜色值。
strip:初始化后的灯组

def colorWipe(strip, color, wait_ms=50):"""Wipe color across display a pixel at a time."""for i in range(strip.numPixels()):strip.setPixelColor(i, color)strip.show()time.sleep(wait_ms / 1000.0)

4)定义一个渐变色的函数

def rainbow(strip, wait_ms=20, iterations=1):"""Draw rainbow that fades across all pixels at once."""for j in range(256 * iterations):for i in range(strip.numPixels()):strip.setPixelColor(i, wheel((i + j) & 255))strip.show()time.sleep(wait_ms / 1000.0)
def rainbowCycle(strip, wait_ms=20, iterations=5):"""Draw rainbow that uniformly distributes itself across all pixels."""for j in range(256 * iterations):for i in range(strip.numPixels()):strip.setPixelColor(i, wheel(((i * 256 // strip.numPixels()) + j) & 255))strip.show()time.sleep(wait_ms / 1000.0)

5)定义一个跑马灯的函数

def theaterChaseRainbow(strip, wait_ms=50):"""Rainbow movie theater light style chaser animation."""for j in range(256):for q in range(3):for i in range(0, strip.numPixels(), 3):strip.setPixelColor(i + q, wheel((i + j) % 255))strip.show()time.sleep(wait_ms / 1000.0)for i in range(0, strip.numPixels(), 3):strip.setPixelColor(i + q, 0)

完整的测试用例:

# NeoPixel library strandtest example
# Author: Tony DiCola (tony@tonydicola.com)
#
# Direct port of the Arduino NeoPixel library strandtest example.  Showcases
# various animations on a strip of NeoPixels.
import timefrom rpi_ws281x import Color, PixelStrip, ws# LED strip configuration:
LED_COUNT = 40         # Number of LED pixels.
LED_PIN = 18           # GPIO pin connected to the pixels (must support PWM!).
LED_FREQ_HZ = 800000   # LED signal frequency in hertz (usually 800khz)
LED_DMA = 10           # DMA channel to use for generating signal (try 10)
LED_BRIGHTNESS = 255   # Set to 0 for darkest and 255 for brightest
LED_INVERT = False     # True to invert the signal (when using NPN transistor level shift)
LED_CHANNEL = 0
LED_STRIP = ws.SK6812_STRIP_RGBW
# LED_STRIP = ws.SK6812W_STRIP# Define functions which animate LEDs in various ways.
def colorWipe(strip, color, wait_ms=50):"""Wipe color across display a pixel at a time."""for i in range(strip.numPixels()):strip.setPixelColor(i, color)strip.show()time.sleep(wait_ms / 1000.0)def theaterChase(strip, color, wait_ms=50, iterations=10):"""Movie theater light style chaser animation."""for j in range(iterations):for q in range(3):for i in range(0, strip.numPixels(), 3):strip.setPixelColor(i + q, color)strip.show()time.sleep(wait_ms / 1000.0)for i in range(0, strip.numPixels(), 3):strip.setPixelColor(i + q, 0)def wheel(pos):"""Generate rainbow colors across 0-255 positions."""if pos < 85:return Color(pos * 3, 255 - pos * 3, 0)elif pos < 170:pos -= 85return Color(255 - pos * 3, 0, pos * 3)else:pos -= 170return Color(0, pos * 3, 255 - pos * 3)def rainbow(strip, wait_ms=20, iterations=1):"""Draw rainbow that fades across all pixels at once."""for j in range(256 * iterations):for i in range(strip.numPixels()):strip.setPixelColor(i, wheel((i + j) & 255))strip.show()time.sleep(wait_ms / 1000.0)def rainbowCycle(strip, wait_ms=20, iterations=5):"""Draw rainbow that uniformly distributes itself across all pixels."""for j in range(256 * iterations):for i in range(strip.numPixels()):strip.setPixelColor(i, wheel(((i * 256 // strip.numPixels()) + j) & 255))strip.show()time.sleep(wait_ms / 1000.0)def theaterChaseRainbow(strip, wait_ms=50):"""Rainbow movie theater light style chaser animation."""for j in range(256):for q in range(3):for i in range(0, strip.numPixels(), 3):strip.setPixelColor(i + q, wheel((i + j) % 255))strip.show()time.sleep(wait_ms / 1000.0)for i in range(0, strip.numPixels(), 3):strip.setPixelColor(i + q, 0)# Main program logic follows:
if __name__ == '__main__':# Create NeoPixel object with appropriate configuration.strip = PixelStrip(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS, LED_CHANNEL, LED_STRIP)# Intialize the library (must be called once before other functions).strip.begin()print('Press Ctrl-C to quit.')while True:# Color wipe animations.colorWipe(strip, Color(255, 0, 0))  # Red wipecolorWipe(strip, Color(0, 255, 0))  # Blue wipecolorWipe(strip, Color(0, 0, 255))  # Green wipecolorWipe(strip, Color(0, 0, 0, 255))  # White wipecolorWipe(strip, Color(255, 255, 255))  # Composite White wipecolorWipe(strip, Color(255, 255, 255, 255))  # Composite White + White LED wipe# Theater chase animations.theaterChase(strip, Color(127, 0, 0))  # Red theater chasetheaterChase(strip, Color(0, 127, 0))  # Green theater chasetheaterChase(strip, Color(0, 0, 127))  # Blue theater chasetheaterChase(strip, Color(0, 0, 0, 127))  # White theater chasetheaterChase(strip, Color(127, 127, 127, 0))  # Composite White theater chasetheaterChase(strip, Color(127, 127, 127, 127))  # Composite White + White theater chase# Rainbow animations.rainbow(strip)rainbowCycle(strip)theaterChaseRainbow(strip)

效果:
![在在这里插入图片描述在这里插入图片描述

这篇关于树莓派科学小实验4B--05_跑马灯的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/933194

相关文章

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

4B参数秒杀GPT-3.5:MiniCPM 3.0惊艳登场!

​ 面壁智能 在 AI 的世界里,总有那么几个时刻让人惊叹不已。面壁智能推出的 MiniCPM 3.0,这个仅有4B参数的"小钢炮",正在以惊人的实力挑战着 GPT-3.5 这个曾经的AI巨人。 MiniCPM 3.0 MiniCPM 3.0 MiniCPM 3.0 目前的主要功能有: 长上下文功能:原生支持 32k 上下文长度,性能完美。我们引入了

忽略某些文件 —— Git 学习笔记 05

忽略某些文件 忽略某些文件 通过.gitignore文件其他规则源如何选择规则源参考资料 对于某些文件,我们不希望把它们纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常它们都是些自动生成的文件,比如日志文件、编译过程中创建的临时文件等。 通过.gitignore文件 假设我们要忽略 lib.a 文件,那我们可以在 lib.a 所在目录下创建一个名为 .gi

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

树莓派5_opencv笔记27:Opencv录制视频(无声音)

今日继续学习树莓派5 8G:(Raspberry Pi,简称RPi或RasPi)  本人所用树莓派5 装载的系统与版本如下:  版本可用命令 (lsb_release -a) 查询: Opencv 与 python 版本如下: 今天就水一篇文章,用树莓派摄像头,Opencv录制一段视频保存在指定目录... 文章提供测试代码讲解,整体代码贴出、测试效果图 目录 阶段一:录制一段

HNU-2023电路与电子学-实验3

写在前面: 一、实验目的 1.了解简易模型机的内部结构和工作原理。 2.分析模型机的功能,设计 8 重 3-1 多路复用器。 3.分析模型机的功能,设计 8 重 2-1 多路复用器。 4.分析模型机的工作原理,设计模型机控制信号产生逻辑。 二、实验内容 1.用 VERILOG 语言设计模型机的 8 重 3-1 多路复用器; 2.用 VERILOG 语言设计模型机的 8 重 2-1 多

GraphPad Prism 10 for Mac/Win:高效统计分析与精美绘图的科学利器

GraphPad Prism 10 是一款专为科研工作者设计的强大统计分析与绘图软件,无论是Mac还是Windows用户,都能享受到其带来的便捷与高效。该软件广泛应用于生物医学研究、实验设计和数据分析领域,以其直观的操作界面、丰富的统计方法和多样化的图表样式,成为科学研究的得力助手。 数据处理与整理 GraphPad Prism 10 支持从多种数据源导入数据,如Excel、CSV文件及数据库

61.以太网数据回环实验(4)以太网数据收发器发送模块

(1)状态转移图: (2)IP数据包格式: (3)UDP数据包格式: (4)以太网发送模块代码: module udp_tx(input wire gmii_txc ,input wire reset_n ,input wire tx_start_en , //以太网开始发送信

C++入门(05-2)从命令行执行C++编译器_GCC

文章目录 GCC编译器1. 下载MinGW-w64,安装(不推荐)2. 使用MSYS2安装MinGW-w64(推荐)2.1 安装MSYS22.2 初始化和更新2.3 安装MinGW-w64编译器2.3 在MSYS2 Shell中导航到代码目录2.4 使用 g++ 编译2.5 运行可执行文件 GCC编译器 GCC(GNU Compiler Collection)是一个开源编译器集

C++入门(05)从命令行执行C++编译器_MSVC

文章目录 1.C++ 编译器2. 常用 C++ 编译器MSVC(Microsoft Visual C++)GCC(GNU Compiler Collection)Clang 3. MSVC 编译器3.1 开发者命令提示符3.2 编译 C++ 代码 1.C++ 编译器 将C++源代码(扩展名为 .cpp )转换成计算机可以运行的可执行程序 编译器会检查代码的语法和语义,生成相应