基于FireBeetle 2 ESP32-E音乐频谱仪
使用ESP32 ADC对声音信号进行采样,采样声音ADC数据后进行FFT变换,通过LVGL的图表显示在屏幕上。
标签
Funpack活动
退役熬夜选手
更新2023-01-04
638

基于FireBeetle 2 ESP32-E音乐频谱仪

——Funpack第二季第三期:FireBeetle 2 ESP32-E IoT 开发板

项目介绍

用FireBeetle ESP32-E开发板作为控制单元,搭配显示屏移植lvgl图形库,动态显示任意一个及以上传感器采集到的数据,或者使用触摸屏对执行器进行控制。

设计思路

使用FireBeetle ESP32-E开发板板载ADC对声音模块电压信号进行连续采样,采样完成后将声音ADC数据进行FFT变换,然后将FFT变换后的数据通过LVGL的图表显示在1.9寸TFT屏幕上。

硬件设计

主控使用FireBeetle ESP32-E开发板,由DFRobot公司设计生产,FireBeetle ESP32-E是一款基于ESP-WROOM-32E双核芯片的主控板,支持WIFI和蓝牙双模通信并具有体积小巧超低功耗板载充电电路接口易用等特性。可灵活的用于家庭物联网改装工业物联网改装可穿戴设备等等。

· 拥有更丰富的软硬件资源

· 体积小巧,仅25.4 × 60 mm

· ESP32双核低功耗主控,WiFi+BT4.0二合一

· GDI显示接口,可以单线连接显示屏

· 板载充电电路以及PH2.0锂电池接口

FireBeetle Board-ESP32-E

传感器 使用的是模拟声音传感器,可用来对周围环境中的声音强度进行检测,具有300倍的放大器,输出模拟信号能使用3.3V和5V为基准AD采集,可以用来实现根据声音大小进行互动的效果。

模拟声音传感器

屏幕显示拓展板使用立创EDA软件设计了FireBeetle ESP32-E的TFT拓展板,板载1.9寸TFT屏幕、SHT30温湿度模块、4个触摸按键和3Pin外接接口。

原理图如下:(需要注意引脚34-39只能用做输入)

image-20221229113946100

屏幕显示拓展板渲染图如下图:

image-20221229112406061

FireBeetle ESP32-E开发板与屏幕显示拓展板装配效果如下图:

image-20221229112116577

软件设计

软件开发使用PlatformIO进行开发,框架使用Arduino,上手较简单,同时Arduino提供十分丰富的库,大大加快了开发速度。

音乐频谱显示

声音频谱显示效果如下图:

image-20221230100126395

FFT使用的是arduinoFFT库,通过将ADC的声音信号多次采样,然后进行FFT运算。

void Adc_fft(void)
{
    sampling_period_us = round(1000000*(1.0/samplingFrequency));
    microseconds = micros();
    for(int i=0; i<samples; i++)
    {
        vReal[i] = analogRead(ADC_PIN);
        vImag[i] = 0;
        while(micros() - microseconds < sampling_period_us){
        //empty loop
        }
        microseconds += sampling_period_us;
    }
    /* Print the results of the sampling according to time */
    FFT.Windowing(vReal, samples, FFT_WIN_TYP_HAMMING, FFT_FORWARD);    /* Weigh data */
    FFT.Compute(vReal, vImag, samples, FFT_FORWARD); /* Compute FFT */
    FFT.ComplexToMagnitude(vReal, vImag, samples); /* Compute magnitudes */
    Serial.println("Computed magnitudes:");
    PrintVector(vReal, (samples >> 1), SCL_FREQUENCY);
    double x = FFT.MajorPeak(vReal, samples, samplingFrequency);
    Serial.println(x, 6); //Print out what frequency is the most dominant.
} 

FFT显示使用的是LVGL的chart控件,直接将运算的数据赋值到屏幕上进行显示。

void ui_FFT(void)
{
    /*Create a chart*/
    chart = lv_chart_create(lv_scr_act());
    lv_obj_set_size(chart, 320, 170);
    lv_obj_align(chart, LV_ALIGN_CENTER, 0, 0);
    lv_chart_set_type(chart, LV_CHART_TYPE_BAR);   /*Show lines and points too*/
    lv_chart_set_point_count(chart, 16);
    lv_chart_set_range(chart, LV_CHART_AXIS_PRIMARY_Y, 0, 2000);
​
    chart_ser1 = lv_chart_add_series(chart, lv_color_hex(0xfb1505), LV_CHART_AXIS_PRIMARY_Y);
    lv_chart_set_next_value(chart, chart_ser1, vReal[0]);
 
    lv_chart_refresh(chart); /*Required after direct set*/
}

屏幕驱动库使用的是TFT_espi库,这个库作为屏幕开发常用库。

时钟显示器

image-20221229154109501

系统上电后首先连接WIFI,连接成功后通过WIFI获取sntp时间,然后将时钟数据发送到LVGL对应的控件进行显示。因为FireBeetle ESP32-E板载了锂电池充放电电路,因此时钟也可通过电池驱动。

小结

FireBeetle ESP32-E具有丰富的开发方式,深度支持ArduinoIDE,还可以使用MicroPython、Mind+图形化等编程环境。同时ESP32丰富的板载资源使得完成相关的任务较为简单。音乐频谱显示有待优化,可以将不同的柱变换为不同的颜色增加观赏性。

最后,感谢电子森林和硬禾学堂提供的开发板和项目实战计划,同时给出了大量的开源学习资料和教学视频,让我可以很快上手。

源代码上传在附件。

附件下载
FireBeetle LVGL.7z
源码压缩包
团队介绍
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号