288|0

8

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

【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的方式,其中有一些小坑需要踩,不过好在解决了,希望能帮到大家

点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表