Skip to content

Commit

Permalink
Added TextToSpeech example
Browse files Browse the repository at this point in the history
  • Loading branch information
lewisxhe committed Dec 11, 2024
1 parent 6aeae66 commit d74da4f
Show file tree
Hide file tree
Showing 3 changed files with 369 additions and 4 deletions.
91 changes: 91 additions & 0 deletions examples/TextToSpeech/TextToSpeech.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
/**
* @file TextToSpeech.ino
* @author Lewis He ([email protected])
* @license MIT
* @copyright Copyright (c) 2024 ShenZhen XinYuan Electronic Technology Co., Ltd
* @date 2024-12-11
* @note Only support A7670X A7608X , Not support SIM7670G
*/
// See all AT commands, if wanted
// #define DUMP_AT_COMMANDS

#include "utilities.h"
#include <TinyGsmClient.h>
#include "Arduino.h"

#ifdef DUMP_AT_COMMANDS // if enabled it requires the streamDebugger lib
#include <StreamDebugger.h>
StreamDebugger debugger(SerialAT, Serial);
TinyGsm modem(debugger);
#else
TinyGsm modem(SerialAT);
#endif

void setup()
{
Serial.begin(115200); // Set console baud rate

Serial.println("Start Sketch");

SerialAT.begin(115200, SERIAL_8N1, MODEM_RX_PIN, MODEM_TX_PIN);

#ifdef BOARD_POWERON_PIN
pinMode(BOARD_POWERON_PIN, OUTPUT);
digitalWrite(BOARD_POWERON_PIN, HIGH);
#endif

// Set modem reset pin ,reset modem
pinMode(MODEM_RESET_PIN, OUTPUT);
digitalWrite(MODEM_RESET_PIN, !MODEM_RESET_LEVEL); delay(100);
digitalWrite(MODEM_RESET_PIN, MODEM_RESET_LEVEL); delay(2600);
digitalWrite(MODEM_RESET_PIN, !MODEM_RESET_LEVEL);

pinMode(BOARD_PWRKEY_PIN, OUTPUT);
digitalWrite(BOARD_PWRKEY_PIN, LOW);
delay(100);
digitalWrite(BOARD_PWRKEY_PIN, HIGH);
delay(100);
digitalWrite(BOARD_PWRKEY_PIN, LOW);

// Check if the modem is online
Serial.println("Start modem...");

int retry = 0;
while (!modem.testAT(1000)) {
Serial.println(".");
if (retry++ > 10) {
digitalWrite(BOARD_PWRKEY_PIN, LOW);
delay(100);
digitalWrite(BOARD_PWRKEY_PIN, HIGH);
delay(1000);
digitalWrite(BOARD_PWRKEY_PIN, LOW);
retry = 0;
}
}
Serial.println();

delay(5000);

// Mode 1. Start to synth and play,<text> is in UCS2 coding format.
String text = "6B228FCE4F7F75288BED97F3540862107CFB7EDF";
if (modem.textToSpeech(text, 1)) {
Serial.println("Play successfully.");
}

}

uint32_t count = 0;

void loop()
{
String text = "millis" + String(count++);
// Mode: 2. Start to synth and play,<text> is in ASCII coding format,
if (modem.textToSpeech(text, 2)) {
Serial.println("Play successfully.");
}
delay(1000);
}

#ifndef TINY_GSM_FORK_LIBRARY
#error "No correct definition detected, Please copy all the [lib directories](https://github.com/Xinyuan-LilyGO/LilyGO-T-A76XX/tree/main/lib) to the arduino libraries directory , See README"
#endif
273 changes: 273 additions & 0 deletions examples/TextToSpeech/utilities.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,273 @@
/**
* @file utilities.h
* @author Lewis He ([email protected])
* @license MIT
* @copyright Copyright (c) 2023 Shenzhen Xin Yuan Electronic Technology Co., Ltd
* @date 2023-11-15
*
*/

#pragma once

// Note:
// When using ArduinoIDE, you must select a corresponding board type.
// If you don’t know which board type you have, please click on the link to view it.
// 使用ArduinoIDE ,必须选择一个对应的板型 ,如果你不知道你的板型是哪种,请点击链接进行查看

// Products Link:https://www.lilygo.cc/products/t-sim-a7670e
// #define LILYGO_T_A7670

// Products Link: https://lilygo.cc/products/t-call-v1-4
// T-Call-A767X V1.0 and V1.1 have different Pinmaps and cannot be used universally.
// #define LILYGO_T_CALL_A7670_V1_0

//! SIM7672G and SIM7670G are exactly the same, except for the name change
// Products Link: https://lilygo.cc/products/t-sim-7670g-s3
// #define LILYGO_T_SIM767XG_S3

// Products Link: https://lilygo.cc/products/t-a7608e-h?variant=42860532433077
// #define LILYGO_T_A7608X

// Products Link: https://lilygo.cc/products/t-a7608e-h?variant=43932699033781
// #define LILYGO_T_A7608X_S3

// Products Link: https://lilygo.cc/products/a-t-pcie?variant=42335922094261
// #define LILYGO_T_PCIE_A767X



#if defined(LILYGO_T_A7670)

#define MODEM_BAUDRATE (115200)
#define MODEM_DTR_PIN (25)
#define MODEM_TX_PIN (26)
#define MODEM_RX_PIN (27)
// The modem boot pin needs to follow the startup sequence.
#define BOARD_PWRKEY_PIN (4)
#define BOARD_ADC_PIN (35)
// The modem power switch must be set to HIGH for the modem to supply power.
#define BOARD_POWERON_PIN (12)
#define MODEM_RING_PIN (33)
#define MODEM_RESET_PIN (5)
#define BOARD_MISO_PIN (2)
#define BOARD_MOSI_PIN (15)
#define BOARD_SCK_PIN (14)
#define BOARD_SD_CS_PIN (13)
#define BOARD_BAT_ADC_PIN (35)
#define MODEM_RESET_LEVEL HIGH
#define SerialAT Serial1

#define MODEM_GPS_ENABLE_GPIO (-1)
#define MODEM_GPS_ENABLE_LEVEL (-1)

#ifndef TINY_GSM_MODEM_A7670
#define TINY_GSM_MODEM_A7670
#endif

// It is only available in V1.4 version. In other versions, IO36 is not connected.
#define BOARD_SOLAR_ADC_PIN (36)


#elif defined(LILYGO_T_CALL_A7670_V1_0)
#define MODEM_BAUDRATE (115200)
#define MODEM_DTR_PIN (14)
#define MODEM_TX_PIN (26)
#define MODEM_RX_PIN (25)
// The modem boot pin needs to follow the startup sequence.
#define BOARD_PWRKEY_PIN (4)
#define BOARD_LED_PIN (12)
// There is no modem power control, the LED Pin is used as a power indicator here.
#define BOARD_POWERON_PIN (BOARD_LED_PIN)
#define MODEM_RING_PIN (13)
#define MODEM_RESET_PIN (27)
#define MODEM_RESET_LEVEL LOW
#define SerialAT Serial1


#define MODEM_GPS_ENABLE_GPIO (-1)
#define MODEM_GPS_ENABLE_LEVEL (-1)


#ifndef TINY_GSM_MODEM_A7670
#define TINY_GSM_MODEM_A7670
#endif

#elif defined(LILYGO_T_CALL_A7670_V1_1)

#define MODEM_BAUDRATE (115200)
#define MODEM_DTR_PIN (32)
#define MODEM_TX_PIN (27)
#define MODEM_RX_PIN (26)
// The modem boot pin needs to follow the startup sequence.
#define BOARD_PWRKEY_PIN (4)
#define BOARD_LED_PIN (13)
// There is no modem power control, the LED Pin is used as a power indicator here.
#define BOARD_POWERON_PIN (BOARD_LED_PIN)
#define MODEM_RING_PIN (33)
#define MODEM_RESET_PIN (5)
#define MODEM_RESET_LEVEL LOW
#define SerialAT Serial1

#define MODEM_GPS_ENABLE_GPIO (-1)
#define MODEM_GPS_ENABLE_LEVEL (-1)

#ifndef TINY_GSM_MODEM_A7670
#define TINY_GSM_MODEM_A7670
#endif

#elif defined(LILYGO_T_SIM767XG_S3)
#define MODEM_BAUDRATE (115200)
#define MODEM_DTR_PIN (9)
#define MODEM_TX_PIN (11)
#define MODEM_RX_PIN (10)
// The modem boot pin needs to follow the startup sequence.
#define BOARD_PWRKEY_PIN (18)
#define BOARD_LED_PIN (12)
// There is no modem power control, the LED Pin is used as a power indicator here.
#define BOARD_POWERON_PIN (BOARD_LED_PIN)
#define MODEM_RING_PIN (3)
#define MODEM_RESET_PIN (17)
#define MODEM_RESET_LEVEL LOW
#define SerialAT Serial1

#define BOARD_BAT_ADC_PIN (4)
#define BOARD_SOLAR_ADC_PIN (5)
#define BOARD_MISO_PIN (47)
#define BOARD_MOSI_PIN (14)
#define BOARD_SCK_PIN (21)
#define BOARD_SD_CS_PIN (13)

#ifndef TINY_GSM_MODEM_SIM7672
#define TINY_GSM_MODEM_SIM7672
#endif

#define MODEM_GPS_ENABLE_GPIO (4)
#define MODEM_GPS_ENABLE_LEVEL (1)


#elif defined(LILYGO_T_A7608X)

#define MODEM_BAUDRATE (115200)
#define MODEM_DTR_PIN (25)
#define MODEM_TX_PIN (26)
#define MODEM_RX_PIN (27)
// The modem boot pin needs to follow the startup sequence.
#define BOARD_PWRKEY_PIN (4)
#define BOARD_BAT_ADC_PIN (35)
// The modem power switch must be set to HIGH for the modem to supply power.
#define BOARD_POWERON_PIN (12) //T-A7608-V2 is onboard led
#define MODEM_RING_PIN (33)
#define MODEM_RESET_PIN (5) //T-A7608-V2 no connection
#define BOARD_MISO_PIN (2)
#define BOARD_MOSI_PIN (15)
#define BOARD_SCK_PIN (14)
#define BOARD_SD_CS_PIN (13)

#define MODEM_RESET_LEVEL HIGH
#define SerialAT Serial1


#ifndef TINY_GSM_MODEM_A7608
#define TINY_GSM_MODEM_A7608
#endif

// only version v1.1 or V2 has solar adc pin
#define BOARD_SOLAR_ADC_PIN (34)


// 127 is defined in GSM as the AUXVDD index
#define MODEM_GPS_ENABLE_GPIO (127)
#define MODEM_GPS_ENABLE_LEVEL (1)

#elif defined(LILYGO_T_A7608X_S3)

#define MODEM_BAUDRATE (115200)
#define MODEM_DTR_PIN (7)
#define MODEM_TX_PIN (17)
#define MODEM_RX_PIN (18)
// The modem boot pin needs to follow the startup sequence.
#define BOARD_PWRKEY_PIN (15)
#define BOARD_BAT_ADC_PIN (4)
// The modem power switch must be set to HIGH for the modem to supply power.
// #define BOARD_POWERON_PIN (12)
#define MODEM_RING_PIN (6)
#define MODEM_RESET_PIN (16)
#define BOARD_MISO_PIN (47)
#define BOARD_MOSI_PIN (14)
#define BOARD_SCK_PIN (21)
#define BOARD_SD_CS_PIN (13)

#define MODEM_RESET_LEVEL LOW
#define SerialAT Serial1

#ifndef TINY_GSM_MODEM_A7608
#define TINY_GSM_MODEM_A7608
#endif

// only version v1.1 has solar adc pin
#define BOARD_SOLAR_ADC_PIN (3)

// 127 is defined in GSM as the AUXVDD index
#define MODEM_GPS_ENABLE_GPIO (127)
#define MODEM_GPS_ENABLE_LEVEL (1)

#elif defined(LILYGO_T_A7608X_DC_S3)

#define MODEM_DTR_PIN (5)
#define MODEM_RX_PIN (42)
#define MODEM_TX_PIN (41)
// The modem boot pin needs to follow the startup sequence.
#define BOARD_PWRKEY_PIN (38)
#define MODEM_RING_PIN (6)
#define MODEM_RESET_PIN (40)
#define MODEM_RTS_PIN (1)
#define MODEM_CTS_PIN (2)

#define MODEM_RESET_LEVEL LOW
#define SerialAT Serial1

#ifndef TINY_GSM_MODEM_A7608
#define TINY_GSM_MODEM_A7608
#endif

// 127 is defined in GSM as the AUXVDD index
#define MODEM_GPS_ENABLE_GPIO (127)
#define MODEM_GPS_ENABLE_LEVEL (1)


#elif defined(LILYGO_T_PCIE_A767X)

#define MODEM_DTR_PIN (32)
#define MODEM_RX_PIN (26)
#define MODEM_TX_PIN (27)
// The modem power switch must be set to HIGH for the modem to supply power.
#define BOARD_POWERON_PIN (25)
// The modem boot pin needs to follow the startup sequence.
#define BOARD_PWRKEY_PIN (4)
#define MODEM_RING_PIN (33)
#define BOARD_LED_PIN (12)
#define PMU_IRQ (35)

// No connect to reset pin to modem ,set dummy reset pin
#define MODEM_RESET_PIN (BOARD_LED_PIN)
#define MODEM_RESET_LEVEL (0)

#define SerialAT Serial1

#ifndef TINY_GSM_MODEM_A7670
#define TINY_GSM_MODEM_A7670
#endif

// 127 is defined in GSM as the AUXVDD index
#define MODEM_GPS_ENABLE_GPIO (4)
#define MODEM_GPS_ENABLE_LEVEL (0)

#else
#error "Use ArduinoIDE, please open the macro definition corresponding to the board above <utilities.h>"
#endif

// T-Call-A767X V1.0 and V1.1 have different Pinmaps and cannot be used universally , Invalid version
// #define LILYGO_T_CALL_A7670_V1_1

// #define LILYGO_T_A7608X_DC_S3

9 changes: 5 additions & 4 deletions platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@
; !default_envs 必须选择一个对应的板型 ,如果你不知道你的板型是哪种,请点击链接进行查看

; https://www.lilygo.cc/products/t-sim-a7670e
default_envs = T-A7670X
; default_envs = T-A7670X

; https://www.lilygo.cc/products/t-call-v1-4
; default_envs = T-Call-A7670X-V1-0
default_envs = T-Call-A7670X-V1-0


; Products Link: https://lilygo.cc/products/t-sim-7670g-s3
Expand Down Expand Up @@ -55,6 +55,7 @@ default_envs = T-A7670X
; src_dir = examples/HttpClient
; src_dir = examples/HttpsClient
; src_dir = examples/GPS_BuiltIn
; src_dir = examples/GPS_BuiltInEx
; src_dir = examples/GPS_Acceleration
; src_dir = examples/GPS_NMEA_Parse
; src_dir = examples/GPS_NMEA_Output
Expand Down Expand Up @@ -88,8 +89,8 @@ default_envs = T-A7670X
; src_dir = examples/SimHatRelay
; src_dir = examples/SimHatAccelerometer
; src_dir = examples/ULP_Monitor
src_dir = examples/SecureClient

; src_dir = examples/SecureClient
src_dir = examples/TextToSpeech

[env]
platform = [email protected]
Expand Down

0 comments on commit d74da4f

Please sign in to comment.