【2024 DigiKey创意大赛】第二弹,树莓派驱动6+1micArray的LED灯
[复制链接]
1.前言
此次大赛有一个套件是sipeed的6+1MicArray 麦克风阵列,用来检测声音和显示灯光,就是下面这个:
麦克风阵列模块是 Sipeed 基于 MSM261S4030H0 数字麦克风芯片设计的,模块声音识别灵敏度、信噪比高,由沿板的六个麦克风和一个中心的麦克风组成,阵列板上的 12 颗 LED 可以用来可视化识别声源方位,基于 GCC-PHAT 算法实现声源定位、语音识别、波束成形等需求场合。这个外设挺有意思的,今天先把LED灯珠驱动起来,玩一玩酷炫的氛围灯.
2. 接线
外设的官方介绍网址是:
相关参数#
功能特点 |
参数 |
声压级 |
140 dB SPL |
灵敏度 |
-26(dB,dBFS [url=home.php?mod=space&uid=1013604]@1KHZ[/url] 1Pa) |
信噪比 |
57 dB (20kHz bandwidth,A-weighted)
THD<1% (100dB SPL @1kHz S=Nom,Rload>2k ) |
时钟频率 |
1.0-4.0Mhz(正常模式)
150-800khz(低功耗模式) |
MEMS 麦克风 |
7 个 MSM261S4030H0 组成阵列 |
连接器 |
支持 2*5P 2.54mm 端子和 10P 0.5mm FPC 连接器 |
灯光 |
12 个 SK9822 LED 组成一个环形 LED 阵列 |
|
多个 LED 通过双信号线级联 / 8 Bit(256 级)可调颜色 / 5 Bit(32 级)亮度调节 |
尺寸 |
78.1*88.8mm |
看了介绍,知道LED灯珠是SK9822,比我们常见的WS2812更好,颜色是RGB格式的24位,非常艳丽.
首先是看看接线方式,端口介绍:
引脚序号 |
引脚名称 |
类型 |
引脚说明 |
1 |
VIN |
VCC |
模块电源输入正 |
2 |
GND |
GND |
模块电源地 |
3 |
MIC_D0 |
I/O |
0 号麦克风和1号麦克风的 I²S 接口的串行数据输出 |
4 |
MIC_D1 |
I/O |
2 号麦克风和3号麦克风的 I²S 接口的串行数据输出 |
5 |
MIC_D2 |
I/O |
4 号麦克风和5号麦克风的 I²S 接口的串行数据输出 |
6 |
MIC_D3 |
I/O |
中心麦克风的 I²S 接口的串行数据输出 |
7 |
MIC_WS |
I/O |
I²S 接口的串行数据字选择 |
8 |
MIC_CK |
I/O |
I²S 接口的串行数据时钟 |
9 |
LED_CK |
I/O |
LED 的串行数据时钟 |
10 |
LED_DA |
I/O |
LED 的的串行数据输出 |
所以用杜邦线跟树莓派5连接起来:
在我的接线中,LED_CK和LED_DA接入的是BRCM的26和19脚,VCC和GND正常接3.3V和GND上就行.
3. 下载python的驱动包
这里采用Python来完成LED的驱动显示,主要是Python编程比较简单,而且有很多实用的库可以使用.
经过搜索知道有一个apa102-pi库可以使用,库的地址是:
文章链接:https://blog.csdn.net/gitblog_01171/article/details/142078725
使用python下载该库:`pip install apa102-pi`
由于官方镜像python版本为3.11,所以会出现如下报错:
所以我们要创建python的虚拟环境:
root@raspberrypi:~# python3 -m venv my-virtual-environment
root@raspberrypi:~# python3 -m venv my-virtual-environment
``
然后再使用pip指令安装apa102-pi库
安装成功之后即可开始编辑demo代码进行测试
4.编写测试demo代码
代码如下:
#!/usr/bin/env python3
"""Ultra simple sample on how to use the library"""
from apa102_pi.driver import apa102
import time
import random
# 24位颜色值的常量定义
COLORS = [
0xFF0000, # COLOR_RED
0x00FF00, # COLOR_GREEN
0x0000FF, # COLOR_BLUE
0xFFFF00, # COLOR_YELLOW
0x00FFFF, # COLOR_CYAN
0xFF00FF, # COLOR_MAGENTA
0xFFFFFF, # COLOR_WHITE
0x808080, # COLOR_GRAY
0xD3D3D3, # COLOR_LIGHT_GRAY
0x404040 # COLOR_DARK_GRAY
]
# 生成一个长度为240的列表,随机填充颜色值
random_colors = [random.choice(COLORS) for _ in range(240)]
def main():
# Initialize the library and the strip. This defaults to SPI bus 0, order 'rgb' and a very low brightness
strip = apa102.APA102(num_led=12, order='rgb', bus_method='bitbang', mosi=19, sclk=26, ce=None,
bus_speed_hz=30000000, global_brightness=4)
# Turn off all pixels (sometimes a few light up when the strip gets power)
strip.clear_strip()
# Prepare a few individual pixels
for index,color in enumerate(random_colors):
strip.set_pixel_rgb(index%12,color,bright_percent=index%4)
strip.show()
# Wait a few Seconds, to check the result
time.sleep(0.1)
# Clear the strip and shut down
strip.clear_strip()
strip.cleanup()
if __name__ == '__main__':
main()
此代码会产生一个随机的颜色列表,然后通过遍历列表的方式来形成一个不段追逐的灯光效果,更多的灯光效果可以自行探索.
运行方式为:
(my-virtual-environment) root@raspberrypi:~# python led_light.py
此时会报错:
经过2个小时的探索,发现是rpi的gpio库太老了,在这篇文章上查到原因和解决办法:https://blog.csdn.net/qq_41918983/article/details/142111052
然后依照教程修复一下:
紧接着就可以继续运行程序了:
5.总结
本文记录了使用树莓派驱动6+1MicArray上的led灯珠SK9822的方式,其中有一些小坑需要踩,不过好在解决了,希望能帮到大家
|