暑假一起练——基于ESP32-S2-Mini-1模块制作的收音机
基于ESP32-S2-Mini-1模块制作的收音机 实现网络收音机/FM收音机的功能
标签
WiFi
ESP32-S2
收音机
安先生
更新2021-09-13
1733
  • 开发板介绍
    本平台使用了乐鑫公司的ESP32-S2-Mini-1模块,ESP32-S2-MINI-1是一颗通用型Wi-Fi MCU模组,功能强大,具有丰富的外设接口,可用于可穿戴电子设备、智能家居等场景。主要配置
    • Core: Xtensa® single-core 32-bit LX7 CPU, frequency up to 240MHz
    • Memories:
      • 128 KB of ROM
      • 320 KB of SRAM
      • 16 KB of RTCSRAM
      • 4 MB of Flash memory
     
    本期任务 实现网络收音机/FM收音机的功能
    • 可以通过WiFi接收网络上的电台,也可以通过FM模块接收空中的电台,并可以通过按键进行切换、选台
    • 在OLED显示屏上显示网络电台的IP地址、节目名字等相关信息或FM信号的频段
    • 系统能够自动校时,开机后自动调节到准确的时间(年、月、日、时、分、秒)
     
    功能介绍
     
    • 开发环境搭建
    此项专门提出来,是因为ESP32开发环境实在比较折腾。
    网上相关的教程也非常多 ,但考虑到ESP32 S2比较新 加上ESP32迭代较快。
    以下提供windows下面最简单的办法。
    2, 下载并安装环境(此处需要特别注意 经常会下载失败。 需要自备上网工具 保持网络畅通)
    3, 选择用eclipse 开发
    主要参考链接
    • 功能开发
    总体框架Fn19s-MXYS1xTJAn7Q3LgGFHeKTK如图所示
    需要首先进行初始化,包括GPIO初始化 OLED屏幕初始化,FM初始化 音频模块初始化
    其次 进行wifi链接 ,链接成功后 进行同步时间 与在线FM播放。
    同时也能支持本地通过FM模块播放。
     
    1,时间校准
    时间校准 是用了一个通用的时间同步服务, SNTP服务。
    这里是用中国区的服务器
    cn.pool.ntp.org
     
    相关代码
        ESP_LOGI(TAG, "Initializing SNTP");
        sntp_setoperatingmode(SNTP_OPMODE_POLL);
        sntp_setservername(0, "cn.pool.ntp.org");
        sntp_set_time_sync_notification_cb(time_sync_notification_cb);
    #ifdef CONFIG_SNTP_TIME_SYNC_METHOD_SMOOTH
        sntp_set_sync_mode(SNTP_SYNC_MODE_SMOOTH);
    #endif
        sntp_init();
     
    2, WiFi链接
    wifi 需要配置好wifi的链接服务,然后通过后台的回调 链接网络。
    相关代码
        esp_periph_config_t periph_cfg = DEFAULT_ESP_PERIPH_SET_CONFIG();
        esp_periph_set_handle_t set = esp_periph_set_init(&periph_cfg);
        periph_wifi_cfg_t wifi_cfg = {
            .ssid = EXAMPLE_WIFI_SSID,
            .password = EXAMPLE_WIFI_PASS,
        };
        esp_periph_handle_t wifi_handle = periph_wifi_init(&wifi_cfg);
        esp_periph_start(set, wifi_handle);
        periph_wifi_wait_for_connected(wifi_handle, portMAX_DELAY);
     
    3, FM模块播放
    FM模块 可以支持播放FM音频。同时支持调节FM频率
    相关代码
    ESP_ERROR_CHECK(rda5807m_init_desc(&dev, I2C_PORT, SDA_GPIO, SCL_GPIO));
    ESP_ERROR_CHECK(rda5807m_init(&dev, RDA5807M_CLK_32768HZ));
    ESP_ERROR_CHECK(rda5807m_set_volume(&dev, 10));
    ESP_ERROR_CHECK(rda5807m_set_band(&dev, RDA5807M_BAND_76_108));
    ESP_ERROR_CHECK(rda5807m_set_frequency_khz(&dev, DEF_FREQ));
    
    
    ESP_ERROR_CHECK(rda5807m_seek_start(&dev, true, true, RDA5807M_SEEK_TH_DEF));/
    memset(&state, 0, sizeof(state));
    ESP_ERROR_CHECK(rda5807m_get_state(&dev, &state));
    ESP_ERROR_CHECK(rda5807m_seek_stop(&dev));
    

     

    4,在线FM播放
    通过网络FM播放 音频节目 。
    这里用的是中国之声的链接:
    http://open.ls.qingting.fm/live/386/64k.m3u8?format=aac
     
    相关代码
  •  
        audio_event_iface_cfg_t evt_cfg = AUDIO_EVENT_IFACE_DEFAULT_CFG();
        audio_event_iface_handle_t evt = audio_event_iface_init(&evt_cfg);
    
        ESP_LOGI(TAG, "[4.1] Listening event from all elements of pipeline");
        audio_pipeline_set_listener(pipeline, evt);
    
        ESP_LOGI(TAG, "[4.2] Listening event from peripherals");
        audio_event_iface_set_listener(esp_periph_set_get_event_iface(set), evt);
    
        ESP_LOGI(TAG, "[ 5 ] Start audio_pipeline");
        audio_pipeline_run(pipeline);
     
    功能演示
    Fn3BKNCnfz_fqB5roUx_zI1sBhR2Fovlj8PHAe0hl4YtJOhcCpLIzoR_FhOZEv43Zq-jrRV5bsPM4gr1dTuH
     
    FkTuSBhkDaCLPlnm4ODLwsElfFNH
  • 心得体会
    挺感谢主办方, 活动越来越好 越好越好。
附件下载
demo.zip
ESP32-S2 源码 用eclipse 打开
团队介绍
安迪,一线嵌入式攻城狮,喜欢捣腾开发板,钻研技术。
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号