站内搜索
发作品签到
#第十届立创电赛# 立创开发板AI训练营 #AI故事机
专业版

#第十届立创电赛# 立创开发板AI训练营 #AI故事机

371
0
0
0

简介

为孩子尝试定制个性化故事。按键可播放AI生成的简单童话,硬件(ESP32+ES8311)和最基本的代码开源(GPL3.0),功能仍在完善中,欢迎交流改进。

简介:为孩子尝试定制个性化故事。按键可播放AI生成的简单童话,硬件(ESP32+ES8311)和最基本的代码开源(GPL3.0),功能仍在完善中,欢迎交流改进。
第十届立创电子设计开源大赛

开源协议

Public Domain

创建时间:2025-08-14 21:46:49更新时间:2025-09-08 16:41:23

描述

1、项目功能介绍

家里小朋友喜欢听故事,有自己喜欢的人物和故事偏好,结合AI个性化定制专属的故事。

比如小朋友按一个键或者摇一摇,然后,故事机就会利用AI大模型,真的把这个独一无二的故事“编”出来,然后用听起来很自然的声音讲给他听。

概念设计图.png

2、项目属性

原创,未参与过其他比赛

3、开源协议

GPL3.0开源协议

4、硬件部分

其实类似的方案很多,我只需要一个简版,但是我手上只有普通的驻极体麦克风,就需要ADC芯片,加上麦克风也需要功放,就在某宝买了几个ES8311。

东西倒不贵,到了以后我就后悔了,太小了,之前看介绍没有实感,到货以后字都看不清楚,我感觉我没法焊接,又重新买了电子放大镜和加热台。

dMZkcOxsPmpa0Rofsw7SmINqY718gTpdsRkBRSXm.png

(用下立创商城的图,只有3mm大)

为了保险起见,先只焊接ES8311,没想到整体出乎意料的顺利,第一次焊接ES8311就成功了。
然后用电烙铁焊接的剩余元器件的时候不小心把电容焊接错了,麦克风正负极意外连上了,上电以后直接发烫,还好主控没坏。
第二块板子整体加热台焊接顺利焊好了,麦克风是之前哪次从立创商城凑单屯的货,只有线没有头,我又重新买了XH2.54的端子用镊子压了一个,接上去麦克风不响。重新买了压线钳之后终于听到声音了。

感觉如果不追求最终实物的大小,其实用模块可能更快一些。

最开始屏幕和按键都在正面,发现娃老是乱按,就把按钮拆下来反过来焊接,正面只留屏幕。再后来晚上睡前听故事,又发现娃老是要注意屏幕,屏幕还闪烁,把屏幕也下了。语音唤醒对于发音要求还蛮高的,小孩子的声音始终没法语音唤醒,最后直接搞成最简形态,背面的按钮按一下开始放故事,按一下切换和暂停。

为了检测晃动,还加上了六轴运动处理传感器(MPU-6500)和SD卡座,想着后面可以做儿歌播放,现在智能音响虽然可以播放音乐,但是每次都先插播广告,让人难受。MPU-6500也很小,焊接失败过一次,这块暂时预留硬件能力,还没有写软件部分。

外壳是第一次尝试立创的3打印,外壳大小没问题,就是这个螺丝孔确实没有明白怎么玩,没有螺纹不知道怎么装,最后热熔胶沾上的。

1.jpg

2.jpg

5、软件部分

软件部分使用ESP IDF 和 C++开发。

AI部分主要考虑速度和成本,综合一圈下来,某度的ERNIE-Speed模型免费且速度快,适合生成故事。TTS先尝试用了ESP-SR自带的,声音稍微有点声音,最后换成百度的短文本生成,可选音色很多,效果不错,合成一次几厘钱。

折腾硬件焊接用了太多时间,目前软件实现比较简单,按键后播放预设的主题和故事,硬件预留了麦克风和三个按键后面有时间再添加其他功能。

当前项目结构和说明

  1. main/main.cc:

    • 程序的入口点,包含 app_main 函数。它初始化了 App 类的单例实例,并调用其 Start()MainLoop() 方法。这是整个应用程序启动的地方。
  2. main/app.h / main/app.cc:

    • 核心应用逻辑 (App 类):
      • App 是一个单例类,管理整个应用程序的生命周期。
      • Start() 方法是初始化和执行流程的核心:
        • 初始化 NVS (非易失性存储)。
        • 启动 WiFi 连接。
        • 初始化 I2C 总线。
        • 初始化 AudioService
        • 初始化 AI 模块。
        • 初始化 TTS 模块。
        • 调用 AI 模块生成一个关于“小熊布鲁喜欢刷牙”的故事。
        • 调用 TTS 模块将生成的故事文本转换为 PCM 音频数据。
        • 调用 AudioService 播放生成的音频。
      • MainLoop() 方法进入一个无限循环,等待并处理事件(目前只处理错误事件)。
  3. main/board/board.h / main/board/board.cc:

    • 硬件抽象和初始化 (Board 类):
      • Board 也是一个单例类,负责与底层硬件(特别是网络和 I2C)交互。
      • initNvs(): 初始化 NVS 闪存。
      • startWifi(): 配置并启动 WiFi 连接,使用 config.h 中定义的 SSID 和密码。
      • initI2C(): 配置并初始化 I2C 主总线,用于与音频编解码器通信。
      • GetI2CBusHandle(): 提供对已初始化的 I2C 总线句柄的访问,供其他模块(如 AudioService)使用。
  4. main/ai/ai.h / main/ai/ai.cc:

    • AI 故事生成 (AI 类):
      • 封装了与 OpenAI 兼容的 API(如文心一言)的交互。
      • ai_init(): 使用 config.h 中的 API 密钥和基础 URL 初始化 OpenAI 客户端库,设置模型和参数。
      • ai_get_story_content(): 向 AI API 发送一个带有特定提示(要求创作儿童故事)的请求,获取生成的文本故事内容。
  5. main/tts/tts.h / main/tts/tts.cc:

    • 文本转语音 (TTS 类):
      • 使用百度 AI 平台的 TTS 服务。
      • tts_init(): 通过百度 API 获取访问令牌 (access_token),这是调用 TTS 服务所必需的。
      • tts_generate(): 使用获取到的令牌和故事文本,向百度 TTS API 发送请求,将文本转换为 PCM 格式的音频数据,并存储在 pcm_audio_buffer 成员变量中。
  6. main/audio/audio.h / main/audio/audio.cc:

    • 音频播放 (AudioService 类):
      • 负责配置和控制音频硬件(I2S 接口和 ES8311 编解码器)。
      • Initialize(): 初始化 I2S 通道和 ES8311 音频编解码器,设置采样率、位宽等参数,打开音频设备。
      • Play(): 接收 PCM 音频数据(来自 TTS 模块),并通过配置好的编解码器和 I2S 接口播放出来。
  7. main/config.h:

    • 配置文件: 包含所有需要配置的敏感信息和设置,如 WiFi 凭据、OpenAI API 密钥和端点、百度 AI API 密钥和 TTS 相关参数。这是项目中需要根据实际环境进行修改的关键文件。

6、BOM清单

类别名称封装数量
芯片LCKFB-ESP32S3R8N8DIP-40_L20.32-W51.66-P2.54-LS15.241
ES8311WQFN-20_L3.0-W3.0-P0.40-BL-EP1.71
NS4150BMSOP-8_L3.0-W3.0-P0.65-LS5.0-BL1
MPU-6500QFN-24_L3.0-W3.0-P0.40-BL-EP1
电阻5.1kΩR12062
10kΩR12061
2.2kΩR12062
220ΩR12062
4.7kΩR12063
R12062
电容1uFC120611
100nFC12066
22uFCAP-TH_BD6.3-P2.50-D0.6-FD-11
连接器TYPE-C 6P(073)TYPE-C-SMD_TYPE-C-6P-0731
2.54-1*8P母环保HDR-TH_8P-P2.54-V-F-11
ZX-XH2.54-2PZZCONN-TH_2P-P2.50_HX25003-2A1
开关/按键SK-12E12-G5SW-TH_SK-12E12-G51
ZX-QC66-8.5CJSW-TH_4P-L6.0-W6.0-P4.50-LS6.33
卡座TF PUSHTF-SMD_TF-PUSH1
发光二极管XL-3216UGC-FBLED1206-FD_GREEN-EH1
麦克风GMI9745P-56DBMIC-TH_BD9.7-P2.54-D0.8-L-FD1
结构件M3螺丝M3螺丝4

7、大赛LOGO验证

正面.png

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

3D模型

序号文件名称下载次数
暂无数据

附件

序号文件名称下载次数
1
立创电赛:ai故事机-播放演示-1.mp4
0
2
ai-story-master.zip
1
克隆工程
添加到专辑
0
0
分享
侵权投诉
知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

底部导航