构建离线ESP32语音助手
扫描二维码
随时随地手机看文章
简介:一个“无麦克风”语音助手的案例
在一个总是监听设备的时代,我想探索另一种选择:一种智能、反应灵敏、完全由用户控制的语音助手。我的ESP32语音助手v0.1项目演示了如何构建一个强大的人工智能驱动的设备,而不需要一个“永远在线”的麦克风。这不仅提供了一层隐私,而且还允许有意控制API令牌的使用(服务器代码中限制为25个)。
本指南将引导您将ESP32,使用Gemini API和gTTS的Python服务器,I2S音频放大器和OLED显示器集成到功能性语音助手中。
功能一览
•离线操作:按钮驱动的选择预定义的提示可重复,麦克风自由交互。
•Gemini API集成:Python服务器使用Gemini进行智能文本响应。
•token - efficient:在Python服务器中故意设置输出长度限制(25),以管理AI令牌消耗。
•文本到语音(TTS):通过gTTS库生成实时音频流。
•I2S音频输出:通过MAX98357A放大器和4欧姆扬声器播放高质量声音。
•视觉反馈:0.96英寸的OLED显示屏和状态led提供清晰的操作状态(例如,“Thinking…”,“Speaking…”,“Ready”)。
它是如何工作的:系统架构
该项目采用客户机-服务器体系结构。ESP32作为客户端,处理用户输入和音频输出,而Python服务器管理AI和TTS处理。
•初始化:ESP32连接到Wi-Fi,显示“Ready”,等待输入。
•用户输入:
•“下一步”按钮:循环通过存储在ESP32上的预定义文本提示数组。
•“发言”按钮:触发发言过程。当前选择的提示符通过HTTP GET请求发送到Python服务器。
•Python服务器处理:
•接收到提示后,服务器将其发送到Gemini API。
•Gemini返回一个文本响应。然后将此响应截断或过滤为预定义的长度,以保存AI令牌。
•处理后的文本被输入到gTTS库中,该库生成一个音频流。
•音频回放:服务器将音频流回ESP32。ESP32利用其I2S外设通过MAX98357A放大器和扬声器播放该流。
•状态更新:服务器通信时OLED显示屏显示“Thinking…”,音频播放时显示“Speaking…”,并有对应的LED指示灯。
它是如何制作的
硬件组件
•单片机:ESP32 Dev Kit C
•显示:0.96英寸OLED显示屏(SSD1306)
•音频输出:MAX98357A I2S d类放大器+ 8欧姆扬声器
•用户输入:2个触觉按钮
•视觉提示:红色和绿色led
•杂项:面包板,跳线,1A USB电源
接线图和引脚
(所有接地引脚应接在共同接地轨上)
软件设置:固件和服务器
该项目需要设置ESP32固件(使用Arduino IDE)和Python服务器。在这里获取代码。
1. ESP32固件安装(Arduino IDE)
•安装Arduino IDE并添加ESP32板管理器
•从Boards Manager中安装esp32包。
•通过库管理器安装必要的库:“Adafruit GFX库”和“Adafruit SSD1306库”。
•上传提供的固件代码(确保更新了Wi-Fi凭据)。
2. Python服务器设置
•确保安装了Python 3。
•创建并激活虚拟环境。
•安装依赖:pip Install -r requirements.txt
•使用GEMINI_API_KEY="YOUR_API_KEY_HERE"创建a.e env文件。
•运行server: python server.py。
结论和未来的改进
该项目为构建交互式AI驱动硬件提供了坚实的基础。它突出了将现成的微控制器与强大的AI API和高效的TTS解决方案相结合的能力。未来的增强可能包括添加更复杂的提示管理、基于web的配置界面,甚至与本地语音模型集成,以实现完全的气隙操作。
本文编译自hackster.io





