- 使用的软件环境为:Arduino IDE
 - #include <SD.h>
 - #include <SPI.h>
 - #include "DFRobot_GDL.h"
 - #include "DFRobot_Picdecoder_SD.h"
 - #include "DFRobot_SpeechSynthesis.h"
 - #include "DFRobot_ASR.h"
 - DFRobot_SpeechSynthesis_I2C ss;
 - DFRobot_Picdecoder_SD decoder;
 - DFRobot_ASR  asr;
 - 
 - 
 - /*ESP32 and ESP8266*/
 - 
 - #define TFT_DC  25
 - #define TFT_CS  14
 - #define TFT_RST 26
 - #define TFT_SD  13
 - 
 - //屏幕设置
 - DFRobot_ILI9341_240x320_HW_SPI  screen(/*dc=*/TFT_DC,/*cs=*/TFT_CS,/*rst=*/TFT_RST);
 - 
 - File root;
 - int i;
 - int j;
 - int k;
 - int num;
 - void setup()
 - {
 -   num=5;
 -   k=1;
 -   //初始化串行端口
 -   Serial.begin(115200);
 -   //初始屏幕
 -   screen.begin();
 -   //语音识别初始化
 -   asr.begin(PASSWORD);
 -   asr.addCommand("xiao tian xiao tian",0);
 -   asr.addCommand("zi dong bo fang",1);//自动播放模式
 -   asr.addCommand("yu yin kong zhi",2);//语音控制模式
 -   asr.addCommand("xia yi zhang",3);//播放下一张
 -   asr.addCommand("shang yi zhang",4);//播放上一张
 -   //开始识别
 -   asr.start();
 -   //语音合成初始化
 -   ss.begin();
 -   ss.speak(F("班级智能电子相册"));
 -   Serial.println("OK");
 -   //初始化SD卡,等待初始化成功
 -   while(1)
 -   {
 -     if (SD.begin(/*sdcs=*/TFT_SD))
 -     {
 -       Serial.println("initialization done.");
 -       break;
 -     }
 -     Serial.println("initialization failed!");
 -   }
 -   //显示开机画面
 -   decoder.drawPicture(/*filename=*/"/picture/0.jpg",/*sx=*/0,/*sy=*/0,/*ex=*/screen.width(),/*ey=*/screen.height(),/*screenDrawPixel=*/screenDrawPixel);
 -  
 -   
 - }
 - void loop()
 - {
 -  j=asr.read();
 -   switch(j)            //判断识别内容,在有识别结果的情况下asr.read()会返回识别到的词条编号,否则返回-1
 -   {
 -     case 0:                     //若是唤醒指令“小天 小天”,唤醒语音识别模块,并随机响应
 -        switch(random(0,5))        
 -          {
 -           case 0:
 -             ss.speak(F("嗯"));
 -             break;
 -           case 1:
 -             ss.speak(F("我在"));
 -             break;
 -           case 2:
 -             ss.speak(F("在听"));
 -             break;
 -           case 3:
 -             ss.speak(F("来了"));
 -             break;
 -           case 4:
 -             ss.speak(F("您说"));
 -             break;
 -           case 5:
 -             ss.speak(F("在了"));
 -             break;
 -          }
 -      break; 
 -     case 1://开启自动播放模式
 -       k=0;
 -       ss.speak(F("自动播放模式"));
 -       break;
 -     case 2://开启语音控制播放模式
 -       k=1; 
 -       ss.speak(F("语音控制播放模式"));
 -       break; 
 -     case 3: //处理显示下一张照片时的照片序号
 -      if(k==1){ 
 -       if(i<num-1)
 -         {
 -           i++;
 -         }
 -       else
 -       {
 -         i=0;
 -       }
 -      }
 -       break; 
 -     case 4: //处理显示上一张照片的照片序号
 -     if(k==1){  
 -       if(i>0)
 -         {
 -           i--;
 -         }
 -       else
 -       {
 -         i=num;
 -       }
 -     }
 -       break; 
 -   }
 -   if(k==0 &&(j==-1 || j==1) )//自动播放模式下,处理显示照片序号
 -   { 
 -    
 -        if(i<num-1)
 -         {
 -           i++;
 -         }
 -       else
 -       {
 -         i=0;
 -       }
 -       delay(1000);
 -   }
 -   if(k==1 && (j==3 ||j==4)||k==0 )//显示照片
 -   {  
 -     switch(i)
 -     {
 -       
 -     case 0:
 -       decoder.drawPicture(/*filename=*/"/picture/1.jpg",/*sx=*/0,/*sy=*/0,/*ex=*/screen.width(),/*ey=*/screen.height(),/*screenDrawPixel=*/screenDrawPixel);
 -       ss.speak(F("军训的第二天,在军训中,我们很苦很累,但这是一种人生体验,战胜自我,锻炼意志的最佳良机。"));
 -  
 -       break;
 -       case 1:                    
 -       decoder.drawPicture(/*filename=*/"/picture/2.jpg",/*sx=*/0,/*sy=*/0,/*ex=*/screen.width(),/*ey=*/screen.height(),/*screenDrawPixel=*/screenDrawPixel);
 -       ss.speak(F("看我的被子叠的怎么样?"));
 - 
 -       break;
 -     case 2:                    
 -       decoder.drawPicture(/*filename=*/"/picture/3.jpg",/*sx=*/0,/*sy=*/0,/*ex=*/screen.width(),/*ey=*/screen.height(),/*screenDrawPixel=*/screenDrawPixel);
 -       ss.speak(F("第一次阅读励志信时,激动的心如波涛汹涌的大海,久久不能平静。因为他给了我们太多心灵上的触动,他让我们振奋精神,养成良好习惯、改正坏习惯,发现自己的闪光点。"));
 - 
 -       break;
 -     case 3:                    
 -       decoder.drawPicture(/*filename=*/"/picture/4.jpg",/*sx=*/0,/*sy=*/0,/*ex=*/screen.width(),/*ey=*/screen.height(),/*screenDrawPixel=*/screenDrawPixel);
 -       ss.speak(F("每次考试后,班级通过表彰对优秀学生的良好表现予以充分肯定和褒扬,同时也充分发挥先进典型的示范引领及激励作用,激励更多的同学见贤思齐、奋发进取。"));
 - 
 -       break;
 -     case 4:                    
 -       decoder.drawPicture(/*filename=*/"/picture/5.jpg",/*sx=*/0,/*sy=*/0,/*ex=*/screen.width(),/*ey=*/screen.height(),/*screenDrawPixel=*/screenDrawPixel);
 -       ss.speak(F("对优秀学生进行有效表彰,可全面调动我们学习的积极性、促进我们全面发展、给我们创设良好的教学环境"));
 - 
 -       break;
 -     
 -   }
 - 
 -  }
 - }
 - 
 - //这个函数的功能是在屏幕上画一个像素
 - void screenDrawPixel(int16_t x, int16_t y, uint16_t color)
 - {
 -   //在屏幕上画一个点
 -   screen.writePixel(x,y,color);
 - }
 
 复制代码
程序中首先对屏幕、语音合成及语音识别模块进行初始化,并利用声音提醒初始化完成,显示开机画面。
当检测到唤醒词“xiao tian xiao tian”将唤醒语音识别模块,使用“zi dong bo fang”,开启“自动播放模式”;使用“yu yin kong zhi”,开启“语音控制模式”。
当在“语音控制模式”下,使用关键词“xia yi zhang”、“shang yi zhang”可上下翻页。
在播放照片的同时,语音合成模块用语音播报“照片简介”。