170浏览
查看: 170|回复: 0

[ESP8266/ESP32] ESP32 搭配语音合成模块

[复制链接]
之前介绍过SYN6288 模块【参考1】,这次配合 ESP32 实现随机生成一个时间,然后通过语音播放出来。

硬件使用的是ESP-WROOM-32 ESP-32S模块,语音模块的 RX 连接到 ESP32 的GPIO17:

  1. String DataBuffer[11]={{"零"},{"一"},{"二"},{"三"},{"四"},{"五"},{"六"},{"七"},{"八"},{"九"},{"十"}};
  2.                        
  3. //存放转化后的汉字 Unicode值
  4. char character[40];
  5. #include <HardwareSerial.h>
  6. //根据字符串计算计算出来的送到串口的值
  7. char output[50];
  8. void setup() {
  9.   Serial.begin(115200);
  10.   Serial2.begin(9600);
  11.   delay(1000);
  12. }
  13. void loop() {
  14.   Serial.println("generate");
  15.   int hh=random(13),mm=random(60);
  16.   String timeStr="";
  17.   Serial.print("Generate time: ");
  18.   Serial.print(hh);Serial.print(":");Serial.println(mm);
  19.   if (hh>9) {timeStr+="十";
  20.     if (hh>10) {timeStr+=DataBuffer[hh-10];}
  21.   }
  22.   else {timeStr+=DataBuffer[hh];}
  23.   timeStr+="点";
  24.   if (mm==0) {timeStr+="整";}
  25.   else
  26.     if (mm<10) {timeStr+="零";timeStr+=DataBuffer[mm];}
  27.     else if (mm%10==0) {timeStr+=DataBuffer[mm/10]; timeStr+="十";}
  28.          else {timeStr+=DataBuffer[mm/10];timeStr+="十";timeStr+=DataBuffer[mm%10];}
  29.   if(mm!=0) {timeStr+="分";}
  30.   
  31.     //timeStr="十二点五十八分";
  32.   //首先输出一次Arduino 原始字符串 UTF8 的值
  33.   for (int i =0;i<timeStr.length()*3;i++) {
  34.      Serial.print(timeStr[i]&0xFF,HEX);
  35.       Serial.print(' ');
  36.   }
  37.   Serial.println(' ');
  38.   //将 UTF8 转化为 Unicode
  39.     for (int i =0;i<timeStr.length()/3;i=i+1) {
  40.       character[i*2]=((timeStr[i*3]&0xF)<<4)+((timeStr[i*3+1]>>2)&0xF);
  41.       character[i*2+1]=((timeStr[i*3+1]&0x3)<<6)+(timeStr[i*3+2]&0x3F);
  42.       Serial.print(character[i*2]&0xFF,HEX);
  43.       Serial.print(' ');
  44.       Serial.print(character[i*2+1]&0xFF,HEX);
  45.       Serial.print(' ');      
  46.     }
  47.   Serial.println("");
  48.   output[0]=0xFD;
  49.   output[1]=(timeStr.length()/3*2+3)>>8;
  50.   output[2]=((timeStr.length()/3*2+3)&0xFF);
  51.   output[3]=0x01;
  52.   output[4]=0x03;
  53.   //把字符串定义搬过去
  54.   for (int i=0;i<timeStr.length()/3*2;i++) {
  55.       output[i+5]=character[i];
  56.     }
  57.   //计算一个校验和  
  58.   output[timeStr.length()/3*2+5]=output[0];
  59.   for (int i=1;i<timeStr.length()/3*2+5;i++) {
  60.       output[timeStr.length()/3*2+5]=output[timeStr.length()/3*2+5] ^ output[i];
  61.     }   
  62.    
  63.   for (int i =0;i<timeStr.length()/3*2+6;i++) {
  64.       Serial.print(output[i]&0xFF,HEX);
  65.       Serial.print(' ');
  66.       Serial2.write(output[i]);
  67.     }     
  68.    
  69. Serial.println(' ');
  70.     delay(3000);
  71. }
复制代码

参考:

1. http://www.lab-z.com/ttssyn/ TTS 真人发音 SYN6288 模块
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2021 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail