【2024 DigiKey创意大赛】第二弹,树莓派驱动6+1micArray的LED灯
<p><span style="font-size:18px;"><strong>1.前言</strong></span></p><p>此次大赛有一个套件是sipeed的6+1MicArray 麦克风阵列,用来检测声音和显示灯光,就是下面这个:</p>
<p> </p>
<div style="text-align: center;"></div>
<div>麦克风阵列模块是 Sipeed 基于 MSM261S4030H0 数字麦克风芯片设计的,模块声音识别灵敏度、信噪比高,由沿板的六个麦克风和一个中心的麦克风组成,阵列板上的 12 颗 LED 可以用来可视化识别声源方位,基于 <code class="hljs">GCC-PHAT</code> 算法实现声源定位、语音识别、波束成形等需求场合。这个外设挺有意思的,今天先把LED灯珠驱动起来,玩一玩酷炫的氛围灯.</div>
<div><strong><span style="font-size:18px;">2. 接线</span></strong></div>
<div>外设的官方介绍网址是:</div>
<div><a href="https://wiki.sipeed.com/hardware/zh/modules/micarray.html" target="_blank">https://wiki.sipeed.com/hardware/zh/modules/micarray.html</a>,</div>
<div>
<h3 id="%E7%9B%B8%E5%85%B3%E5%8F%82%E6%95%B0">相关参数<a href="https://wiki.sipeed.com/hardware/zh/modules/micarray.html#%E7%9B%B8%E5%85%B3%E5%8F%82%E6%95%B0">#</a></h3>
<table>
<thead>
<tr>
<th>功能特点</th>
<th>参数</th>
</tr>
</thead>
<tbody>
<tr>
<td>声压级</td>
<td>140 dB SPL</td>
</tr>
<tr>
<td>灵敏度</td>
<td>-26(dB,dBFS @1KHZ 1Pa)</td>
</tr>
<tr>
<td>信噪比</td>
<td>57 dB (20kHz bandwidth,A-weighted)<br />
THD<1% (100dB SPL @1kHz S=Nom,Rload>2k )</td>
</tr>
<tr>
<td>时钟频率</td>
<td>1.0-4.0Mhz(正常模式)<br />
150-800khz(低功耗模式)</td>
</tr>
<tr>
<td>MEMS 麦克风</td>
<td>7 个 MSM261S4030H0 组成阵列</td>
</tr>
<tr>
<td>连接器</td>
<td>支持 2*5P 2.54mm 端子和 10P 0.5mm FPC 连接器</td>
</tr>
<tr>
<td>灯光</td>
<td>12 个 SK9822 LED 组成一个环形 LED 阵列</td>
</tr>
<tr>
<td> </td>
<td>多个 LED 通过双信号线级联 / 8 Bit(256 级)可调颜色 / 5 Bit(32 级)亮度调节</td>
</tr>
<tr>
<td>尺寸</td>
<td>78.1*88.8mm</td>
</tr>
</tbody>
</table>
</div>
<div>看了介绍,知道LED灯珠是SK9822,比我们常见的WS2812更好,颜色是RGB格式的24位,非常艳丽.</div>
<div>首先是看看接线方式,端口介绍:</div>
<div>
<table>
<thead>
<tr>
<th>引脚序号</th>
<th>引脚名称</th>
<th>类型</th>
<th>引脚说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>VIN</td>
<td>VCC</td>
<td>模块电源输入正</td>
</tr>
<tr>
<td>2</td>
<td>GND</td>
<td>GND</td>
<td>模块电源地</td>
</tr>
<tr>
<td>3</td>
<td>MIC_D0</td>
<td>I/O</td>
<td>0 号麦克风和1号麦克风的 I²S 接口的串行数据输出</td>
</tr>
<tr>
<td>4</td>
<td>MIC_D1</td>
<td>I/O</td>
<td>2 号麦克风和3号麦克风的 I²S 接口的串行数据输出</td>
</tr>
<tr>
<td>5</td>
<td>MIC_D2</td>
<td>I/O</td>
<td>4 号麦克风和5号麦克风的 I²S 接口的串行数据输出</td>
</tr>
<tr>
<td>6</td>
<td>MIC_D3</td>
<td>I/O</td>
<td>中心麦克风的 I²S 接口的串行数据输出</td>
</tr>
<tr>
<td>7</td>
<td>MIC_WS</td>
<td>I/O</td>
<td>I²S 接口的串行数据字选择</td>
</tr>
<tr>
<td>8</td>
<td>MIC_CK</td>
<td>I/O</td>
<td>I²S 接口的串行数据时钟</td>
</tr>
<tr>
<td>9</td>
<td>LED_CK</td>
<td>I/O</td>
<td>LED 的串行数据时钟</td>
</tr>
<tr>
<td>10</td>
<td>LED_DA</td>
<td>I/O</td>
<td>LED 的的串行数据输出</td>
</tr>
</tbody>
</table>
<p> </p>
<p>所以用杜邦线跟树莓派5连接起来:</p>
<p> </p>
<p>在我的接线中,LED_CK和LED_DA接入的是BRCM的26和19脚,VCC和GND正常接3.3V和GND上就行.</p>
<p><span style="font-size:18px;"><strong>3. 下载python的驱动包</strong></span></p>
<p>这里采用Python来完成LED的驱动显示,主要是Python编程比较简单,而且有很多实用的库可以使用.</p>
<p>经过搜索知道有一个apa102-pi库可以使用,库的地址是:<a href="https://github.com/tinue/apa102-pi" target="_blank">https://github.com/tinue/apa102-pi</a></p>
<p>文章链接:<a href="https://blog.csdn.net/gitblog_01171/article/details/142078725" target="_blank">https://blog.csdn.net/gitblog_01171/article/details/142078725</a></p>
<p>使用python下载该库:`pip install apa102-pi`</p>
<p>由于官方镜像python版本为3.11,所以会出现如下报错:</p>
<p> 所以我们要创建python的虚拟环境:</p>
<p>root@raspberrypi:~# python3 -m venv my-virtual-environment<br />
root@raspberrypi:~# python3 -m venv my-virtual-environment<br />
``</p>
<p> 然后再使用pip指令安装apa102-pi库</p>
<p> 安装成功之后即可开始编辑demo代码进行测试</p>
<p><span style="font-size:18px;"><strong>4.编写测试demo代码</strong></span></p>
<p>代码如下:</p>
<pre>
<code class="language-python">#!/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 =
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()</code></pre>
<p>此代码会产生一个随机的颜色列表,然后通过遍历列表的方式来形成一个不段追逐的灯光效果,更多的灯光效果可以自行探索.</p>
<p>运行方式为:<br />
(my-virtual-environment) root@raspberrypi:~# python led_light.py</p>
<p>此时会报错:</p>
<p> 经过2个小时的探索,发现是rpi的gpio库太老了,在这篇文章上查到原因和解决办法:<a href="https://blog.csdn.net/qq_41918983/article/details/142111052" target="_blank">https://blog.csdn.net/qq_41918983/article/details/142111052</a></p>
</div>
<p> 然后依照教程修复一下:</p>
<p> 紧接着就可以继续运行程序了:</p>
<p> </p>
<p><strong><span style="font-size:18px;">5.总结</span></strong></p>
<p>本文记录了使用树莓派驱动6+1MicArray上的led灯珠SK9822的方式,其中有一些小坑需要踩,不过好在解决了,希望能帮到大家</p>
页:
[1]