合宙Air105|DAC|数字输出|pam8403|可调功放|I2C|SPI|LCD|ST7789|2x2键盘|温湿度模块AHT10|LuatOS-SOC接口|官方demo|学习(11):MP3播放器

基础资料

基于Air105开发板:Air105 - LuatOS 文档

上手:开发上手 - LuatOS 文档

参考博文:

合宙Air105|摄像头|capture|SPI|Serial 串口|TFTLCD|Micro SD卡|GC032A|USB转TTL|官方demo|学习(2-1):摄像头camera-capture_合宙air105的摄像头_打酱油的工程师的博客-CSDN博客

合宙Air103|AHT10|测温|I2C|数据手册|指令分析|官方demo|学习(5-1):AHT10测温模组_打酱油的工程师的博客-CSDN博客_aht10传感器手册

探讨重点

对官方LuatOS-SOC接口文档中audio - 多媒体-音频demo功能的复现,进行相关内容的学习及探讨,并实现了了Air105 MP3及环境温湿度实时监测功能。

实现功能

功能1:mp3播放及其他信息,实时显示在lcd屏幕上(st7789);

功能2:2x2 矩阵键盘自制及控制mp3播放,实现上下切歌以及播放暂停功能;

功能3:读取sd卡/music目录中的音频文件(.mp3或.wav);

功能4: ATH10模块实时温湿度显示;

功能5:DAC功放模块音频播放捕捉图片并通过Serial 串口接收数据存入电脑;

硬件准备

Air105开发板1块,面包板1块,TFTLCD 屏幕(st7789),Micro SD卡模块(SPI)接口1个, pam8403音频功放板/可调功放板, 2X2自制矩阵键盘, AHT10温湿度模块,8欧0.5w扬声器,导线若干。

https://i-blog.csdnimg.cn/blog_migrate/ad178b2a0bfc019ca782afbe70ba8923.png

Air105开发板

https://i-blog.csdnimg.cn/blog_migrate/c90272df89b1f7953e8ea607953098aa.png

 TFTLCD 屏幕

https://i-blog.csdnimg.cn/blog_migrate/c78fea398c3625c31fe4bda09de7fdf4.png

SD卡模块(SPI)

 

2X2自制矩阵键盘

 pam8403音频功放板/可调功放板

AHT10温湿度模块

软件版本

AIR105:LuatOS@AIR105 base 22.12 bsp V0014 32bit

参考源代码仓库地址:

合宙luatos AIR105 媒体播放库 MP3 demo

>git remote -v

origin  https://gitee.com/yingfumei96/Air105-MP3-demo.git (fetch)

origin  https://gitee.com/yingfumei96/Air105-MP3-demo.git (push)

软件使用

接口文档可参考:audio - 多媒体-音频

接线示意图

 2X2自制矩阵键盘

 键盘正面及反面连接

电路原理及接线引脚(air105适用)

正常初始化log文件

功能1:mp3播放及其他信息,实时显示在lcd屏幕上(st7789)

lcd初始化

spi_lcd = spi.deviceSetup(5,pin.PC14,0,0,8,48*1000*1000,spi.MSB,1,1)   
--debug信息:显示芯片类型st7789

log.info("lcd.init",  --HSPI接口管脚对应连接
lcd.init("st7735",{port = "device",pin_dc = pin.PE08 ,pin_rst = pin.PC12,pin_pwr = pin.PE09,direction = 0,w = 128,h = 160,xoffset = 2,yoffset = 1},spi_lcd))

显示音频文件信息:

--显示正在播放音频部分

            lcd.fill(0,70,320,100,0Xe3f9fd)

            lcd.drawStr(0,90,"播放中"..(curPlay+1).."/"..tFiles..":"..playList[curPlay],0XFF9999)

            lcd_music_munt()

 

其他详见music_demo.lua。

功能2:2x2 矩阵键盘自制及控制mp3播放,实现上下切歌以及播放暂停功能;

接线见以上硬件连接部分。

初始化代码:

    --初始化矩阵键盘部分

    key_in = {pin.PD13, pin.PD12}

    key_out = {pin.PC5, pin.PC4}

    softkb.init(0, key_in, key_out)

按键功能实例

功能3:挂在并读取sd卡/music目录中的音频文件;

--初始化SD卡部分,SD卡初始部分我是用的底部SPI2接线,具体情况根据自己使用修改

    local tagLen = 0

    local frameLen = 1152 * 4

    local spiId = 2

    local nowPlay

    local result = spi.setup(

        spiId,--串口id

        255, -- 不使用默认CS脚

        0,--CPHA

        0,--CPOL

        8,--数据宽度

        400*1000  -- 初始化时使用较低的频率

    )

    local isMP3 = false

    local TF_CS = pin.PB3

    gpio.setup(TF_CS, 1)

    -- fatfs.debug(1) -- 若挂载失败,可以尝试打开调试信息,查找原因

    fatfs.mount("SD", spiId, TF_CS, 24000000)

    -- fatfs.mount("SD", 0, TF_CS, 24000000)

读取音频文件:

 if data then

        log.info("fatfs", "getfree", json.encode(data))

        local dir_nums, dir_info = fatfs.lsdir(musicDir)

        for k,v in pairs(dir_info) do

            if k:find(".mp3") or k:find(".MP3") or k:find(".wav") or k:find(".WAV") then

                log.info("找到",k)

                playList[tFiles] = k

                tFiles = tFiles + 1

            end

        end

        log.info("总共", tFiles)

        prePlay = tFiles - 1

        log.info("等待切换歌曲")

其他详见music_demo.lua。

功能4: ATH10模块实时温湿度显示;

i2c接线:

VCC ——》3.3V

GND——》GND

SCL——》PE6

SDA——》PE7

初始化代码:

function aht10.init(i2c_id)

    i2cid = i2c_id

    sys.wait(40)--40 毫秒等待设备稳定

    i2c.send(i2cid, AHT10_ADDRESS_ADR_LOW, AHT10_SOFT_RESET)--软复位

    sys.wait(20)

    i2c.send(i2cid, AHT10_ADDRESS_ADR_LOW, AHT10_STATE)

    local data = i2c.recv(i2cid, AHT10_ADDRESS_ADR_LOW, 1)

    local _,state = pack.unpack(data, "b")

    if bit.isclear(state,3) then

        i2c.send(i2cid, AHT10_ADDRESS_ADR_LOW, {AHT10_INIT,0x08,0x00})--初始化

    end

    sys.wait(20)

    log.info("aht10 init_ok")

    return true

end

其他详见aht10.lua

功能5:DAC功放模块音频播放mp3音频

接线:

Audioin + ——》PC1

VCC ——》vbus(外接电源独立供电或开发板vbus引脚供电均可)

Audioin- ——》gnd

AudioOut——》扬声器+

DAC功放模块(不可调版,外接电源独立供电

注意:左右声道输出端的“负极”不可以并接在一起,否则会烧IC,并且通电前应先接好喇叭(负载)。额定工作电压2.5-5V,极限工作电压5.5V。

 DAC功放模块(可调版,开发板vbus引脚供电

PAM8403芯片端口

注意:左右声道输出端的“负极”不可以并接在一起,否则会烧IC,并且通电前应先接好喇叭(负载)。额定工作电压5V,电压过低不能正常驱动。

整体连接

PS: DAC数字模拟

1、DAC是一种将数字信号转换为模拟信号的设备,电脑对声音这种信号不能直接处理,先把它转化成电脑能识别的数字信号,就要用到声卡中的DAC,它把声音信号转换成数字信号,要分两步进行即采样和转换,即数/模转换器,一种将数字信号转换成模拟信号的装置。

2、数字信号是用于将数据表示为离散值序列的信号,在任何给定时间它只能取有限数量值中的一个,这与代表连续值的模拟信号形成对比,在任何给定时间,它代表一个连续数值范围内的实数, 单的数字信号代表模拟电平离散带中的信息,一定范围内的所有值代表相同的信息状态。

3、就PC和数字播放器/数字转盘而言,音频源文件通常为MP3,FLAC等,其中绝大多数音源文件均属于压缩文件,即便是FLAC和APE也属于压缩文件格式,只不过属于无损压缩而MP3则属于有损压缩。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

打酱油的工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值