利用嘉立创EDA制作支付语音播报硬件电路
本文介绍了一种自制智能收款语音播报系统的解决方案。系统通过手机端获取支付信息并转发至MQTT服务器,由ESP32开发板订阅消息后,利用SYN6288E语音模块实时播报收款金额。文章详细阐述了硬件电路设计(包括电源转换、语音模块等9个功能电路),PCB布局要点,以及核心代码框架(包含WiFi连接、MQTT订阅、语音合成等功能)。该系统可避免商家使用第三方收款服务产生的手续费,实现低成本、自动化的收款
许多店里都请了员工,但是收款码确是自己手机的,而收款微信因为要与客户联系等诸多原因没有办法放在店里,因此需要购买收钱吧并支付收款金额0.12%的手续费。作为一名自动化人,怎能愿意让广大创业者被如此厚颜无耻之人收手续费呢!!!(附相关电路原理图和layout文件)

一、思路
如果想要一个能播报任意金额(不只是预设的固定金额)的语音播报器,可以采用以下方案:手机端安装MacroDroid将支付收款消息转发到MQTT服务器,ESP32连接本地WIFI后实时获取MQTT订阅的主题消息,再利用SYN6288E语音模块实时播报即可。
二、硬件电路
同时,为了保证续航、充放电、程序上载、芯片供电,需要对以下电路进行设计。均参考相关芯片说明文档和部分网上电路制作而成。
1.SYN6288E语音播报电路;

2.锂电池充电电路;

3.锂电池3.7V转5V稳压电路;

4.5V转3.3V稳压电路;

5.5V转3.7V稳压电路;(锂电池在充放电过程中电压不稳定,需要稳定的3.7V)

6.CH340串口电路;

7.type-C程序下载电路;

8.自动下载电路;

9.主控电路;

三、PCB layout
因为我也是第一次做layout,所以不太好看,但应该是可以用的:
1.铺铜正面(接口处有DRC警告,但不影响实际使用):
2.铺铜反面:

3.未铺铜正面:
4.未铺铜反面:

板子制作建议立创EDA领券后下单,电阻电容等便宜的元器件可以在立创商城直接下单,SYN6288E和ESP32模块建议淘宝下单更便宜。
四、代码框架:
#include <WiFi.h>
#include <PubSubClient.h>
#include <SoftwareSerial.h>
// WiFi设置
const char* ssid = "你的WiFi名称";
const char* password = "你的WiFi密码";
// MQTT设置
const char* mqtt_server = "broker.emqx.io"; // 免费MQTT服务器
const char* topic = "payment/notify"; // 订阅主题
WiFiClient espClient;
PubSubClient client(espClient);
SoftwareSerial synSerial(16, 17); // RX, TX
// 发送指令到SYN6288
void synPlay(String text) {
// 文本转GB2312编码(SYN6288需要)
unsigned char gbText[100];
int len = text.length();
text.toCharArray((char *)gbText, len+1);
// SYN6288指令格式
unsigned char frame[20] = {0xFD, 0x00, 0x00, 0x01, 0x00};
frame[1] = len + 3;
frame[2] = 0x01; // GB2312编码
synSerial.write(frame, 5);
synSerial.write(gbText, len);
}
// 从消息中提取金额
float extractAmount(String msg) {
int start = msg.indexOf("¥");
if(start == -1) start = msg.indexOf("¥");
if(start != -1) {
String numStr = msg.substring(start+1);
return numStr.toFloat();
}
return 0.0;
}
// MQTT回调
void callback(char* topic, byte* payload, unsigned int length) {
String message;
for(int i=0; i<length; i++) {
message += (char)payload[i];
}
if(message.indexOf("收款") != -1) {
float amount = extractAmount(message);
if(amount > 0) {
String voiceMsg = "微信收款" + String(amount) + "元";
synPlay(voiceMsg);
}
}
}
void reconnect() {
while(!client.connected()) {
if(client.connect("ESP32Client")) {
client.subscribe(topic);
} else {
delay(5000);
}
}
}
void setup() {
Serial.begin(115200);
synSerial.begin(9600);
WiFi.begin(ssid, password);
while(WiFi.status() != WL_CONNECTED) delay(500);
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
// 测试语音
synPlay("语音模块初始化完成");
}
void loop() {
if(!client.connected()) reconnect();
client.loop();
}
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)