beiklive's blog beiklive's blog
首页
  • 语言学习

    • C/C++
    • Python
    • Qt
  • 系统&引擎

    • Linux
    • Godot
  • 啥都学

    • 夏姬八学
    • 好好学习
  • 折腾记录

    • 树莓派
    • Obsidian
    • 实践记录
  • 技术文档
  • 工具网站
  • Github项目
  • 友情链接
  • 关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

beiklive

全沾艺人
首页
  • 语言学习

    • C/C++
    • Python
    • Qt
  • 系统&引擎

    • Linux
    • Godot
  • 啥都学

    • 夏姬八学
    • 好好学习
  • 折腾记录

    • 树莓派
    • Obsidian
    • 实践记录
  • 技术文档
  • 工具网站
  • Github项目
  • 友情链接
  • 关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 树莓派
    • 官网镜像
    • 引脚定义
    • 换源
    • 无线(热点)IP固定方法
    • 管脚图
    • WS2812像素灯
      • 库安装
      • 库函数介绍
      • setGamma
      • show
      • setPixelColor
      • setPixelColorRGB
      • getBrightness
      • setBrightness
      • getPixels
      • numPixels
      • getPixelColor
      • getPixelColorRGB
      • getPixelColorRGBW
      • 一些思路
      • 实现物体在彩色背景移动
      • 支持多线程
      • 案例代码
  • Note_raspberrypi
beiklive
2024-05-07
目录

树莓派

# 树莓派

# 官网镜像

https://www.raspberrypi.com/software/operating-systems/

# 引脚定义

看这个 https://pinout.vvzero.com/

# 换源

sudo vim /etc/apt/sources.list
1
# aarch64 用户:编辑 `/etc/apt/sources.list` 文件,用以下内容取代:
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free

# 对于两个架构,编辑 `/etc/apt/sources.list.d/raspi.list` 文件,删除原文件所有内容,用以下内容取代:
deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ bullseye main
1
2
3
4
5
6
7
8
9
10
11
12
13
sudo apt-get update
sudo apt-get upgrade
1
2

# 无线(热点)IP固定方法

sudo vim /etc/dhcpcd.conf
1

image.png

其中:wlan0代表无线,也就是指定接口 ip_address代表设置的静态ip地址 routers代表路由器/网关IP地址

# 管脚图

image.png

# WS2812像素灯

CSDN教程:https://blog.csdn.net/cv7xz/article/details/123674270

# 库安装

sudo pip install rpi_ws281x
1

# 库函数介绍

# setGamma

image.png

# show

刷新led buffer

image.png

# setPixelColor

设置指定像素位置的颜色

color参数 image.png

image.png

# setPixelColorRGB

image.png

# getBrightness

获取当前led亮度 image.png

# setBrightness

亮度范围0 - 255 image.png

# getPixels

获取所有led的color列表,可以通过遍历此值还原某一帧画面 image.png

# numPixels

获取当前显示的像素点的个数 image.png

# getPixelColor

获取指定位置像素点的color image.png

# getPixelColorRGB

获取指定位置像素点的color image.png

# getPixelColorRGBW

image.png

# 一些思路

# 实现物体在彩色背景移动

  1. 使用getPixels()保存当前画面为背景
  2. 开始绘制每一帧
  3. 使用setPixelColor先把背景写入buffer
  4. 使用setPixelColor先把动画对象写入buffer
  5. 使用show()刷新缓存

# 支持多线程

# 案例代码

import time
from rpi_ws281x import PixelStrip, Color
import threading
import argparse
 
LED_COUNT = 256        # LED灯的个数
LED_PIN = 18          # DI端接GPIO18
 
# 以下可以不用改
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 = 1  # 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



# 以下为LED模式变换的各个函数
def colorWipe(strip, color, wait_ms=20):
    """一次擦除显示像素的颜色."""
    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):
    """电影影院灯光风格的追逐动画."""
    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):
    """生成横跨0-255个位置的彩虹颜色."""
    if pos < 85:
        return Color(pos * 3, 255 - pos * 3, 0)
    elif pos < 170:
        pos -= 85
        return Color(255 - pos * 3, 0, pos * 3)
    else:
        pos -= 170
        return Color(0, pos * 3, 255 - pos * 3)
 
def rainbow(strip, wait_ms=20, iterations=1):
    """绘制彩虹,褪色的所有像素一次."""
    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=10, iterations=5):
    """画出均匀分布在所有像素上的彩虹."""
    for j in range(256 * iterations):
        for i in range(strip.numPixels()):
            strip.setPixelColor(i, wheel(
                (int(i * 256 / strip.numPixels()) + j) & 255))
        strip.show()
        time.sleep(wait_ms / 1000.0)
 
def theaterChaseRainbow(strip, wait_ms=50):
    """旋转的彩色灯光."""
    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)

def brightness(strip):
    """设置灯光的亮度."""
    while True:
        for i in range(255):
            strip.setBrightness(i)
            strip.show()
            time.sleep(0.01)
        for i in range(255, 1, -1):
            strip.setBrightness(i)
            strip.show()
            time.sleep(0.01)



# Main program logic follows:
if __name__ == '__main__':
    # Process arguments
    parser = argparse.ArgumentParser()
    parser.add_argument('-c', '--clear', action='store_true', help='clear the display on exit')
    args = parser.parse_args()
 
    # Create NeoPixel object with appropriate configuration.
    strip = PixelStrip(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS, LED_CHANNEL)
    # Intialize the library (must be called once before other functions).
    strip.begin()
 
    print('Press Ctrl-C to quit.')
    if not args.clear:
        print('Use "-c" argument to clear LEDs on exit')
 
    try:
        # t = threading.Thread(target=brightness, name='aa', args=(strip,))
        # t.start()
        while True:
            print('Color wipe animations.')
            colorWipe(strip, Color(255, 255, 0))  # Red wipe
            print(strip.getPixels()[1])
            colorWipe(strip, Color(0, 0, 0), 30)
            colorWipe(strip, Color(0, 255, 255))  # Blue wipe
            colorWipe(strip, Color(0, 0, 0), 30)
            colorWipe(strip, Color(255, 0, 255))  # Green wipe
            colorWipe(strip, Color(0, 0, 0), 30)
            
            print('Theater chase animations.')
            print('Rainbow animations.')
            rainbow(strip)
            colorWipe(strip, Color(0, 0, 0), 50)
            rainbowCycle(strip)
            colorWipe(strip, Color(0, 0, 0), 40)
            break
        while True:
            rainbowCycle(strip)
            #print('***********************')
            colorWipe(strip, Color(0, 0, 0), 100)
 
    except:
        colorWipe(strip, Color(0, 0, 0), 100)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
编辑 (opens new window)
#树莓派
上次更新: 2024/05/09, 12:51:17
最近更新
01
爬虫技术与法律风险:个人开发者的注意事项
05-22
02
个人开发者的抉择:个人工作室 vs 公司主体 🤔
05-22
03
《计算机网络,自顶向下方法》笔记(一)
05-20
更多文章>
Theme by Vdoing | Copyright © 2024-2024 beiklive | 苏ICP备20038092号-2
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式