ESP32学习笔记--2 WS2812 16*16点阵

ESP32、ESP8266
ESP32-S2、ESP32-S3、ESP32-C3
回复
lijian
帖子: 39
注册时间: 2020年 7月 23日 15:48

ESP32学习笔记--2 WS2812 16*16点阵

#1

帖子 lijian »

距离上一次发帖也有好长时间了,因为工作比较忙所以就把学习进度缓了缓。之后呢 我会努力的更细自己的学习状况和经验分享。之前买过一条WS2812的灯带,觉得很好玩,就想自己焊一个点阵来玩。就在淘宝上搜了一下这个灯珠,然后无意间看到了这个16*16的点阵。如果是自己做的话这个PCB钱就很贵,然后焊接起来点阵有256个,估计眼睛都能焊花,淘宝上价格也不贵一块板子才55块,所以直接买来玩了。
图片
然后尝试着点亮一些灯源代码如下

代码: 全选

from machine import Pin
from neopixel import NeoPixel
import time
p5 = Pin(5,Pin.OUT) ###定义引脚
np = NeoPixel(p5,256)###定义灯的个数
r = g = b = 0
yanse = ###缓存区
for i in range (256): ###缓存区赋值
if i < 80 :
r = r + 1
if i >= 80 and i < 160 :
r = 0
g = g + 1
if i >= 160 :
g = 0
b = b + 1
yanse.append ((r,g,b))
for i in range (256):
np[i] = yanse
[i]np.write() ###写入[/i][/i]
简单定义了一下灯的颜色

图片

就开始想着能不能让点阵动起来呢,形成一个跑马灯

代码: 全选

from machine import Pin
from neopixel import NeoPixel
import time
p5 = Pin(5,Pin.OUT)
np = NeoPixel(p5,256)
r = g = b = 0
yanse =
for i in range (256):
if i < 80 :
r = r + 1
if i >= 80 and i < 160 :
r = 0
g = g + 1
if i >= 160 :
g = 0
b = b + 1
yanse.append ((r,g,b))
while 1 :
for i in range (256):
np[i]= yanse
[i]np.write()
a = yanse[0] #保存第一个颜色
for i in range (256): #把每一种颜色在列表里面向前挪一位
if i <255:
yanse [i] = yanse [i+1]
else :
yanse[i] = a #把第一个颜色放在255位上 形成一个循环[/i][/i][/i][/i]

图片

代码: 全选

from machine import Pin
from neopixel import NeoPixel
import time
p5 = Pin(5,Pin.OUT)
np = NeoPixel(p5,256)
r = g = b = 0
yanse =
for i in range (256) :#添加多一点颜色
if i < 32 :
r = r + 1
if i >= 32 and i < 64 :
g = g + 1
if i >= 64 and i < 96 :
r = r - 1
if i >= 96 and i < 128 :
b = b + 1
if i >= 128 and i < 160 :
g = g - 1
if i >= 160 and i < 192 :
r = r + 1
if i >= 192 and i < 224 :
g = g + 1
if i >= 224 :
r = r - 1
g = g - 1
b = b - 1
yanse.append((r,g,b))

while 1 :
for i in range (256):
np[i]= yanse
[i]np.write()
a = yanse[0]
for i in range (256):
if i <255:
yanse [i] = yanse [i+1]
else :
yanse[i] = a[/i][/i][/i][/i]

图片[i][i]么继续往下走,能不能一排一排的变换呢因为这个灯的排列方式是蛇形排列的,所以呢要一排一排的变化要有在代码上做点改变
 

代码: 全选

from machine import Pin
from neopixel import NeoPixel
import time
p5 = Pin(5,Pin.OUT)
np = NeoPixel(p5,256)
r = g = b = 0
yanse =
zhongjian = #保存颜色的缓存中间列表
def shuzu(): #数组,保存和改变颜色的缓存区
global r,g,b
for i in range (256) :
if i < 32 :
r = r + 1
if i >= 32 and i < 64 :
g = g + 1
if i >= 64 and i < 96 :
r = r - 1
if i >= 96 and i < 128 :
b = b + 1
if i >= 128 and i < 160 :
g = g - 1
if i >= 160 and i < 192 :
r = r + 1
if i >= 192 and i < 224 :
g = g + 1
if i >= 224 :
r = r - 1
g = g - 1
b = b - 1
yanse.append((r,g,b))

def bianhuan(): #变换队列的函数
for i in range (16) : #先把前面16位颜色数据保存起来
zhongjian.append((yanse[i]))
j = 16 #第一排已经保存下来了 ,第二排要向前一排,所以从第16位开始
for i in range(15) : #一共要进行15排的变化
for k in range (1,33,2) : #第16->15,17->14,18->13以此类推
yanse[j-k] =yanse[j]
j = j + 1
for i in range (16) : #把最后排颜色更改
yanse[255-i] = zhongjian
[i]for i in range(256) :
np[i] = yanse

[i]shuzu()
while 1 :
bianhuan()
np.write()[/i][/i][/i][/i]

图片



如图这么做有一个bug,就是最后所有颜色都会变成第一排的红色,我仔细看了一下我的源代码,发现我保存列表     zhongjian  的时候使用的是全局变量,所以会导致最后都变红。修改后的代码如下:

代码: 全选

from machine import Pin
from neopixel import NeoPixel
import time
p5 = Pin(5,Pin.OUT)
np = NeoPixel(p5,256)
r = g = b = 0
yanse =

def shuzu():
global r,g,b
for i in range (256) :
if i < 32 :
r = r + 1
if i >= 32 and i < 64 :
g = g + 1
if i >= 64 and i < 96 :
r = r - 1
if i >= 96 and i < 128 :
b = b + 1
if i >= 128 and i < 160 :
g = g - 1
if i >= 160 and i < 192 :
r = r + 1
if i >= 192 and i < 224 :
g = g + 1
if i >= 224 :
r = r - 1
g = g - 1
b = b - 1
yanse.append((r,g,b))

def bianhuan():
zhongjian =
for i in range (16) :
zhongjian.append((yanse[i]))
j = 16
for i in range(15) :
for k in range (1,33,2) :
yanse[j-k] =yanse[j]
j = j + 1
for i in range (16) :
yanse[255-i] = zhongjian
[i]for i in range(256) :
np[i] = yanse

[i]shuzu()
while 1 :
bianhuan()
np.write()[/i][/i][/i][/i]
图片
[i][i][i][i][i]这一期我就先做到这里了,下一期我会做汉字的显示和一些动态的小游戏
[/i][i]末尾彩蛋   圣诞之夜 [/i][i]中间绿色的是一颗圣诞树,然后飘着雪花,雪花可是能堆满消减的。[/i]

图片
这个效果可是我们的站长做的,需要源码的话就要多发帖,多给他留言,他就会传授给你 :D
 [/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]









 
:DING :DD

lijian
帖子: 39
注册时间: 2020年 7月 23日 15:48

Re: ESP32学习笔记--2 WS2812 16*16点阵

#2

帖子 lijian »

真棒  期待着下一期
:DING :DD

oyster
帖子: 63
注册时间: 2021年 3月 2日 20:06

Re: ESP32学习笔记--2 WS2812 16*16点阵

#3

帖子 oyster »

代码的缩进是乱的

回复

  • 随机主题
    回复总数
    阅读次数
    最新文章