基于ESP32的文本到语音(TTS)转换web服务器
扫描二维码
随时随地手机看文章
文本转语音(TTS)技术已被广泛应用于语音助手、广播、自动取款机等领域。它也被用来帮助儿童学习说话和盲人交流。今天我们将使用ESP32来构建一个TTS(文本到语音)引擎,它可以将任何数字转换为语音。号码将从网页输入,语音将从ESP32附带的扬声器生成。也可以查看其他基于ESP32的物联网项目。
所需的组件
•ESP32单片机
•一个演讲者
•一种放大电路
•稳压电源
•连接电线
线路图
我们可以通过将扬声器连接到ESP32直接驱动扬声器,但声音会有很多噪音。因此,这里使用放大器电路来获得清晰响亮的声音。这里使用的是基于LM386的放大电路,其电路图如下:
这个电路图取自这个链接LM386基于音频放大器电路,通过这个链接了解更多关于这个放大器的功能。
连接扬声器到ESP32
完成上述放大电路后,将ESP32连接到放大电路上,如下图所示。ESP32的数字引脚25连接到10K电阻,ESP32的地连接到放大电路的地。
ESP32文本到语音的编程
使用ESP32将文本转换为语音的编程部分很简单。完整的代码和演示视频在本教程的最后给出。
首先,我们必须安装一个名为Talkie的库,它可以从这里下载。然后通过Sketch->Include Library-> add . zip Library将其添加到Arduino IDE中。
然后通过包含所有必需的库开始编写代码。“Wifi.h”、“WifiClient.h”用于创建客户端,通过Wi-Fi连接到ISP。WebServer.h用于创建web服务器,espmdn .h用于本地mDNS请求。
接下来为Talkie定义对象语音。
在下一部分中,我们将定义数字(即1、2、3等)。你也可以添加更多的单词/音素,通过记录每个声音并将其转换为十六进制代码。有各种软件可用于将它们转换为十六进制,如二进制查看器。
现在定义一个函数,它可以输出-999,999到999,999之间的任何数字。这个函数可以在Talkie库中找到。这个函数使用简单的逻辑。首先,它会检查数字是否为负,如果是负的,它会在说出单词之前加上一个“-”。如果它是零,那么它说的是零。
然后它检查这个数字是否大于或等于千,这样它就可以在输入之前附加“千”。然后,它通过将数字除以1000来检查余数,以告诉1000之后的数字。同样的逻辑用于百位数或三位数。
现在设置Wi-Fi。在代码中输入替换Wi-Fi的名称和密码。因为我们使用的是HTTP协议,所以我们在server()函数中输入80。因为80是HTTP的默认端口号。
现在定义一个数组htmlResponse来获取来自网页的输入。
接下来定义一个函数handleRoot()来创建一个html页面。snprintf()函数用于生成其中编码的html页面。现在,通过将htmlResponse数组及其大小传递给它,开始对html页面进行编码。首先给标题命名为“文本到语音”。然后在HTML中创建文本框和按钮。
接下来编写JavaScript代码。首先为我们正在获取的输入定义一个变量Number,然后将文本框中输入的值赋给Number。最后将网页发送到服务器。
在下一部分中定义一个函数handleSave()。这里我们把字符串转换成整型,因为我们得到的输入是一个字符串,为了把它说出来,我们必须把它作为整型来使用。
现在在setup()函数中,首先,我们将数字引脚25定义为输出并保持高电平。然后使用Wifi.begin()函数初始化Wi-Fi,并打印一些状态信息。然后在接下来的几行中,我们通过调用handleRoot()函数启动服务器,并通过调用handleSave()函数从web页面获取输入,最后打印消息“HTTP服务器已启动”。
文本到语音转换使用ESP32通过网页
最后使用Arduino IDE将代码上传到ESP32并运行。打开串口监视器,复制串口监视器显示的IP地址,如下图所示。
网页看起来是这样的:
输入任意号码,点击“说话”按钮,系统就会说出该号码。
这就是ESP32如何将文本转换为语音,这个网页可以在世界任何地方通过转发Wi-Fi路由器的端口打开。
本文编译自iotdesignpro