cszzlsw 发表于 2024-10-21 02:01

【2024 DigiKey创意大赛】第二弹,树莓派驱动6+1micArray的LED灯

<p><span style="font-size:18px;"><strong>1.前言</strong></span></p>

<p>此次大赛有一个套件是sipeed的6+1MicArray 麦克风阵列,用来检测声音和显示灯光,就是下面这个:</p>

<p>&nbsp;</p>

<div style="text-align: center;"></div>

<div>麦克风阵列模块是 Sipeed 基于 MSM261S4030H0 数字麦克风芯片设计的,模块声音识别灵敏度、信噪比高,由沿板的六个麦克风和一个中心的麦克风组成,阵列板上的 12 颗 LED 可以用来可视化识别声源方位,基于&nbsp;<code class="hljs">GCC-PHAT</code>&nbsp;算法实现声源定位、语音识别、波束成形等需求场合。这个外设挺有意思的,今天先把LED灯珠驱动起来,玩一玩酷炫的氛围灯.</div>

<div><strong><span style="font-size:18px;">2.&nbsp;接线</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&lt;1% (100dB SPL @1kHz S=Nom,Rload&gt;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>&nbsp;</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&sup2;S 接口的串行数据输出</td>
                </tr>
                <tr>
                        <td>4</td>
                        <td>MIC_D1</td>
                        <td>I/O</td>
                        <td>2 号麦克风和3号麦克风的 I&sup2;S 接口的串行数据输出</td>
                </tr>
                <tr>
                        <td>5</td>
                        <td>MIC_D2</td>
                        <td>I/O</td>
                        <td>4 号麦克风和5号麦克风的 I&sup2;S 接口的串行数据输出</td>
                </tr>
                <tr>
                        <td>6</td>
                        <td>MIC_D3</td>
                        <td>I/O</td>
                        <td>中心麦克风的 I&sup2;S 接口的串行数据输出</td>
                </tr>
                <tr>
                        <td>7</td>
                        <td>MIC_WS</td>
                        <td>I/O</td>
                        <td>I&sup2;S 接口的串行数据字选择</td>
                </tr>
                <tr>
                        <td>8</td>
                        <td>MIC_CK</td>
                        <td>I/O</td>
                        <td>I&sup2;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>&nbsp;</p>

<p>所以用杜邦线跟树莓派5连接起来:</p>

<p> &nbsp;</p>

<p>在我的接线中,LED_CK和LED_DA接入的是BRCM的26和19脚,VCC和GND正常接3.3V和GND上就行.</p>

<p><span style="font-size:18px;"><strong>3.&nbsp;下载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>&nbsp; 所以我们要创建python的虚拟环境:</p>

<p>root@raspberrypi:~# python3 -m venv my-virtual-environment<br />
root@raspberrypi:~# python3 -m venv my-virtual-environment<br />
``</p>

<p>&nbsp; 然后再使用pip指令安装apa102-pi库</p>

<p> &nbsp;&nbsp; 安装成功之后即可开始编辑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>&nbsp; 经过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>&nbsp; 然后依照教程修复一下:</p>

<p>&nbsp; 紧接着就可以继续运行程序了:</p>

<p>&nbsp; &nbsp; &nbsp;</p>

<p><strong><span style="font-size:18px;">5.总结</span></strong></p>

<p>本文记录了使用树莓派驱动6+1MicArray上的led灯珠SK9822的方式,其中有一些小坑需要踩,不过好在解决了,希望能帮到大家</p>
页: [1]
查看完整版本: 【2024 DigiKey创意大赛】第二弹,树莓派驱动6+1micArray的LED灯