树莓派¶
官网镜像¶
https://www.raspberrypi.com/software/operating-systems/
引脚定义¶
看这个 https://pinout.vvzero.com/
换源¶
# 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
无线(热点)IP固定方法¶
其中:wlan0代表无线,也就是指定接口 ip_address代表设置的静态ip地址 routers代表路由器/网关IP地址
管脚图¶
WS2812像素灯¶
CSDN教程:https://blog.csdn.net/cv7xz/article/details/123674270
库安装¶
库函数介绍¶
setGamma¶
show¶
刷新led buffer
setPixelColor¶
设置指定像素位置的颜色
color参数
setPixelColorRGB¶
getBrightness¶
获取当前led亮度
setBrightness¶
亮度范围0 - 255
getPixels¶
获取所有led的color列表,可以通过遍历此值还原某一帧画面
numPixels¶
获取当前显示的像素点的个数
getPixelColor¶
获取指定位置像素点的color
getPixelColorRGB¶
获取指定位置像素点的color
getPixelColorRGBW¶
一些思路¶
实现物体在彩色背景移动¶
- 使用
getPixels()
保存当前画面为背景 - 开始绘制每一帧
- 使用
setPixelColor
先把背景写入buffer - 使用
setPixelColor
先把动画对象写入buffer - 使用
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)