ESP32+MY1680U实现语音播报


文章目录

  • ESP32+MY1680U实现语音播报
  • 前言
  • 一、MY1680U-12P 语音模块
    • 1、概述
    • 2、参数说明
  • 二、代码实现
    • 1.MY1690.c
    • 2.MY1690.h
    • 3.main.c
  • 总结

前言

在这一章将实现MY1680U语音模块播放MP3,语音播报存入的语句。
需要用到的资料 提取码:lwm2


一、MY1680U-12P 语音模块

1、概述

MY1680U-12P 是深圳市迈优科技有限公司自主研发的一款小巧的集成MP3模块。采用MY1680U-16S MP3主控芯 片,支持MP3、WAV格式双解码,模拟U盘下载。模块内置FLASH存储芯片,1-16M容量可选;也可外接U盘或USB数据线连接电脑更换FLASH的音频文件。该模块内置3W功放,可以直接驱动3W的喇叭,使用更方便。

产品特性

  • 支持 MP3 、WAV 高品质音频格式文件,声音优美。
  • 24 位 DAC 输出,动态范围支持 93dB,信噪比支持 85dB。
  • 完全支持 FAT16、FAT32 文件系统,最大支持 16M FLASH,32G 的 U 盘。
  • 支持 UART 异步串口控制:支持播放、暂停、上下曲、音量加减、选曲播放、插播等。
  • ADKEY 功能,通过电阻选择可实现标准 MP3 功能的 5 按键控制和其他功能。
  • 内置音量、曲目掉电记忆功能。  支持 USB 连接电脑下载声音。
  • 自带 3W 的功放,直接外接喇叭即可完成播放;音量不够客户也可外接功放。
  • MY1690-12P 插 SD 卡模块与这款管脚兼容,需要升级大存储空间方便更换

2、参数说明



MY1680U-12P内置标准UART异步串口接口,为3.3V TTL电平接口,波特率9600。可通过MAX3232芯片转换成RS232电平或者通过 USB转TTL模块与PC通讯进行调试。通讯数据格式是:
起始位:1位;数据位:8位;奇偶位:无;停止位:1位。
向语音模块里面传入音频文件可以通过USB连接电脑传输也可以通过USB转TTL模块,使用电脑串口调试助手,传输音频文件
USB转TTL模块与MY1680U-12P的连接图

这里是串口调试助手的下载地址 提取码:lwm2

使用普通安卓手机数据线连接模块,第一次连接会自动安装驱动。安装成功后电脑弹出可移动磁盘,直接将声音命名好然后拖进磁盘内便可

照歌曲命名规则

  • 存根目录时按以下方式命名,四位数字开头命名,后面可以带中文也可以不带。
  • 建文件夹时按以下方式命名,文件夹以两位数字开头命名,文件夹内歌曲以三位数字命名后面可以带中文也可以不带。

朗读女 提取码:lwm2
这个软件可以把你输入的文本合成语音生成音频文件

二、代码实现

1.MY1690.c

代码如下:

#include "MY1690.h"VOICE_DEV voice1={.frame_head = 0x7E,.frame_end = 0xEF};
//0 1 2 3 4 5 6 7 8 9 10 100 1000 10000
u8 Voice_Table[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21};//MY1690通信接口初始化
void MY1690_UARTConfig(u32 brr)
{GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;//开时钟RCC_APB2PeriphClockCmd(MY1690_TX_CLK | MY1690_RX_CLK, ENABLE);MY1690_UART_CLKCMD(MY1690_UART_CLK, ENABLE);//结构体赋值GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Pin = MY1690_TX_PIN;GPIO_Init(MY1690_TX_PORT, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_InitStructure.GPIO_Pin = MY1690_RX_PIN;GPIO_Init(MY1690_RX_PORT, &GPIO_InitStructure);//初始化USART  波特率brr 打开发送和接收器  无奇偶校验  一个停止位  8个数据位USART_InitStructure.USART_BaudRate = brr;USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_InitStructure.USART_Parity = USART_Parity_No;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_Init(MY1690_USART, &USART_InitStructure);USART_Cmd(MY1690_USART,ENABLE);//使能USART
}//MY1690发送数据函数
void MY1690_SendString(u8 *str,u8 lenth)
{for(u8 i=0; i<lenth; i++){while(USART_GetFlagStatus(MY1690_USART,USART_FLAG_TC) == RESET);USART_SendData(MY1690_USART, str[i]);        }
}/********************************************************
函数名称:MY1690_Init
函数功能:MY1690初始化
函数传参:无
函数返回值:无
*******************************************************/
void MY1690_Init(void)
{//BUSY管脚初始化GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(MY1690_BUSY_CLK, ENABLE);GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Pin = MY1690_BUSY_PIN;GPIO_Init(MY1690_BUSY_PORT, &GPIO_InitStructure);//USART初始化MY1690_UARTConfig(9600);Voice_SendCmd(0x38,0x01,0x00,1);
}/*********************************************************函数名称:Voice_XorCheck*函数功能:^检测 *函数传参:*            *pdata -- 校准参数*         lenth  -- 参数的个数*函数返回值:^后的数********************************************************/
u8 Voice_XorCheck(u8 *pdata,u8 lenth)
{u8 r_value = *pdata;u8 i = 0;for(i=1;i<lenth;i++){r_value ^= pdata[i];}return r_value;
}/***********************************************************函数名称:Voice_SendCmd*函数功能:发送命令 *函数传参:*              cmd -- 命令*              arg1 -- 第一个参数*              arg2 -- 第二个参数*              arg_lenth -- 参数个数*函数返回值:无**********************************************************/
void Voice_SendCmd(u8 cmd,u8 arg1,u8 arg2,u8 arg_lenth)
{//给voice1传递参数//命令填充voice1.cmd = cmd;//参数填充voice1.arg[0] = arg1;voice1.arg[1] = arg2;voice1.arg[2] = arg_lenth;//长度填充voice1.lenth = 3+arg_lenth;//长度 + cmd + xor + 参数长度voice1.xorcheck = Voice_XorCheck(&voice1.lenth,2+arg_lenth);//lenth+cmd + 参数//发送MY1690_SendString(&voice1.frame_head,3);//帧起始+长度+命令MY1690_SendString(voice1.arg,arg_lenth);//发送参数MY1690_SendString(&voice1.xorcheck,2);//异或值+帧尾
}//播放指定目录文件下的音乐
//directorynum:目录编号
//musicnum:音乐编号
void Voice_PlayDirectoryMusic(u8 directorynum, u8 musicnum)
{while(VoicePlay_Busy);Voice_SendCmd(CMD_CHOOSE_MUSIC,directorynum,musicnum,2);
}

2.MY1690.h

代码如下:

#ifndef _MY1690_H_
#define _MY1690_H_#include "stm32f10x.h"
#include "stdio.h"/*********************MY1690底层接口宏定义************************************/
#define MY1690_USART                    USART2
#define MY1690_UART_CLKCMD      RCC_APB1PeriphClockCmd
#define MY1690_UART_CLK             RCC_APB1Periph_USART2#define MY1690_TX_CLK                  RCC_APB2Periph_GPIOA
#define MY1690_TX_PORT              GPIOA
#define MY1690_TX_PIN                   GPIO_Pin_2#define MY1690_RX_CLK                 RCC_APB2Periph_GPIOA
#define MY1690_RX_PORT              GPIOA
#define MY1690_RX_PIN                   GPIO_Pin_3#define MY1690_BUSY_CLK               RCC_APB2Periph_GPIOB
#define MY1690_BUSY_PORT            GPIOB
#define MY1690_BUSY_PIN             GPIO_Pin_6/**********************MY1690命令宏定义*******************************/#define CMD_PLAY                0x11            //播放
#define CMD_STOP                0x12            //暂停
#define CMD_NEXT                0x13            //下一曲
#define CMD_PREV                    0x14            //上一曲
#define CMD_VOICEADD        0x15            //音量加
#define CMD_VOICESUB        0x16            //音量减
#define CMD_RESET           0x19            //复位
#define CMD_SPEED           0x1A            //快进
#define CMD_SLOW            0x1B            //快退
#define CMD_STARTorSTOP     0x1C            //播放/暂停
#define CMD_END             0x1E            //停止
#define CMD_ROOTCHO_MUSIC 0x41            //根目录选择歌曲
#define CMD_CHOOSE_MUSIC    0x42            //任意目录选择歌曲//数据帧结构体
typedef struct
{u8 frame_head;//帧头u8 lenth;     //数据长度u8 cmd;       //命令u8 arg[3];    //参数个数0 1 2   arg[2] -- 参数的个数 arg[0] -- 第一个参数 arg[1] -- 第二个参数u8 xorcheck;  //校验码u8 frame_end; //帧尾
}VOICE_DEV;//忙状态检测
#define VoicePlay_Busy  GPIO_ReadInputDataBit(MY1690_BUSY_PORT, MY1690_BUSY_PIN)/************************语音播报表下标宏定义************************/
#define POS_SHI             10
#define POS_HUNDRED     11  //百
#define POS_THOUSAND    12  //千
#define POS_WAN             13  //万
#define POS_START           14  //开始测量
#define POS_RESULT      15  //酒精浓度
#define POS_OK              16  //测量完成
#define POS_ERR             17  //测量未完成
#define POS_NODRINK     18  //没有喝酒
#define POS_DRINK           19  //酒驾
#define POS_WELCOME     20  //欢迎extern u8 Voice_Table[];void MY1690_UARTConfig(u32 brr);
void MY1690_Init(void);
void MY1690_SendString(u8 *str,u8 lenth);
u8 Voice_XorCheck(u8 *pdata,u8 lenth);
void Voice_SendCmd(u8 cmd,u8 arg1,u8 arg2,u8 arg_lenth);
void Voice_PlayDirectoryMusic(u8 directorynum, u8 musicnum);
void Voice_PlayNumber(u16 number);
#endif

3.main.c

#include "main.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "beep.h"
#include "lcd.h"
#include "rose.h"
#include "leaf.h"
#include "bridge.h"
#include "MY1690.h"int main(void)
{JTAG_SWD_Config();SysTick_Init(72000);//系统定时器初始化 1msLed_Config();//led初始化Beep_Config();Key_Config();LCD_Init();MY1690_Init();Voice_PlayDirectoryMusic(03,010);//播放歌曲while(1){}
}

用到的音频文件 提取码:lwm2


总结

MY1680U语音模块播放歌曲差不多哦就这么多内容。

ESP32+TFTLCD实现WiFi天气语音播报(六)相关推荐

  1. ESP32+TFTLCD实现WiFi天气语音播报(三)

    ESP32蜂鸣器实验 文章目录 ESP32蜂鸣器实验 前言 一.蜂鸣器工作原理 二.代码编写 1.beep.c 2.beep.h 3.main.c 总结 前言 蜂鸣器实现原理基本上和前面说的点亮LED ...

  2. 基于 SIM800 的时间、天气语音播报服务机器人

    系列文章目录 项目一 基于 SIM800 的时间.天气语音播报服务机器人 等待后续添加-- 文章目录 系列文章目录 前言 一.总体设计方案 1. 硬件 2. 软件 二.硬件设计 1. STM32F10 ...

  3. 墨迹天气语音包_小米有品“智能AI翻译机”评测,还内置了语音助手,随身WiFi功能...

    出国旅游时,我们需要面对的最大问题应该就是言语沟通了,毕竟想要掌握一门新的语言不是什么容易的事情.近期,小米科技旗下的小米有品平台上线了一款新品:Langogo智能AI翻译机,对于想出国游玩或工作的朋 ...

  4. Python脚本实现Mac开机自动语音播报天气

    简介 最近专注于捣腾mac系统,发现了系统语音朗读的功能,于是萌生了从一些天气服务的API获得并解析天气,在本地调用语音朗读指令,使得电脑上的"天气预报"也实现播报功能. 代码我已 ...

  5. java语音播报天气_Home Assistant系列 -- 自动语音播报天气

    在树莓派上要让 Home Assistant  发声朗读 ,从硬件上我们需要 3.5mm插口音箱(耳机)或usb口音箱(耳机).软件方面 我们需要一个媒体播放器以及 tts ( 将文字转化为语音的服务 ...

  6. 苹果天气不显示_锁屏也能显示天气,iOS 12这个功能好贴心!居然还能够语音播报...

    许多安卓手机都是能够在锁屏状态下,显示天气情况的.每天早上起床的时候,也会习惯性的看一眼屏幕,确定下今天的天气,冷不冷或者是热不热,又或者是有没有下雨,要不要带伞等等. 所以许多iPhone用户对此表 ...

  7. python 语音播报库_Python爬取天气信息并语音播报

    导读 爬虫是爬取网页的相关内容,了解HTML能够帮助你更好的理解网页的结构.内容等. TCP/IP协议,HTTP协议这些知识了解一下就可以,能够让你了解在网络请求和网络传输上的基本原理,这次的小案例用 ...

  8. 基于STM32与ESP8266的太空人WiFi天气时钟(代码开源)

    前言:本文为手把手教学ESP8266著名开源项目--太空人WiFi天气时钟,不同的是本次项目采用的是STM32作为MCU.两者开发过程中有因为各自芯片的特点(时钟频率,内存大小等),导致开发程序大不相 ...

  9. iOS如何实现语音播报及后台播放

    最近项目刚刚交付,偶然间用到了语音播报和语音搜索的功能.语音搜索我用的是讯飞的demo,感觉效果还不错,感兴趣的话可以去官网上面下载demo,里面讲的特别的详细,不过稍显麻烦一些.语音播报讯飞也有de ...

最新文章

  1. 编程入门到进大厂,你需要这套学习架构
  2. Java中变量、类初始化顺序
  3. 20应用统计考研复试要点(part8)--应用多元分析
  4. (转)Awk使用案例总结(运维必会)
  5. 25-限制容器对内存的使用
  6. 【文本摘要】BottleSum——文本摘要论文系列解读
  7. 10个要点为Joomla网站创建完善的SEO优化内容
  8. org.apache.commons.fileupload.DiskFileUpload1
  9. 江西省吉安市永丰县市政花园(市政服务大楼[厅])工程质量问题简述报告
  10. 在线正则表达式测试工具
  11. c语言五子棋对局结果存储,基于C语言五子棋小游戏总结.doc
  12. 手机拍照实用技巧,实用的拍照方法和功能
  13. 特殊的空格 - ASCII(160)
  14. oc addChildViewController
  15. 2017年10月WEB前端开发实习生面试题总结
  16. 获取google Map API Key方法
  17. HTML行内元素、块级元素和行内块元素
  18. java gis地图开发视频_开源GIS视频教程
  19. 关于只读事务:@Transactional(readOnly = true)
  20. 【计算机组成实验】四位加法器

热门文章

  1. JSE 、JEE、 JME 的区别
  2. 微信又双叒更新啦!新增朋友圈视频动态封面,还有这些实用的功能!
  3. c++的学习——金中的蛋糕裱花
  4. 携程开源配置管理中心Apollo简介
  5. 组织结构图OrgChart.js的简单使用,实现树状图结构
  6. C—计算1到n的和(循环结构) SDUT
  7. 在浏览器插件中使用xp主题
  8. c语言标准库详解(零):总述
  9. 环境变量及程序地址空间
  10. 特斯拉新四化研究:电动化和自动化上一路领先,下一步是共享化