[PIC®/AVR®/dsPIC®产品]

【CuriosityNano测评报告】10.驱动JQ8400语音模块的实验

[复制链接]
689|4
手机看帖
扫描二维码
随时随地手机跟帖
hu9jj|  楼主 | 2021-4-20 20:08 | 显示全部楼层 |阅读模式
#申请原创#

    经过了将近一周的时间,终于完成了驱动JQ8400语音模块的实验。我使用的是还有SD卡槽的语音模块(详见下图):
JQ_02.jpg

    JQ8400语音模块的功能比较多,官方的简介如下:
JQ_03.jpg

    模块与单片机的通讯有一线串口通讯和两线串口通讯两种,其中两线串口通讯就是普通的串口通讯方式,通讯速率是9600,我是通过单片机的串口2与语音模块进行通讯的,测试过程的照片如下:
JQ_01.jpg

    开始按说明直接写代码,但没有成功,后来还是按步就班,通过厂家的调试工具先测试模块至正常放音,然后根据自动生成的数据来进一步了解和掌握其通讯协议,参照示例编写代码,厂家的调试工具如下:
JQ_04.jpg

    这是通过测试获得的数据:
JQ_06.jpg

    基础代码完成后,配合串口调试工具来观察实际数据:
JQ_05.jpg

    我使用模块的组合播放功能来播放动态时间,组合播放就是可以动态地将多个音频文件结合在一起接连播放,例如要播放当前时间,则事先录制好的语音文件按需要排列好,发送到语音模块后,模块便依次将这些语音播放出来,下面就是播放当前时间的函数:
//播放当前时间
void JQ8400_time(void)
{
    uint8_t i,j;
    UartBuff[1] = 0x1B;  //组合播放
    UartBuff[3] = 0x31;
    UartBuff[4] = 0x35;  //现在是北京时间
    i = 5;
    if(hour>19){
        UartBuff[i++] = 0x30;  //二
        UartBuff[i++] = 0x32;
        UartBuff[i++] = 0x31;  //十
        UartBuff[i++] = 0x30;
        if(hour>20){
            UartBuff[i++] = 0x30;
            UartBuff[i++] = 0x30 + hour%10;
        }
    }
    else if(hour>9){
        UartBuff[i++] = 0x31;  //十
        UartBuff[i++] = 0x30;
        if(hour>10){
           UartBuff[i++] = 0x30;
           UartBuff[i++] = 0x30 + hour%10;
        }
    }
    else{
        UartBuff[i++] = 0x30;
        UartBuff[i++] = 0x30 + hour%10;
    }
    UartBuff[i++] = 0x31;
    UartBuff[i++] = 0x36;          //点
    if(minute>0){
        if(minute>19){
            UartBuff[i++] = 0x30;
            UartBuff[i++] = 0x30 + minute/10;
            UartBuff[i++] = 0x31;
            UartBuff[i++] = 0x30;   //十
            if(minute%10 > 0){
                 UartBuff[i++] = 0x30;
                 UartBuff[i++] = 0x30 + minute%10;
            }
        }
        else if(minute > 9){
            UartBuff[i++] = 0x31;
            UartBuff[i++] = 0x30;    //十
            if(minute%10 > 0){
                UartBuff[i++] = 0x30;
                UartBuff[i++] = 0x30 + minute%10;
            }
        }
        else{
            UartBuff[i++] = 0x30;
            UartBuff[i++] = 0x30;
            UartBuff[i++] = 0x30;
            UartBuff[i++] = 0x30 + minute%10;
        }
        UartBuff[i++] = 0x31;
        UartBuff[i++] = 0x37;        //分
    }
    else{
        UartBuff[i++] = 0x32;
        UartBuff[i++] = 0x36;  //整
    }
    UartBuff[2] = i - 3;       //长度
    UartBuff[i] = 0;
    for(j=0; j<i; j++){
        UartBuff[i] += UartBuff[j];//和校验
    }
    JQ8400_send(i+1);
}


    下面是通过串口2向语音模块发送数据的函数,为方便测试,在发送时同时还通过串口3发送到电脑中:
void JQ8400_send(uint8_t len)
{
    uint8_t i;
    for(i=0; i<len; i++){
        USART2_Write(UartBuff[i]);
        USART3_Write(UartBuff[i]);
    }   
}


    在测试过程中生成和编辑需要的音频文件也花费了不少时间,下面是测试的视频文件压缩包。
JQ_1.rar (919.89 KB)
JQ_00.jpg

使用特权

评论回复
pzsh| | 2021-4-20 22:06 | 显示全部楼层
强! 现在算是完整的门铃了吧?

使用特权

评论回复
hu9jj|  楼主 | 2021-4-21 09:17 | 显示全部楼层
pzsh 发表于 2021-4-20 22:06
强! 现在算是完整的门铃了吧?

    这次实验项目是多功能时钟,具有日历时钟、定时、计时和闹铃等功能,目前项目基本功能已经完成,还需要进一步优化和完善。

使用特权

评论回复
lcczg| | 2021-4-21 15:50 | 显示全部楼层
感觉很多语音场景都能用上

使用特权

评论回复
hu9jj|  楼主 | 2021-4-21 18:56 | 显示全部楼层
lcczg 发表于 2021-4-21 15:50
感觉很多语音场景都能用上

是的,添加了语音的电子产品更容易受到大家的喜爱。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:Microchip
简介:让我们来为您提供帮助。我们可提供各种资源来帮助您解决一切问题。是否需要与我们的客户支持团队联系?您可以通过电话、在线聊天功能或电子邮件与他们联系。

144

主题

1031

帖子

11

粉丝