功能介绍
通过操作手机上的蓝牙软件发送命令,播放不同的语音内容(儿歌、故事)等。可以一边码着代码,一边给孩子放点音乐,还可以进行扩展一下,控制机械手臂来摇一摇拨浪鼓啥的。当然,如果时间充裕,还是最好亲自陪陪孩子。
整体框图
本方案比较简单,主要以此次的板子作为控制中心,通过蓝牙与手机通信,手机发送不同的命令来控制语言ic的输出,再经过放大电路将语音信号放大,然后通过小喇叭输出,以下是整个方案的整体框图。
资源介绍
本方案中主要使用了以下资源:
Ø R7F0C80212ESP目标板
Ø HC05蓝牙模块
Ø 语音IC
Ø 三极管8050
Ø 小喇叭
Ø 安卓手机
Ø 导线若干
硬件实物连接图
整体连接
语言IC
蓝牙模块HC05
小喇叭
代码
1、控制语音输出部分
- /*
- **************************************************************
- * 函数名:Send_Voice
- * 描述 :通过控制语音ic发送语音至扬声器
- * 输入 :uint8_t Voice_Num 脉冲数
- * 输出 :无
- **************************************************************
- */
- void Send_Voice(uint8_t Voice_Num)
- {
- uint8_t i;
-
- VC_RST= 1u; //复位
- Delay_ms(10u);
- VC_RST= 0u;
- Delay_ms(100u);
-
- for(i=0u; i < Voice_Num;i++)
- {
- VC_DATA = 1u; //脉冲数据为高
- Delay_us(100u); //延时100US
- VC_DATA = 0u; //脉冲数据为低
- Delay_us(100); //延时100US
- }
- while(VC_BUSY == 1);
- }
复制代码 2、蓝牙部分代码 代码是移植原子的蓝牙代码,其中有部分进行了修改
- /*
- **************************************************************
- //初始化ATK-HC05模块
- //返回值:0,成功;1,失败.
- **************************************************************
- */
- uint8_t HC05_Init(void)
- {
- uint8_t retry=10u,t;
- uint16_t temp=1;
-
- while(retry--)
- {
- HC05_KEY=1u; //KEY置高,进入AT模式
- Delay_ms(10);
- SAU_SendMessage("AT\r\n");
- HC05_KEY=0u; //KEY拉低,退出AT模式
- for(t=0;t<10;t++) //最长等待50ms,来接收HC05模块的回应
- {
- if(RX_STA&0X8000)break;
- Delay_ms(5);
- }
-
- if(RX_STA&0X8000) //接收到一次数据了
- {
-
- RX_STA=0;
- if(rx_data[0]=='O'&&rx_data[1]=='K')
- {
- temp=0;
-
- break;
- }
- }
- }
- if(retry==0)temp=1; //检测失败
- return temp;
- }
- /*
- **************************************************************
- //获取ATK-HC05模块的角色
- //返回值:0,从机;1,主机;0XFF,获取失败.
- **************************************************************
- */
- uint8_t HC05_Get_Role(void)
- {
- uint8_t retry = 15u;
- uint16_t temp,t;
- while(retry--)
- {
- HC05_KEY=1; //KEY置高,进入AT模式
- Delay_ms(10);
- SAU_SendMessage("AT\r\n"); //查询角色
- for(t=0;t<20;t++) //最长等待200ms,来接收HC05模块的回应
- {
- Delay_ms(10);
- if(RX_STA&0X8000)break;
- }
- HC05_KEY=0; //KEY拉低,退出AT模式
- if(RX_STA&0X8000) //接收到一次数据了
- {
- temp=RX_STA&0X7FFF; //得到数据长度
- RX_STA=0;
- if(temp==13&&rx_data[0]=='+')//接收到正确的应答了
- {
- temp=rx_data[6]-'0';//得到主从模式值
- break;
- }
- }
- }
- if(retry==0)temp=0XFF;//查询失败.
- return temp;
- }
- /*
- **************************************************************
- //ATK-HC05设置命令
- //此函数用于设置ATK-HC05,适用于仅返回OK应答的AT指令
- //atstr:AT指令串.比如:"AT+RESET"/"AT+UART=9600,0,0"/"AT+ROLE=0"等字符串
- //返回值:0,设置成功;其他,设置失败.
- **************************************************************
- */
- uint16_t HC05_Set_Cmd(uint8_t* atstr)
- {
- uint8_t retry = 15u;
- uint16_t temp;
- uint8_t i;
- while(retry--)
- {
- HC05_KEY=1u; //KEY置高,进入AT模式
- Delay_ms(10);
-
- SAU_SendMessage(atstr); //发送AT字符串
- HC05_KEY=0u; //KEY拉低,退出AT模式
- for(i=0;i<20;i++) //最长等待100ms,来接收HC05模块的回应
- {
- if(RX_STA&0X8000)break;
- Delay_ms(5);
- }
- if(RX_STA&0X8000) //接收到一次数据了
- {
- temp=RX_STA&0X7FFF; //得到数据长度
- RX_STA=0;
- if(temp==4&&rx_data[0]=='O')//接收到正确的应答了
- {
- temp=0;
- break;
- }
- }
- }
- if(retry==0)temp=0XFF;//设置失败.
- return temp;
- }
复制代码
蓝牙软件
前段时间本来是准备学习做蓝牙上位机软件的,后来由于客户的原因,未能···,这次使用的软件是在网上下载的一个蓝牙串口软件,可以满足需求的,如果是推广应用的话,还得自己上手编写。以下是此次使用的蓝牙软件的一些图片: 1、搜索蓝牙设备
2、已经查找到了HC05蓝牙模块,并点击连接设备,密码1234
3、连接成功,为了使用方便,这里使用键盘模式
4、进入键盘模式,以下是已经设置的键盘
至此,可以通过按相应的按键来发送不同的命令,将会听到不同的语言内容。
总结
拿到板子的第一时间就是安装软件,一路“next”、“OK”下来,终于算是安装好了。新建一个工程,发现没有此款MCU的型号,网上搜索了一下,找到了解决办法。由于之前也用过cubesuite+软件,记得它自带代码生成功能插件的,捣鼓了一下,终于把这小子找出来了。上官网下载了一个demo程序,进行了简单的调试,初步的体验也就完成了。
由于对这款MCU第一次接触,在开发过程中参考了不少官方demo程序和网友的帖子,很多问题也就不是问题了。花了几个晚上和一个周末,将整个方案大概的完成了。后面有时间将对整个方案进行进一步的优化,或更改MCU进一步的开发,不仅仅做一个功能,也不显得单调。
以下是此次活动开始的时候发的几个帖子:
本文来自论坛,点击查看完整帖子内容。