发作品签到
专业版

暖冬造物-基于ESP32S3开发板的RDA5807M收音机

工程标签

279
0
0
0

简介

基于ESP32S3开发板,驱动RDA5807M模块,开发一个带有温湿度显示的收音机。

简介:基于ESP32S3开发板,驱动RDA5807M模块,开发一个带有温湿度显示的收音机。
”暖冬创趣迎新年“

开源协议

TAPR Open Hardware License

创建时间:2024-12-13 03:45:21更新时间:2025-02-05 10:04:11

描述

项目简介

本项目是基于立创的ESP32-S3开发板的收音机。

项目功能

本设计是基于立创的ESP32-S3开发板的收音机;
设置有4个独立按键;
设置有2个独立指示灯;
设置有1个温湿度采集。

项目参数

本设计采用ESP32-S3芯片,双核,主频高达240M;
本设计采用OLED液晶显示,显示当前的温度和湿度况;
选用全数字型温湿度传感器SHT40。
通过按键切换,可以静音,调整音量大小,切换频道

硬件说明

本项目由以下部分组成:主控部分、按键部分、显示部分、LED指示灯部分、收音机。

主控说明

立创ESP32-S3开发板是一款基于ESP32-S3芯片的高性能开发板,具备丰富的功能和特点,非常适合物联网、嵌入式开发等领域的应用。
一、芯片与性能
核心芯片:采用ESP32-S3芯片,该芯片集成了Xtensa® 32位LX7双核处理器,主频高达240MHz,内置512 KB SRAM(TCM),为复杂的数据处理和多任务执行提供了强大的计算能力。
AI加速:ESP32-S3增加了用于加速神经网络计算和信号处理等工作的向量指令,通过ESP-DSP和ESP-NN库,可以轻松实现高性能的图像识别、语音唤醒和识别等应用。
二、通信与连接
无线连接:支持Wi-Fi和Bluetooth 5(LE)双模通讯,降低了设备配网的难度,并支持蓝牙Mesh(Bluetooth Mesh)协议和乐鑫Wi-Fi Mesh,能够实现更高的通讯稳定性和更大的覆盖面积。
多种接口:拥有45个可编程GPIO管脚和丰富的通信接口,如SPI、I2C、UART等,便于与各种外设进行连接和扩展。
三、特色功能
电源管理:部分开发板可能集成了电源管理模块,支持锂电池充电和硬件开关机,提供了更加便捷的电源管理方案。
板载摄像头接口:部分型号的开发板板载了摄像头接口,并配备了独立的摄像头供电电路,减少了其他信号对摄像头的干扰,便于进行图像处理和视频传输等应用。
震动触觉:部分开发板还加入了手机般的人机交互震动触觉功能,通过振动电机驱动芯片实现更加丰富的交互体验。
四、开发工具与支持
开发环境:支持ArduinoIDE、ESP-IDF、MicroPython等多种开发环境,开发者可以根据自己的喜好和需求选择合适的开发工具进行编程。
例程与教程:官方提供了丰富的例程和教程,帮助开发者快速上手并进行项目开发。
技术支持:立创商城及其合作伙伴提供了多途径的技术支持,包括官方论坛、代码仓库、技术交流群等,方便开发者在遇到问题时寻求帮助。
五、适用场景
立创ESP32-S3开发板适用于多种场景,包括但不限于:
物联网设备开发:如智能家居、智能安防、智能穿戴等。
嵌入式系统开发:如工业自动化、农业自动化、智能交通等。
AI与机器学习应用:如图像识别、语音识别、自然语言处理等。

本项目使用的管脚和设计如下:

image.png

OLED显示

HS91L02W2C01显示屏是一款OLED显示屏,具有多种特性和应用场景。
基本参数
尺寸:0.91英寸
像素分辨率:128x32
接口类型:I2C
外形尺寸:38*12(单位可能为毫米,但具体单位需根据实物或数据手册确认)
工作温度:-40℃~+70℃,表明该显示屏在较宽的温度范围内都能正常工作。
技术特点
OLED技术:OLED(有机发光二极管)显示屏具有自发光的特性,能够实现更高的对比度和更广的色域,同时拥有更快的响应时间和更低的功耗。
I2C通讯:通过I2C接口进行通讯,使得该显示屏能够轻松与各种微控制器或处理器连接,实现数据的传输和控制。
黑底白光:采用黑底白光的显示方式,使得显示效果更加清晰明亮,适用于多种视觉环境。
应用场景
电子产品显示:由于尺寸小巧、功耗低且显示效果优异,HS91L02W2C01显示屏非常适合用于各种电子产品的显示界面,如智能手表、智能手环、便携式医疗设备等。
工业控制:在工业控制领域,该显示屏可以用于显示设备状态、参数设置等信息,帮助用户更直观地了解和控制设备。
其他领域:此外,该显示屏还可以应用于智能家居、汽车电子、安防监控等多个领域,为用户提供便捷的显示解决方案。
注意事项
在使用HS91L02W2C01显示屏时,需要参考其数据手册或相关文档,以确保正确连接和配置。
显示屏的显示效果和性能可能受到使用环境、驱动电路等多种因素的影响,因此在实际应用中需要进行适当的测试和调整。

image.png

按键电路

用来交互使用。
静音设置,
音量增大,
音量减小,
切换电台。

image.png

收音机模块

采用RDA5807M芯片,十分好用。

image.png

温湿度传感器

采用sht40模块,这里时为了学习使用。

image.png

指示灯电路

image.png

预留两路LED指示灯。

PCB设计

采用LC-EDA设计
image.png

3D外壳设计

采用LC-EDA设计

image.png

效果挺好的。

程序设计

采用VS-code进行编码。
主控代码如下:

#include 
#include 
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_chip_info.h"
#include "esp_flash.h"
#include "oled.h"
#include "esp_timer.h"
#include "sht40.h"
#include "driver/gpio.h"
#include "RDA5807.h"

#define LED1_PIN 14
#define LED2_PIN 13

char ss[20];
u8 i = 0;

// 设置按键的引脚
#define KEY1_PIN 48
#define KEY2_PIN 47
#define KEY3_PIN 18
#define KEY4_PIN 17
#define GPIO_INPUT_PIN_SEL ((1ULL << KEY1_PIN) | (1ULL << KEY2_PIN) | (1ULL << KEY3_PIN) | (1ULL << KEY4_PIN))

void KeyGpioConfig(void)
{
    // 初始化GPIO配置结构为零
    gpio_config_t io_conf = {};
    // 失能中断
    io_conf.intr_type = GPIO_INTR_DISABLE;
    // 设置输入引脚
    io_conf.pin_bit_mask = GPIO_INPUT_PIN_SEL;
    // 设置输入模式
    io_conf.mode = GPIO_MODE_INPUT;
    // 使能上拉电阻
    io_conf.pull_up_en = 1;
    // 失能下拉电阻
    io_conf.pull_down_en = 0;
    ////用给定的设置配置GPIO
    gpio_config(&io_conf);
}

int GetKeyValue(void)
{

    int key_value = 0;
    if (gpio_get_level(KEY1_PIN) == 0)
    {
        key_value |= 0x01;
        printf("k1\r\n");
    }
    if (gpio_get_level(KEY2_PIN) == 0)
    {
        key_value |= 0x02;
        printf("k2\r\n");
    }
    if (gpio_get_level(KEY3_PIN) == 0)
    {
        key_value |= 0x04;
        printf("k3\r\n");
    }
    if (gpio_get_level(KEY4_PIN) == 0)
    {
        key_value |= 0x08;
        printf("k4\r\n");
    }
    return key_value;
}

void app_main(void)
{

    OLED_Init(); // 初始化OLED
    OLED_Clear();
    OLED_DisplayTurn(1);
    OLED_Refresh();                                 // 更新显示
    gpio_reset_pin(LED1_PIN);                       // 初始化LED_PIN引脚
    gpio_set_direction(LED1_PIN, GPIO_MODE_OUTPUT); // 配置引脚为输出模式
    gpio_reset_pin(LED2_PIN);                       // 初始化LED_PIN引脚
    gpio_set_direction(LED2_PIN, GPIO_MODE_OUTPUT); // 配置引脚为输出模式
    gpio_set_level(LED2_PIN, 0);
    gpio_set_level(LED1_PIN, 0);

    IIC_Init();
    KeyGpioConfig();

    RDA5807M_init();
    vTaskDelay(500 / portTICK_PERIOD_MS);
    uint8_t Volume = 1;
    RDA5807M_Set_Volume(Volume);
    uint16_t basic_Freq = 8830;
    // RDA5807M_Search_ALL_Freq();
    RDA5807M_Set_Freq(basic_Freq);
    RDA5807M_Search_Freq_TurnUp();
    printf("Freq:%d\r\n", RDA5807M_Read_Freq());
    // RDA5807M_SetMutea(0);
    while (1)
    {
        int key_value = 0;
        key_value = GetKeyValue();

        if (key_value == 0x01) // 向左 频道减1
        {
            // basic_Freq++;
            // RDA5807M_Set_Freq(basic_Freq); // 设置接收频率
            RDA5807M_SetMutea(1);
        }
        else if (key_value == 0x02) // 向右 频道加1
        {
            // basic_Freq--;
            // RDA5807M_Set_Freq(basic_Freq);
            RDA5807M_Search_Freq_TurnUp();

            printf("Freq:%d-Sig:%d\r\n", RDA5807M_Read_Freq(),RDA5807M_Read_Signal_Intensity());
            RDA5807M_SetMutea(0);
        }
        else if (key_value == 0x04) // 确认 音量减1
        {
            if (Volume == 15)
            {
                Volume = 14;
            }
            Volume++;
            RDA5807M_Set_Volume(Volume); // 设置声音大小范围:(0~15)
        }
        else if (key_value == 0x08) // 退出 音量加1
        {
            if (Volume == 0)
            {
                Volume = 2;
            }
            Volume--;
            RDA5807M_Set_Volume(Volume);
        }

        OLED_Clear();
        sprintf(ss, "Freq:%d", RDA5807M_Read_Freq());
        OLED_ShowString(0, 0, (unsigned char *)ss, 8, 1); // 6*8
        sprintf(ss, "Signal:%d", RDA5807M_Read_Signal_Intensity());
        OLED_ShowString(63, 0, (unsigned char *)ss, 8, 1); // 6*8
        i = SHT40_Cal();
        if (!i)
        {
            sprintf(ss, "%3.1f", SHT40_GetTEM());
            OLED_ShowString(0, 8, (unsigned char *)ss, 24, 1);   // 6*8
            OLED_ShowString(48, 20, (unsigned char *)"C", 8, 1); // 6*8
            sprintf(ss, "%3.1f", SHT40_GetHUM());
            OLED_ShowString(73, 8, (unsigned char *)ss, 24, 1);    // 6*8
            OLED_ShowString(121, 20, (unsigned char *)"%%", 8, 1); // 6*8
        }
        else
        {
            sprintf(ss, "%d", i);
            OLED_ShowString(0, 8, (unsigned char *)ss, 24, 1); // 6*8
        }

        OLED_Refresh();

        vTaskDelay(500 / portTICK_PERIOD_MS);
    }
}

调试情况如下:
image.png

效果展示

image.png

可以移步B站观看
https://www.bilibili.com/video/BV1JzPyefE3Y/?vd_source=e36622a05269c0356d6cd566056a2488

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

附件

序号文件名称下载次数
1
封面.png
4
2
基于ESP32S3开发板的RDA5807M收音机.mp4
6
克隆工程
添加到专辑
0
0
分享
侵权投诉

工程成员

评论

全部评论(1)
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航