树莓派 vs ESP32-S3,做 AI 语音助手谁更合适?两种方案我都试试

0 阅读8分钟

树莓派 vs ESP32-S3,做 AI 语音助手谁更合适?两种方案我都试试


一、开头:我是怎么入坑的

最近「小智」AI 桌面伴侣在嵌入式圈子里火得不行,作为一个嵌入式开发者,我也手痒了。

但第一步就卡住了:到底用树莓派还是 ESP32-S3?

网上说法五花八门,树莓派派说性能强生态好,ESP32 派说便宜够用才是王道。争来争去,没人真正两边都试过。

正所谓小孩子才做选择,我全都要,所以那我两个都试。 这篇文章先做个理论对比,然后分别用两种方案搭建,记录各自的踩坑过程,最终用实际体验来回答"到底选谁"。


二、六个维度理论对比

动手之前,先从纸面上比比看:

💰 成本

树莓派ESP32-S3
主板树莓派 Zero 2W ¥494ESP32-S3 ¥25
屏幕GC9A01 ¥10 或者其他HDMI屏幕GC9A01 ¥10
麦克风USB声卡麦克风ES8311 ¥
喇叭+功放USB声卡麦克风 ¥一起45ES8311 ¥一起12
总计¥549¥47

📝 对于成本方面来说,结果显而易见,如果你是学生党,不用犹豫直接选择ESP32-S3的方案;如果你是一个不缺钱的少爷,只是最求最极致的效果那么可以选择树莓派zero2w的方案。

⚡ 功耗

场景树莓派ESP32-S3
待机1.4W约 0.1~0.4W
工作(满功耗运行)2.9W0.6W

📝 ESP32-S3 是低功耗微控制器,适合电池设备;树莓派 Zero 2 W 是小型Linux电脑,功耗高很多。这个就要根据具体的应用场景做选择了,如果你需要在小智的基础上增加更多有意思的功能,那么就可以选择树莓派zero2w;如果你需要应用在随身携带的需要低功耗运行的场景,那么选择ESP32-S3就是一个不二之选。

🎤 音频

树莓派ESP32-S3
麦克风方案USB麦克风I2S 数字麦,直连
喇叭方案USB声卡I2S 功放,直驱
踩坑指数效果好,价格高效果差,价格低

📝 花多少钱做多少事情,在开发方面使用USB的声卡和麦克风可以省去驱动的开发过程,同样的就需要花费更多的钱;使用I2S的麦克风在ESP32上就需要花费更多的时间去开发驱动,但是花费的成本较低且效果会比较差。

🧠 AI 算力

树莓派ESP32-S3
能否本地跑模型✅ 可跑轻量模型 / 联网调 API❌ 基本不行
实际方案联网调 API联网调 API

📝 对于树莓派来说,虽然可以部署轻量化的模型,但是效果一定是没有调用API大模型的效果好,所以我实际使用的方案都是联网调用API,还有两个个原因就是即使在本地部署了轻量化的模型可以节省成本,但是会占用大量的资源导致功耗上升;还有就是调用大模型的时间可能要比在本地部署后运算的时间快。对于ESP32就只能使用联网调用API,虽然都是调用API,但是实现方式也是不一样的,在树莓派上使用API可以通过直接连接AI平台,而使用ESP32连接则需要通过一个中转的服务器进行协议的转换后才可以连接到AI平台,所以联网调用API接口树莓派会更方便。

🔧 开发门槛

树莓派ESP32-S3
语言Python / C++C / ESP-IDF
环境搭建刷系统即可 / 简单安装 ESP-IDF 工具链
调试方式SSH / 插屏幕键盘串口 / JTAG
学习曲线开发速度快开发速度慢

📝 对于树莓派来说使用的硬件都可以使免驱动的,而ESP32基本上都需要从驱动开始开发,所以速度上树莓派要快不少,但是前提是你有一定的Linux开发的基础。


三、不纠结了,两种方案都试试

为啥不直接选一个?

  • 理由 1:纯理论对比都是纸上谈兵,实际做一遍才知道哪个适合自己
  • 理由 2:两种方案代表两种思路——树莓派是"性能优先",ESP32 是"够用就好"
  • 理由 3:做系列博客,两条路都走一遍,内容更丰富,读者也能各取所需

两条线的计划

路线平台目标当前进度
🅰️ 路线 AESP32-S3低成本、低功耗、小巧的镜子伴侣✅ 已完成屏幕/麦/喇叭驱动
🅱️ 路线 B树莓派高性能、多功能的桌面助手方案设计中

四、路线 A:ESP32-S3 方案 & 驱动踩坑

📌 这篇先把 ESP32-S3 的进展汇报了

硬件清单

模块型号接口
主控ESP32-S3-N8R2-
屏幕GC9A01接线表如下
麦克风和喇叭功放ES8311接线表如下

LCD 显示引脚(GC9A01,SPI 接口)

功能GPIO说明
SCLK18SPI 时钟
MOSI19SPI 数据输出
MISO21SPI 数据输入(GC9A01 未使用)
DC5数据/命令选择
RST3硬件复位
CS4SPI 片选
BL2背光控制(GPIO 高低电平)
TOUCH_CS15触摸片选(已定义,未使用)
  • SPI 主机:SPI2_HOST
  • SPI 模式:Mode 0
  • SPI 时钟:40 MHz
  • 分辨率:240×240
  • 色深:16 位 RGB565(BGR 字节序)

音频引脚(ES8311,I2S + I2C 接口)

功能GPIO说明
MCLK6I2S 主时钟
BCLK7I2S 位时钟
WS8I2S 字选(左右声道)
DO11I2S 数据输出(播放)
DI12I2S 数据输入(录音)
I2C_SCL9ES8311 I2C 时钟
I2C_SDA10ES8311 I2C 数据
  • I2S 端口:I2S_NUM_0
  • I2C 端口:I2C_NUM_0
  • 采样率:16000 Hz
  • MCLK 倍频:384
  • ES8311 I2C 地址:0x30(ES8311_ADDRRES_0

▲ ESP32-S3 驱动 GC9A01 屏幕显示眼睛动画效果

在这里插入图片描述

踩坑记录

屏幕驱动
  • 驱动 IC:GC9A01
  • 遇到的问题:使用LVGL驱动屏幕显示动画时系统总是重启
  • 怎么解决的:原因是images 数组是局部栈变量,lv_animimg_set_src() 内部保存了指向它的指针。当 example_lvgl_demo_ui() 返回后栈内存被回收,LVGL 动画定时器后续访问时读到垃圾数据(0x00000073)导致 LoadProhibited。解决办法:将 images 改为 static,使其生命周期持续整个程序运行期间
麦克风驱动
esp_err_t es8311_microphone_config(es8311_handle_t dev, bool digital_mic)
{
    uint8_t reg14 = 0x1A;               // 使能模拟 MIC,设置最大 PGA 增益
    if (digital_mic) {
        reg14 |= BIT(6);                // 数字 PDM 麦克风(不使用)
    }
    es8311_write_reg(dev, 0x17, 0xC8);  // ADC 增益设置
    return es8311_write_reg(dev, 0x14, reg14);
}
喇叭驱动
static esp_err_t es8311_codec_init(void)
{
    // I2C 初始化,用于配置 ES8311 寄存器
    const i2c_config_t es_i2c_cfg = {
        .sda_io_num = GPIO_NUM_10,
        .scl_io_num = GPIO_NUM_9,
        .mode = I2C_MODE_MASTER,
        .sda_pullup_en = GPIO_PULLUP_ENABLE,
        .scl_pullup_en = GPIO_PULLUP_ENABLE,
        .master.clk_speed = 100000,
    };
    i2c_param_config(I2C_NUM_0, &es_i2c_cfg);
    i2c_driver_install(I2C_NUM_0, I2C_MODE_MASTER, 0, 0, 0);

    es8311_handle_t es_handle = es8311_create(I2C_NUM_0, 0x18);
    const es8311_clock_config_t es_clk = {
        .mclk_inverted = false,
        .sclk_inverted = false,
        .mclk_from_mclk_pin = true,     // MCLK 来自专用 MCLK 引脚
        .mclk_frequency = 16000 * 384,  // = 6.144 MHz
        .sample_frequency = 16000,       // 16kHz 采样率
    };
    es8311_init(es_handle, &es_clk, ES8311_RESOLUTION_16, ES8311_RESOLUTION_16);
    es8311_voice_volume_set(es_handle, CONFIG_EXAMPLE_VOICE_VOLUME, NULL); // 设置音量 (0-100)
}

五、当前效果(路线 A)

✅ 屏幕:正常点亮 ✅ 麦克风:收音正常 ✅ 喇叭:测试音频通过

展示视频

[video(video-LQCZwIMp-1784357000097)(type-csdn)(url-live.csdn.net/v/embed/535…)]


六、下一步

路线下一步计划
🅰️ ESP32-S3WiFi 配网 + 接入大模型 API,让它真正"开口说话"
🅱️ 树莓派环境搭建 + 屏幕/麦/喇叭驱动,和路线 A 正面 PK

▲ 树莓派 Zero 2W 主板,路线 B 的核心硬件 在这里插入图片描述

树莓派买回来了,花了主播470大洋好心疼,希望能为主播点个关注点个赞支持一下,我会为想入坑的家人们提供更好的参考建议。

吐槽一句怎么最近的树莓派和电子设备都在涨价啊,主播也只是个穷鬼啊,还想着最近换个新电脑开发更流畅的,我的钱包让我忍着TVT

下一篇预告:路线 A 续集——ESP32-S3 联网 + 大模型 API 对接


七、资源链接