芯步的30W壁挂音箱开放了HTTP接口,支持通过POST请求直接推送文本进行TTS语音播报。下面从接口协议、签名计算、命令格式到代码示例,整理一套完整的二次开发方案。
一、 背景与适用场景
芯步的 30W 智能语音壁挂音箱(Pro版)核心优势在于 “文本转语音” 与 “远程HTTP控制” 。
只要音箱联网,你就可以通过任何后端语言(Java、Python、Go、PHP等)给音箱的 IP 地址或云端 API 发送一条指令,它就能立刻把文字“说”出来。
适用场景:
智慧餐厅/咖啡厅: 美团/饿了么订单来了,自动播报“您有新的外卖订单,请及时处理”。
工厂/仓库: 对接ERP系统,货物到达某个闸口时,自动播报“A3货架已满,请尽快转运”。
呼叫系统: 对接排队系统,直接叫号。
安防警报: 传感器触发时,远程发送警报语音。
二、 准备工作
在写代码之前,需要先拿到三个关键凭证。这里的核心思路取决于你的网络环境,芯步支持公有云和私有化(局域网) 两种模式。
硬件就绪: 给音箱插电,通过“物联网控制台”或“小程序”将音箱连接到 2.4G WiFi。
获取凭证:
设备ID: 在芯步后台的控制台里,找到这个音箱的唯一UID(例如:
1878或一长串字符串)。AppID / AppSecret: 登录官网后台,在“开发者中心”可以找到。这是调用云端API的钥匙。
局域网IP(可选): 如果你想把音箱关进内网不让外网访问,去路由器后台看音箱被分配的内网IP(例如:
192.168.1.123)。
三、 核心技术原理解析
音箱听不懂太复杂的命令,它只认HTTP请求和特定的JSON格式。最关键的一点是:中文字符必须转码。
由于音箱底层系统对字符集的要求,你不能直接发送 {"play":"你好"},必须把“你好”转成 GBK/GB2312 编码的16进制字符串。
“你好” 转 GBK 十六进制 =
c4e3 bac3(去掉空格后为c4e3bac3)最终的播报命令:
{"play:gbk:16":"c4e3bac3"}
四、 开发实战:两种实现模式
针对“远程”二字,有两种实现方式:广域网模式(设备在公司,人在家里)和局域网模式(纯内网,断网也能用)。
方案一:局域网模式(私有化部署,速度快,推荐)
这是最简单粗暴且稳定的方法,适合车间、办公楼内部,不依赖互联网,延迟极低。
逻辑: 你的服务器直接拿着音箱的内网IP,往它的 /control 端点塞数据。
操作步骤:
确保你的电脑/服务器和音箱在同一个路由器下(同一个网段)。
假设音箱IP是
192.168.1.123。
Python 代码示例(最简单版):
需要留意的地方: 根据你配置时是否设置了 secret 密码,请求地址可能是 http://192.168.1.123/control?sign=xxxx。如果没有设置密码,直接POST就行。
方案二:广域网模式(云端API,适合连锁店)
如果你有几十家分店,或者想在手机上远程给家里喊话,需要用这个模式。音箱不用暴露公网IP,由芯步的云服务器中转。
逻辑: 你的服务器调用 api.thingboot.com,带上签名,云服务器再把指令推给音箱。
难点在于“签名计算”:芯步的签名算法是:sign = MD5( MD5(AppSecret) + ts )。
Java 代码示例(Spring框架风格):
五、 进阶技巧:不仅说话,还要调音
光让它说话不够,作为“二次开发”,你肯定想控制音量或音色。芯步的接口非常灵活,你可以通过修改 order 里的命令来实现。
调音量:
{"volume":"7"}(范围0-9,9最大)切换男女声:
{"voice":"1"}(1为男声,0为女声)先响铃再说话:
{"play:gbk:16":"[message_3]欢迎光临"}(message_3是内置提示音)组合命令:实际上你可以先发一个音量命令,紧接着发一个播报命令,或者你自己后端做个简单的封装。如果设备支持链式,也可以尝试一次请求带多个字段(视具体固件版本而定,常规分两次调用最稳定)。
六、 排查常见问题
为什么音箱没反应?
检查 中文字符转码。你直接发
{"play":"你好"}它大概率听不懂,必须转成c4e3...这种纯英文和数字的十六进制格式。
一直返回401或签名错误?
检查时间戳
ts是不是秒数(10位),不要用毫秒(13位)。检查计算顺序:先
md5(secret),拼接上ts(字符串拼接),再整体md5。
局域网模式下连接超时?
确认电脑和音箱是不是在同一个网段。
检查音箱的IP地址是不是变了(DHCP动态分配的话在路由器里把音箱的IP给固定一下)。
总结
30W壁挂音箱的二次开发门槛很低,本质就是一个 HTTP 客户端。只要把汉字 -> GBK十六进制这一步处理好,再用签名算法(云模式)或直接POST(局域网模式)把数据推过去,就能实现远程语音播报。