
TV-Pro双固件在线大模型小电视
简介
本项目基于立创ESP32S3R8N8开发板,可在线运行讯飞星火/小智AI等在线大模型服务。
简介:本项目基于立创ESP32S3R8N8开发板,可在线运行讯飞星火/小智AI等在线大模型服务。开源协议
:GPL 3.0
描述
- 本项目基于【立创开发板 ESP32S3R8N8】构建,是一个可在线运行的 AI 大模型小电视。
- 提供双固件:支持TV-PRO固件/小智AI固件
- 项目结构与电路设计简单,适合新手复刻焊接,大部分电路采用可拆卸模块,无需深入电路知识,模块均通过排母连接,可轻松拆卸。
- 不含开发板的拓展板+模块套件成本为30元左右。
项目功能
本项目支持两种固件可供选择
- ✅ 原生讯飞实时语音大模型
- ✅ 原生讯飞星火大模型
- ✅ WebSocket流式传输
- ✅ 万码云豆包 / cosyvoiceTTS 大模型
- ✅ 中译英翻译功能
- ✅ 英译中翻译功能
- ✅ 当日天气
- ✅ 时间显示
- ✅ 小智AI官方功能
开发文档及教程
嘉立创EDA-教育与开源文档中心硬件参数
- 基于【立创开发板 ESP32S3R8N8】,内置 WIFI,通过 HTTPS/WebSocket 完成 API 请求
- 屏幕使用 ST7789 驱动 1.3 寸屏幕,用于显示天气、时间等信息
- 功放模块 Max98357,通过 I2S 协议传输数据
- 麦克风 INMP441 全向麦克风,通过 I2S 提供音频采集
- 8R1W 喇叭,提供音频播放
硬件设计
软件开发
本项目的软件代码比较复杂,且涉及编解码加密,通讯接口对接等整体代码较长,这里不详细展示,详细代码请到在线文档中查看,代码中并没有做过多优化,可能存在冗余,可自行优化。
- 软件环境:VSCode+PlatformIO
- 开发语言:C/C++
为方便无服务器玩家开发,本项目采用无服务器接入在线API实现,但也正因如此,我们需要使用多个API服务来回调用。如果你有服务器则可以集成服务,只需要请求一个API就好,就像小智AI一样。所以总的来说小智AI的调用会更为简单和方便。
- ASR服务:讯飞-语音听写(流式版)
- 大语言模型服务:讯飞-星火Spark4.0 Ultra
- TTS服务:万码云TTS-豆包
- ArduinoJson:解析/生成Json文件
- ArduinoWebsockets:WebSockets通讯
- ESP32-audioI2S:通过URL获取音频播放
- ESPAsyncWebServer-esphome:页面配置
- TFT_eSPI:UI界面
- NTPClient:实时时间同步
- void handleWiFiConfig():管理WiFi配置(保存/读取)
- void loadWiFiConfig():加载WiFi配置文件
- void fetchWeather():从API获取天气数据
- String base64Encode(const uint8_t *data, size_t len):二进制数据Base64编码
- String base64EncodeUserInput(const String &userInput):用户输入Base64编码
- String getDate():获取当前系统时间
- String hmacSHA256(const String &key, const String &data):HMAC-SHA256加密
- String calculateDigest(const String &body):计算消息体摘要
- String calculateSignature(...):生成API请求签名
- String generateSpeechAuthURL():生成语音服务鉴权URL
- String generateChatAuthURL():生成聊天服务鉴权URL
- void sendHandshake():发送WebSocket握手请求
- void sendAudioData(...):发送音频流数据帧
- void startRecording():启动麦克风录音
- void stopRecording():停止麦克风录音
- void onSpeechMessage(...):处理语音服务响应
- void playTTS(String textToSpeak):文本转语音播放
- void Translation(...):执行文本翻译
- void sendChatRequest(...):发送聊天请求
- void onChatMessage(...):处理聊天服务响应
- void displayTask(...):显示屏刷新任务
- String removeNonUTF8(...):过滤非UTF8字符
- void setup():系统初始化
- void loop():主循环逻辑
- processChatResult():解析聊天结果
- processSpeechResult():解析语音结果
- void connectWebSocket():建立WebSocket连接
- void handleButtonPress(...):处理物理按钮事件
3D外壳结构
3D外壳由嘉立创云CAD平台构建
3D外壳工程-嘉立创云CAD
| 侧面1 | 侧面2 |
|---|---|
![]() | ![]() |
- 外壳设计有螺丝孔柱,用于固定。
- 壳体内部添加倒角加强,屏幕部分为排针焊点添加槽位,屏幕下侧添加限位槽,避免屏幕受外力下凹。
- 壳内三角添加PCB支撑,避免PCB受力不均、凹凸不平。
- 主体外壳采用大圆角,使得整体美观圆润。
| 正面 | 背面 |
|---|---|
![]() | ![]() |
- 后壳同样采用大圆角,使得整机圆润。
- 边角处同样采用倒角加强,并开Type-C挖孔。
- ESP32S3芯片处添加散热孔,排出外壳内部热量。
安装结构
项目采用的是三段式结构,由前盖、主板、后盖构成
| 1 | 2 |
|---|---|
![]() | ![]() |
![]() | ![]() |
云服务请求

- USB/BLE协议的语音输入法
- PC性能监视器
- 电子相册
- ......
- 使用TV-Pro固件时请提前注册讯飞开放平台账户,并创建好应用APPID、APISecret、APIKey同时启用Spark4.0 Ultra大模型服务、语音听写(流式版)服务,以上服务首年可免费体验。TTS服务还需注册万码云平台获取APIKEY。
- 使用小智AI固件时请提前注册小智AI控制台账户,并按提示完成设备绑定。
FAQ
为什么需要调用这么多API?
本项目是一个无服务器后端的项目,所以我们只能通过MCU完成原生API整合调用,我们在开发时也没有找到合适的能一次性完成ASR、AI、TTS的整合API。如果你自己有服务器,则可以像小智那样部署一个后端服务处理API,这样服务器和MCU之间只需要调用一个API,还可大大降低程序复杂性,腾出更多空间。为什么主控发烫?
因为采用的是多个在线API,所以需要处理很多网络请求,这就导致需要较高功耗,产生较大热量。为什么语音输出较慢?
因为TTS这里采用的是在线URL解析音频,对网络和内容长短有较高要求,你可以优化代码,将应答内容分段多次请求TTS然后播放,但是这必然会消耗更多的API费用。如何配网?
开机后连接名称为TV-Pro的WIFI热点,浏览器输入192.168.4.1即可进入配网页面(部分手机会弹出WIFI无网络是否继续连接,务必点击继续。也有部分手机会直接切换到流量,导致无法配网。无法进入配网页面?
配网页面的html保存至spiffs文件系统中,这个固件需要单独刷入,如果未刷入会导致无法加载配网页面。TV-PRO源码
https://gitee.com/JasonYANG170/tv-pro
小智源码适配Fork
https://gitee.com/JasonYANG170/tv-pro_xiaozhi
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。


















