0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于LVGL驱动的OLED屏的FFT声音实时可视化

柴火创客空间 来源:柴火创客空间 2023-11-25 14:20 次阅读

本项目旨在利用LVGL驱动的 Xiao-expansion-board的OLED显示屏实现FFT声音数据的实时可视化。关键内容包括利用LVGL库在OLED屏幕上进行数据可视化展示,在XIAO ESP32S3 Sense上进行声音数据的高速采集和预处理,以及同步进行FFT (快速傅里叶) 变换计算。该项目利用了XIAO ESP32S3 Sense开发板的I2S麦克风组件和XiaoExpansion board的OLED实现音频数据可视化的过程,深入地了解声音数据处理与可视化的技术细节,为实时声音及音乐数据监测与展示提供参考和应用价值。

材料清单

硬件

XIAOESP32S3 Sense

XiaoExpansion board

软件:

Visual Studio Code

STEP1 - LovyanGFX驱动oled屏幕

XiaoExpansionboard拓展了多个grove接口,同时还配备了一个入门级别的ssd1306_oled,按照常规ssd1306就该使用u8g2这样的功耗上古神器来驱动,但随着很多高性能嵌入式开发板出现了,图形驱动更新迭代的速度也加快了,驱动ssd1306也有了更多选择。我们值得拥有最好的, 本项目中使用LovyanGFX图形驱动库来驱动ssd1306。LovyanGFX库受TFT_eSPI启发,深度改造而来,是很多大众创客的挚爱,它不单只可以驱动常见的LCD屏幕,同时还可以支持一些oled屏幕,使用这个库使得最简单入门级别的ssd1306 oled屏幕也可以共享LCD屏幕才有的作图函数。

在本项目完成了对xiao系列扩展板上的ss1306的适配,更进一步地,按照当下最流行的lvgl图形库的作图机理进行了移植,极大的丰富了xiao扩展板的ssd1306的应用场景,希望你也能从中受到启发,这个项目能为你今后的工作带来便利。

5dc4110e-8b48-11ee-939d-92fbcf53809c.png5dcce1e4-8b48-11ee-939d-92fbcf53809c.png

5dd76592-8b48-11ee-939d-92fbcf53809c.png

STEP2 -基于ssd1306的lvgl移植

传统的图形绘制库(例如经典TFT_eSPI,Adafruit_GFX,Lovyan_GFX等)可以帮助用户快速的完成方案。LVGL(Light and Versatile Graphics Library)的出现给嵌入式开发在最终产品呈现上提供了一种更优雅的解决方案。LVGL相对于传统图形库更适合用于嵌入式系统,它在性能、资源占用和灵活性方面都有一定的优势。然而在ssd1306上运行lvgl曾经是多么高远的梦想呀,如今我们在Arduino编程环境上就可以轻松使用上,也可以共享广阔的开源繁荣,是一次重大的进步。

移植完成后,在ssd1303上可以流畅运行lvgl的项目,但在程序设计的时候注意颜色最好能指定白色或者黑色,这样显示效果更清晰。

LVGL它与传统的图形库有几个显著的差异:

1.硬件加速支持:LVGL具有对硬件加速的支持,可以利用硬件功能来加快图形渲染速度和降低CPU负载,而传统的图形库则通常依赖于软件渲染。

2. 内存需求:LVGL设计时考虑了嵌入式系统的资源限制,因此在内存占用上更为高效,这使得它在资源受限的嵌入式设备上表现更出色。

3. 事件处理:LVGL提供了灵活且强大的事件处理机制,能够方便地实现触摸屏、按键等输入设备的交互,而传统图形库在这方面可能需要额外的定制和开发。

4. 主题和样式:LVGL提供了丰富的主题和样式支持,可以轻松地定制界面外观和风格,而传统图形库可能需要较多的工作来实现相同的效果。

5. 跨平台支持:LVGL被设计成可跨平台使用,可以在不同的嵌入式系统上运行,而传统图形库可能需要针对特定平台进行适配或者重新开发。

5de25826-8b48-11ee-939d-92fbcf53809c.png

STEP3-声音频谱解析

(1)I2S麦克风的设置

XIAOESP32S3 Sense除了装备有摄像头还有一个I2Smicrophone,所以可以开展天马行空的语音类的项目。本项目正是利用了I2S microphore的优良特性,在本项目中发挥了键作用。i2s_config 中我们主要关注的参数包括sample_ratedma_buf_cout、dma_buf_len这3个参数。采样率、dma数量、dma_buf长度参数的不同会对数据最终呈现产生明显区别。采样率越快就更能捕获声音的细节信息,但也不是可以无限的放大,我这里设了64000,意思是1秒钟能采集64000个数值,这个能力是ADC机制的麦克风无法企及的。DMA 是 "Direct Memory Access"(直接内存访问)允许外部设备直接访问系统内存,而无需CPU的干预。这样可以提高数据传输的效率,减少对CPU的负担,从而提升系统整体性能。这里我们用一个比喻来帮助大家理解体会DMA和MCU之间的关系,DMA它就像会自己独立好学的孩子,它完成“作业”后,就会向老爸(cpu/mcu)报告,然后在老爸忙检查作业的时候,这个好孩子又自觉得跑去做另一门作业了,一刻也没停过,反倒老爸忙个不停。这样理解的话dma_buf_count 参数至少是2,(就是给孩子布置两份作业一个数学,一个语文,轮流干,不然做完一门作业他就没事干了,肯定会跑去玩手机,也可设为3,多布置一份英语作业)。dma_buf_len这里呢,就更有意思了,因为好孩子一把作业做完就会立即送去给老爸看,如果这孩子做一个题目就去给老爸看,就不断的去打扰老爸,老爸就会很烦,老爸就跟孩子说你把这一整页都做完了再来找我,所以为了减少对cpu的占用次数和时间,也把这参数设得尽量大,但也有个范围是8-1024,这样孩子跟老爸默契的配合下,老爸工作安心工作,孩子认真学习,其乐融融,大家的工作都完成得很漂亮。

5f7f2524-8b48-11ee-939d-92fbcf53809c.png    

5f9be8c6-8b48-11ee-939d-92fbcf53809c.png

(I2S调参指南)

(2)FFT数据处理

在台面上我们只看到两个入口函数,第一步用FreeRTOS 在esp32的第二个核心上创建一个音频数据处理任务,这个任务的句柄是processing_task_handle,第二个是 i2s_sampler.start 函数,我们把刚才配置好的i2s设置传递给它,它就会在后台默默的干活并通过上述句柄将dma采集到的数据释放出来。在I2SSampler里面FreeRTOS的经典招式都用上了,包括消息队列,消息直接通知,多任务创建,看似慌乱,实际是在密锣紧鼓的忙乎着给老板们“做饭”。另外一个功臣是Processor,它就是FFT的化身,它接收了I2SSampler传来的消息,然后嚼烂消化成漂亮干净的数据。我就是喜欢这样的好同事,一直默默无闻地工作,做好事不留名。实际这些在后台默默无闻埋头苦干的小伙伴们才这个项目的精华部分。

5fc507d8-8b48-11ee-939d-92fbcf53809c.png

(3)LVGL动态绘图

我们采用一个振幅更新函数(bar_value_update)来处理频谱和屏幕大小适配的工作,它接受一个傅里叶变换计算得到的浮点型数组mag,循环遍历mag数组的每隔两个元素,计算它们的平均值ave,并将其与窗口高度进行比较得到柱状图的值。整体逻辑是计算加权平均值,然后根据条件判断,更新柱状图的值和峰值,并且采用了一阶滞后的平滑处理,使得柱状图的变化更加平稳。

而图形的绘制关键环节在于把频谱对象作为一个容器进行绘制(spectrum_draw_event_cb),绘图没有采用lvgl常规的使用预设的作图函数,而是采用底层的绘图方法。绘图实际发生在LV_EVENT_DRAW_POST(绘图结束后)事件,会对频谱对象进行绘制操作。整个过程中使用了绘制矩形(lv_draw_rect)、绘制线条(lv_draw_line)机制等。矩形图代表瞬时的频谱强度,线条用于代表频谱峰值的滞后响应,由于线条的宽度是2 像素,所以看起来也是一个小长方体。它通过循环遍历一个大小为频谱分析结果数据SAMPLE_SIZE的数组,绘制矩形和两条线条,其中bar_chart和bar_chart_peaks是用于确定柱状图高度的数据数组。快速地在spectrum_obj对象上绘制柱状图,并通过柱状图的高度数据进行实时更新。即使是在非黑即白的Oled屏上也能够响应及时,产生了良好的动态效果。

5feb8958-8b48-11ee-939d-92fbcf53809c.png

总结

最终在xiao expansion board的屏幕上展示了经过FFT处理的音乐信息,它能够即时的对当前麦克风采集到声音作出反馈。它就好像是一座小型的音乐的喷泉,在水平面被音符的动能弹起,形成了美丽的水花飞溅的壮观场景。每一个频率成分就如同飞溅的水花一样,展现出音乐中多姿多彩的细节和纹理,从低频的稳重沉郁到高频的轻盈活泼,每个音符都呈现出独特的张力与韧性。充分展现了FFT解析音乐的魅力和神奇之处,通过这种方式让人仿佛能够透过频谱数据看到音乐的灵魂,令人陶醉。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FFT
    FFT
    +关注

    关注

    15

    文章

    425

    浏览量

    58644
  • OLED屏
    +关注

    关注

    0

    文章

    154

    浏览量

    20651
  • SSD1306
    +关注

    关注

    2

    文章

    40

    浏览量

    13393
  • 快速傅里叶变换

    关注

    0

    文章

    12

    浏览量

    1634
  • LVGL
    +关注

    关注

    0

    文章

    75

    浏览量

    2404

原文标题:创客项目秀|基于LVGL驱动的OLED屏的FFT声音实时可视化

文章出处:【微信号:ChaiHuoMakerSpace,微信公众号:柴火创客空间】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    何谓单片机编程的可视化?

    何谓单片机编程的可视化?可视化编程就是提供给用户可视化的器件模块配置界面使用户在不用关心具体器件工作原理和设置的情况下直接生成所要配置的器件初始代码及
    发表于 07-08 16:53

    基于无线的应急现场可视化协作系统设计

    应急现场可视化协作系统基于各种先进的技术,面向城市应急现场处理和协作问题,提供可靠、快速、完整的城市应急现场可视化协作系统方案,为应急事件实时上报、应急事件快速响应、应急事件远程指挥和调度、应急
    发表于 07-26 18:10

    【NanoPi2申请】可视化智能小车

    申请理由:想使用开发板提高职能小车的可视化程度项目描述:通过开发板实时小时智能小车的工作进程
    发表于 11-11 11:00

    可视化MES系统软件

    管理层以图表、图像形式将过程控制数据、质量控制数据、实时更新的数据和历史统计的数据可视化展示,让管理者更直观地管理生产现场。最后,可通过接口管理平台实现与ERP,MES系统软件,PDM,CAPP等系统信息
    发表于 11-30 19:55

    如何把AD中非可视化区域物件移到可视化区域?

    AD中非可视化区域物件怎么移到可视化区域???
    发表于 09-10 05:36

    可视化电子看板系统的岗位需求

    的角度来说,企业看板可以分为传送看板(作用于工序间的准时供应)、生产看板(作用于工序内的生产指导)、管理看板(作用于实时管理、外驱动力)、绩效看板(作用于员工自省,内驱动力)、临时看板。从岗位需求谈
    发表于 10-19 20:07

    基于STM的可视化门禁系统

    基于STM的可视化门禁系统
    发表于 03-07 09:49

    基于stm的可视化门禁系统

    基于stm的可视化门禁系统
    发表于 03-11 09:23

    Python数据可视化

    Python数据可视化:网易云音乐歌单
    发表于 07-19 08:30

    请问大的数据可视化分析报表怎么做?

    是数据可视化分析的一个展示方式,和pc(电脑)端、手机移动端一样都需要在pc端进行规划和设计。那么,怎么在pc端快速制作一张大数据可视化分析报表?需要注意些什么问题?我们接着往下
    发表于 09-08 16:58

    三维可视化的应用和优势

    ,为此三维可视化运维系统登场了。  三维可视化的应用  宏观场景可视化:在特定的环境中对随着时间推移而不断变化的目标实体进行检测,可以直观、灵活、逼真的展示所处区域的情景和环境,可以快速掌握目标区域
    发表于 12-02 11:52

    有了它,0基础也能做大可视化

    设备对BI软件来说就只是个设备,重头戏是在大可视化报表的设计上。很多人,特别是新手可能不知道该怎么去做一份大可视化报表。这个时候你就
    发表于 12-24 14:01

    可视化报表也能自助分析了

    不管是在什么样规格的大设备上展示的大可视化分析报表,都能做自助式分析。也就是任意浏览者都能随时点击切换字段与维度组合,从而切换到任意角度进行数据可视化分析。大
    发表于 02-06 10:36

    常见的几种可视化介绍

    说说常见的几种可视化一、信息可视化信息可视化就是对抽象数据进行直观视觉呈现的研究,抽象数据既包含数值数据,也包含非数值数据如文本信息、地图信息等,它们可通过利用图形图像处理、人机交互、人工智能的技术
    发表于 07-12 07:49

    可视化设计模板 | 主题皮肤(报表UI设计)

    下载使用可视化设计模板,减少重复性操作,提高报表制作效率的同时也确保了报表风格一致,凸显关键数据信息。 软件:奥威BI系统,又称奥威BI数据可视化工具 所属功能板块:主题皮肤上传下载(数据
    发表于 09-12 10:10