ESP32+TFTLCD实现WiFi天气语音播报(六)
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天气语音播报(六)相关推荐
- ESP32+TFTLCD实现WiFi天气语音播报(三)
ESP32蜂鸣器实验 文章目录 ESP32蜂鸣器实验 前言 一.蜂鸣器工作原理 二.代码编写 1.beep.c 2.beep.h 3.main.c 总结 前言 蜂鸣器实现原理基本上和前面说的点亮LED ...
- 基于 SIM800 的时间、天气语音播报服务机器人
系列文章目录 项目一 基于 SIM800 的时间.天气语音播报服务机器人 等待后续添加-- 文章目录 系列文章目录 前言 一.总体设计方案 1. 硬件 2. 软件 二.硬件设计 1. STM32F10 ...
- 墨迹天气语音包_小米有品“智能AI翻译机”评测,还内置了语音助手,随身WiFi功能...
出国旅游时,我们需要面对的最大问题应该就是言语沟通了,毕竟想要掌握一门新的语言不是什么容易的事情.近期,小米科技旗下的小米有品平台上线了一款新品:Langogo智能AI翻译机,对于想出国游玩或工作的朋 ...
- Python脚本实现Mac开机自动语音播报天气
简介 最近专注于捣腾mac系统,发现了系统语音朗读的功能,于是萌生了从一些天气服务的API获得并解析天气,在本地调用语音朗读指令,使得电脑上的"天气预报"也实现播报功能. 代码我已 ...
- java语音播报天气_Home Assistant系列 -- 自动语音播报天气
在树莓派上要让 Home Assistant 发声朗读 ,从硬件上我们需要 3.5mm插口音箱(耳机)或usb口音箱(耳机).软件方面 我们需要一个媒体播放器以及 tts ( 将文字转化为语音的服务 ...
- 苹果天气不显示_锁屏也能显示天气,iOS 12这个功能好贴心!居然还能够语音播报...
许多安卓手机都是能够在锁屏状态下,显示天气情况的.每天早上起床的时候,也会习惯性的看一眼屏幕,确定下今天的天气,冷不冷或者是热不热,又或者是有没有下雨,要不要带伞等等. 所以许多iPhone用户对此表 ...
- python 语音播报库_Python爬取天气信息并语音播报
导读 爬虫是爬取网页的相关内容,了解HTML能够帮助你更好的理解网页的结构.内容等. TCP/IP协议,HTTP协议这些知识了解一下就可以,能够让你了解在网络请求和网络传输上的基本原理,这次的小案例用 ...
- 基于STM32与ESP8266的太空人WiFi天气时钟(代码开源)
前言:本文为手把手教学ESP8266著名开源项目--太空人WiFi天气时钟,不同的是本次项目采用的是STM32作为MCU.两者开发过程中有因为各自芯片的特点(时钟频率,内存大小等),导致开发程序大不相 ...
- iOS如何实现语音播报及后台播放
最近项目刚刚交付,偶然间用到了语音播报和语音搜索的功能.语音搜索我用的是讯飞的demo,感觉效果还不错,感兴趣的话可以去官网上面下载demo,里面讲的特别的详细,不过稍显麻烦一些.语音播报讯飞也有de ...
最新文章
- 编程入门到进大厂,你需要这套学习架构
- Java中变量、类初始化顺序
- 20应用统计考研复试要点(part8)--应用多元分析
- (转)Awk使用案例总结(运维必会)
- 25-限制容器对内存的使用
- 【文本摘要】BottleSum——文本摘要论文系列解读
- 10个要点为Joomla网站创建完善的SEO优化内容
- org.apache.commons.fileupload.DiskFileUpload1
- 江西省吉安市永丰县市政花园(市政服务大楼[厅])工程质量问题简述报告
- 在线正则表达式测试工具
- c语言五子棋对局结果存储,基于C语言五子棋小游戏总结.doc
- 手机拍照实用技巧,实用的拍照方法和功能
- 特殊的空格 - ASCII(160)
- oc addChildViewController
- 2017年10月WEB前端开发实习生面试题总结
- 获取google Map API Key方法
- HTML行内元素、块级元素和行内块元素
- java gis地图开发视频_开源GIS视频教程
- 关于只读事务:@Transactional(readOnly = true)
- 【计算机组成实验】四位加法器