Project #28 – Sensors – Text to Speech – Mk32

——

#DonLucElectronics #DonLuc #TextoSpeech #Sensors #FireBeetle2ESP32E #ESP32 #Display #IoT #Project #Fritzing #Programming #Electronics #Microcontrollers #Consultant

——

Text to Speech

——

Text to Speech

——

Text to Speech

——

Gravity: Text to Speech Voice Synthesizer Module

The Text-to-Speech module enables easy integration of voice functionality into various projects. It supports both Chinese and English languages, providing clear and natural pronunciation. The module can also broadcast the current time and environmental data, and when combined with a speech recognition module, it enables conversational interactions with your projects. The module uses I2C and UART communication modes, with a gravity interface, ensuring compatibility with most main controllers on the market, such as Arduino, micro:bit, Firebeetle Series, LattePanda, and Raspberry Pi. Additionally, it includes a built-in speaker, eliminating the need for an external one. The primary applications for this module include robot voice, voice broadcast, voice prompt, and text reading.

DL2610Mk03

1 x DFRobot FireBeetle 2 ESP32-E
1 x Adafruit SSD1306
1 x Gravity: IO Shield for FireBeetle 2
1 x Gravity: I2C HUB
1 x Fermion: MicroSD Card Module
1 x MicroSD 8 GB
1 x Gravity: LED Switch Green
1 x Gravity: Text to Speech Voice Synthesizer Module
1 x Gravity: Digital Push Button (White)
1 x Gravity: Digital Blue LED Light Module
1 x Lithium Ion Battery – 1000mAh
1 x USB 3.0 to Type-C Cable

DL2610Mk03p

DL2610Mk03p.ino

/****** Don Luc Electronics © ******
Software Version Information
Project #28 – Sensors – Text to Speech – Mk32
28-32
DL2610Mk03p.ino
DL2610Mk03
1 x DFRobot FireBeetle 2 ESP32-E
1 x Adafruit SSD1306
1 x Gravity: IO Shield for FireBeetle 2
1 x Gravity: I2C HUB
1 x Fermion: MicroSD Card Module 
1 x MicroSD 8 GB
1 x Gravity: LED Switch Green
1 x Gravity: Text to Speech Voice Synthesizer Module
1 x Gravity: Digital Push Button (White)
1 x Gravity: Digital Blue LED Light Module
1 x Lithium Ion Battery - 1000mAh
1 x USB 3.0 to Type-C Cable
*/

// Include the Library Code
// Wire
#include <Wire.h>
// SD Card
// File System
#include "FS.h"
// SD Card
#include "SD.h"
// SPI (Serial Peripheral Interface)
#include "SPI.h"
// Speech Synthesis
#include <DFRobot_SpeechSynthesis_V2.h>
// Adafruit SSD1306
#include <Adafruit_SSD1306.h>

// Adafruit SSD1306
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

// Speech Synthesis
DFRobot_SpeechSynthesis_I2C ss;

// Button
// The number of the pushbutton pin
const int iButton = D10;
// Variables will change:
int iButtonState = 0;

// Switch
// The number of the pushbutton pin
const int iSwitch = D12;
// variables will change:
int switchState = 0;
int iState = 0;

// SD shield
const int chipSelect = D6;
// FullString
String FullString = "";
long lineToRead = 0;
// Random
long randNumber;
String lineContent = "";
//String zzzzzz = "";

// D11 LED Blue
const int iLedBlue = D11;

// Software Version Information
String sver = "28-32";

void loop() {
  
  // isButton
  isButton();

  // isDisplay Button
  isDisplayButton();

}

getButton.ino

// Button
// isButton
void isButton(){

  iButtonState= digitalRead(iButton);  // read input value

  if (iButtonState == HIGH) { 
      
    //  Switch
    isSwitch();

   } else {

      // Turn LED Off
      digitalWrite(iLedBlue, LOW);

   }

}

getDisplay.ino

// Adafruit SSD1306
// isDisplayUID
void isDisplayUID(){

    // Intentar ambas direcciones
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    //Serial.println("Error con 0x3C, probando 0x3D...");
    if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3D)) {
      //Serial.println("Error OLED en ambas direcciones");
      return;
    }
  }
  
  // Clear Display
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  // Don Luc Electronics
  display.setCursor(0,0);
  display.println("Don Luc Electronics");
  // Motor Drive
  display.setCursor(0,20);
  display.print("DL2610Mk03");
 // Version
  display.setCursor(0,20);
  display.print("Version");
  display.setCursor(0,40);
  display.print( sver );
  // Display
  display.display();

}
// isDisplay Button
void isDisplayButton(){

  // Clear Display
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  // Don Luc Electronics
  display.setCursor(0,0);
  display.println("Don Luc Electronics");
  // 
  display.setCursor(0,20);
  if (iState == 1) {

    // English
    display.print("Book English");

  }
  else {

    // Spanish
    display.print("Book Spanish");

 }  
  
  // Line Content
  display.setCursor(0,40);
  display.print( lineContent );
  // Display
  display.display();

}

getSD.ino

// MicroSD Card
// MicroSD Setup
void isSetupSD() {

    // MicroSD Card
    pinMode( chipSelect , OUTPUT );
    
    // MicroSD Card
    if(!SD.begin()){
        Serial.print("MicroSD Card No");;  
        return;
    }
    
    uint8_t cardType = SD.cardType();

    // CARD NONE
    if(cardType == CARD_NONE){
        ; 
        return;
    }

    // SD Card Type
    if(cardType == CARD_MMC){
        ; 
    } else if(cardType == CARD_SD){
        ; 
    } else if(cardType == CARD_SDHC){
        ; 
    } else {
        ; 
    } 

    // Size
    uint64_t cardSize = SD.cardSize() / (1024 * 1024);
 
}
// MicroSD Card
/*void isSD() {

  zzzzzz = "";

  //DLE|Version|
  zzzzzz = "DLE|" + sver + "|" 
  //
  + "|*\r"

  // msg + 1
  char msg[zzzzzz.length() + 1];

  zzzzzz.toCharArray(msg, zzzzzz.length() + 1);

  // Append File
  appendFile(SD, "/DLEDATA.txt", msg );

*/
// Read a specific line (1-indexed)
String readSpecificLine(fs::FS &fs, const char * path, int targetLine) {
  File file = fs.open(path);
  if(!file || file.isDirectory()){
    return "Error: Failed to open file";
  }

  int currentLine = 1;
  String lineContent = "";

  while(file.available()){
    char ch = file.read();
    
    if (currentLine == targetLine) {
      if (ch == '\n' || ch == '\r') {
        file.close();
        return lineContent; // Found line, return it
      }
      lineContent += ch;
    }

    if (ch == '\n') {
      currentLine++;
    }

    if (currentLine > targetLine) {
      break; 
    }
  }

  file.close();
  
  if (currentLine == targetLine && lineContent.length() > 0) {
    return lineContent; // Return last line if it lacks a trailing newline
  }
  
  return "Error: Line not found";
}
// List Dir
void listDir(fs::FS &fs, const char * dirname, uint8_t levels){
    
    // List Dir
    dirname;
    
    File root = fs.open(dirname);
    
    if(!root){
        return;
    }
    
    if(!root.isDirectory()){
        return;
    }

    File file = root.openNextFile();
    
    while(file){
        if(file.isDirectory()){
            file.name();
            if(levels){
                listDir(fs, file.name(), levels -1);
            }
        } else {
            file.name();
            file.size();
        }
        file = root.openNextFile();
    }
    
}
// Write File
void writeFile(fs::FS &fs, const char * path, const char * message){
    
    // Write File
    path;
    
    File file = fs.open(path, FILE_WRITE);
    
    if(!file){
        return;
    }
    
    if(file.print(message)){
        ;  
    } else {
        ;  
    }
    
    file.close();
    
}
// Append File
void appendFile(fs::FS &fs, const char * path, const char * message){

    // Append File
    path;
    
    File file = fs.open(path, FILE_APPEND);
    
    if(!file){
        return;
    }
    
    if(file.print(message)){
        ;  
    } else {
        ;  
    }
    
    file.close();

}

getSpeechSynthesizer.ino

// Speech Synthesis
// isSetupSS
void isSetupSS(){

  // Begin
  ss.begin();
  // Set voice volume to 9
  ss.setVolume(9);
  // Set playback speed to 9
  ss.setSpeed(7);
  // Set tone to 5
  ss.setTone(5);
  // For English, speak word 
  ss.setEnglishPron(ss.eWord);

}

getSwitch.ino

// Switch
// isSwitch
void isSwitch(){

  // Turn LED off:
  digitalWrite(iLedBlue, LOW);

  randNumber = random(1, 6);

  if ( randNumber == 4 ) {

     // Switch
     switchState = digitalRead(iSwitch);

     if (switchState == HIGH) {
    
       // Turn LED On:
       digitalWrite(iLedBlue, HIGH);

       iState = 1;
       
       // English
       // Example: Read line from "english/engliso.txt"
       lineToRead = random(1, 2048);

       lineContent = readSpecificLine(SD, "/english/engliso.txt", lineToRead);
            
       if (lineContent != "") {

         Serial.print("Line ");
         Serial.print(lineToRead);
         Serial.print(": ");
         Serial.println(lineContent);
         // Speak
         ss.speak( lineContent );

      } else {

         Serial.println("Line not found or file error.");

      }


    } else {

     // Turn LED On:
     digitalWrite(iLedBlue, HIGH);

     iState = 0;
      
      // Spanish
      // Example: Read line from "spanish/spanisho.txt"
      lineToRead = random(1, 1938);

      lineContent = readSpecificLine(SD, "/spanish/spanisho.txt", lineToRead);

      if (lineContent != "") {

         Serial.print("Line ");
         Serial.print(lineToRead);
         Serial.print(": ");
         Serial.println(lineContent);
         // Speak
         ss.speak( lineContent );

      } else {

         Serial.println("Line not found or file error.");

      }

    }

  }
     
}  

setup.ino

// Setup
void setup()
{

  // Delay
  delay(100);
  
  // Serial
  Serial.begin(9600);
  
  // Delay
  delay( 100 );

  // LED Blue
  pinMode(iLedBlue, OUTPUT);

  // Delay
  delay(100);

  // iButton
  pinMode(iButton, INPUT);

  // Delay
  delay(100);

  delay(100);
  
  // iSwitch
  pinMode(iSwitch, INPUT);

  // Wire
  Wire.begin();

  // Delay
  delay(100);

  //MicroSD Card
  isSetupSD();

  // Delay
  delay(100);

  // isSetupSS
  isSetupSS();

  // Delay
  delay(100);

  // Random Seed
  randomSeed(analogRead(A3));

  // Delay
  delay( 100 );

  // Adafruit SSD1306 - UID
  // Don Luc Electronics
  // Versioc
  isDisplayUID();
  
  // Delay
  delay( 5000 );

}

——

People can contact us: https://www.donluc.com/?page_id=1927

Consultant, R&D, Electronics, IoT, Teacher and Instructor

  • Programming Language
  • Single-Board Microcontrollers (PIC, Arduino, Raspberry Pi, Arm, Silicon Labs, Espressif, Etc…)
  • IoT
  • Wireless (Radio Frequency, Bluetooth, WiFi, Etc…)
  • Robotics
  • Automation
  • Camera and Video Capture Receiver Stationary, Wheel/Tank , Underwater and UAV Vehicle
  • Unmanned Vehicles Terrestrial, Marine and UAV
  • Machine Learning
  • Artificial Intelligence (AI)
  • RTOS
  • Sensors, eHealth Sensors, Biosensor, and Biometric
  • Research & Development (R & D)
  • Consulting

Follow Us

Luc Paquin – Curriculum Vitae – 2026
https://www.donluc.com/luc/LucPaquinCVEng2026Mk01.pdf
https://www.donluc.com/luc/

Web: https://www.donluc.com/
Web: https://www.jlpconsultants.com/
Facebook: https://www.facebook.com/neosteam.labs.9/
YouTube: https://www.youtube.com/@thesass2063
DFRobot: https://learn.dfrobot.com/user-10186.html
TikTok: https://www.tiktok.com/@luc.paquin8
Hackster: https://www.hackster.io/luc-paquin
LinkedIn: https://www.linkedin.com/in/jlucpaquin/

Don Luc