ESP32-S3 桌面语音移动机器人 DIY:可移动、可对话、带 OLED/RGB 和 3D 打印外壳

ESP32-S3 桌面语音移动机器人 DIY:可移动、可对话、带 OLED/RGB 和 3D 打印外壳

ESP32-S3 桌面语音移动机器人 DIY:可移动、可对话、带 OLED/RGB 和 3D 打印外壳

项目简介

这个项目是一个 500-1000 元级别的桌面语音移动机器人原型。它使用 ESP32-S3 作为主控,负责 Wi-Fi、音频采集与播放、电机控制、OLED 状态显示、RGB 状态灯和基础安全保护;AI 对话能力通过云端 API 实现。

第一版目标很明确:

  • 可以在桌面上两轮差速移动

  • 可以通过按键录音和云端 AI 对话

  • 可以识别"前进、后退、左转、右转、停止、转一圈"等语音动作指令

  • OLED 小屏显示工作状态、电池电压、Wi-Fi 和安全状态

  • RGB LED 用颜色提示录音、思考、说话、移动和故障

  • 底部红外传感器做桌面防跌落

  • 前方传感器做基础避障

  • 提供 3D 打印外壳 STL 和 OpenSCAD 参数化源文件

项目目录已经包含 Arduino 固件、接线文档、采购清单、云端接口约定、测试清单、3D 打印模型和安装爆炸图。

安装爆炸图

主要部件从上到下包括:

  • 上盖

  • OLED 屏

  • RGB 灯

  • ESP32-S3 主控

  • INMP441 麦克风

  • MAX98357A 功放

  • 小喇叭

  • 18650 电池

  • TB6612FNG 电机驱动

  • N20 电机和车轮

  • 防跌落传感器

  • 前方避障传感器

  • 底盘

硬件清单

| 模块 | 建议型号 | 数量 | 说明 |

|---|---:|---:|---|

| 主控 | ESP32-S3 N16R8 开发板 | 1 | 建议 16MB Flash、8MB PSRAM |

| 麦克风 | INMP441 I2S 数字麦克风 | 1 | 3.3V 供电 |

| 功放 | MAX98357A I2S 功放 | 1 | 接 4Ω/3W 小喇叭 |

| 喇叭 | 4Ω/3W | 1 | 小体积优先 |

| 电机 | N20 减速电机 | 2 | 6V、100-300RPM |

| 电机驱动 | TB6612FNG | 1 | 小车电机控制 |

| 底盘 | 两轮小车底盘 + 万向轮 | 1 | 可 3D 打印或亚克力 |

| 防跌落 | 红外反射传感器 | 2 | 装在底部前沿左右两侧 |

| 前方避障 | VL53L0X ToF 或数字避障模块 | 1 | 新手可先用数字避障模块 |

| 状态屏 | 0.96 寸 I2C SSD1306 OLED | 1 | 默认 128x64,地址 0x3C |

| 状态灯 | WS2812/NeoPixel RGB LED | 1 | 1 颗即可 |

| 电池 | 18650 + 保护板/电池盒 | 1 套 | 必须有保护 |

| 电源 | 5V 升压模块 | 1 | 主控供电稳定优先 |

| 外壳 | 3D 打印 PLA/PETG | 1 套 | 使用项目内 STL |

默认接线

TB6612FNG 电机驱动

| TB6612FNG | ESP32-S3 默认 GPIO | 说明 |

|---|---:|---|

| PWMA | GPIO 4 | 左轮 PWM |

| AIN1 | GPIO 5 | 左轮方向 |

| AIN2 | GPIO 6 | 左轮方向 |

| PWMB | GPIO 7 | 右轮 PWM |

| BIN1 | GPIO 15 | 右轮方向 |

| BIN2 | GPIO 16 | 右轮方向 |

| STBY | GPIO 17 | 高电平启用 |

I2S 麦克风 INMP441

| INMP441 | ESP32-S3 默认 GPIO |

|---|---:|

| SCK/BCLK | GPIO 12 |

| WS/LRCL | GPIO 13 |

| SD | GPIO 14 |

I2S 功放 MAX98357A

| MAX98357A | ESP32-S3 默认 GPIO |

|---|---:|

| BCLK | GPIO 9 |

| LRC | GPIO 10 |

| DIN | GPIO 11 |

OLED 和 RGB LED

| 模块 | ESP32-S3 默认 GPIO |

|---|---:|

| OLED SDA | GPIO 41 |

| OLED SCL | GPIO 42 |

| WS2812 DIN | GPIO 2 |

传感器和按键

| 模块 | ESP32-S3 默认 GPIO |

|---|---:|

| 左防跌落红外 | GPIO 18 |

| 右防跌落红外 | GPIO 8 |

| 前方避障 | GPIO 3 |

| 说话按键 | GPIO 0 |

| 电池电压 ADC | GPIO 1 |

软件架构

ESP32-S3 端负责硬件和联网,AI 能力放到云端中转服务。

交互流程:

  1. 按住说话键开始录音

  2. 松开按键后生成 16kHz、16-bit、mono WAV

  3. 上传 `/stt` 做语音识别

  4. 如果识别结果是移动指令,直接执行动作

  5. 如果是普通聊天,调用 `/chat`

  6. 再调用 `/tts` 生成语音

  7. ESP32-S3 通过 MAX98357A 播放回复

云端 API 约定:

```http

POST /stt

Content-Type: audio/wav

```

返回:

```json

{

"text": "往前走"

}

```

聊天接口:

```http

POST /chat

Content-Type: application/json

```

```json

{

"text": "你好",

"device": "esp32-desktop-robot"

}

```

返回:

```json

{

"reply": "你好,我在桌面上待命。"

}

```

TTS 接口:

```http

POST /tts

Content-Type: application/json

```

响应体建议直接返回 16kHz、16-bit、mono WAV。

固件配置

复制:

```text

firmware/desktop_voice_robot/config.example.h

```

为:

```text

firmware/desktop_voice_robot/config.h

```

然后修改 Wi-Fi 和云端接口:

```cpp

#define WIFI_SSID "你的WiFi名称"

#define WIFI_PASSWORD "你的WiFi密码"

#define AI_API_KEY ""

#define STT_URL "http://你的服务器:8080/stt"

#define CHAT_URL "http://你的服务器:8080/chat"

#define TTS_URL "http://你的服务器:8080/tts"

```

OLED 和 RGB LED 默认启用:

```cpp

#define USE_OLED_DISPLAY true

#define OLED_I2C_ADDRESS 0x3C

#define PIN_I2C_SDA 41

#define PIN_I2C_SCL 42

#define USE_RGB_LED true

#define PIN_RGB_LED 2

#define RGB_LED_COUNT 1

```

本地模拟云端服务

没有真实 AI 服务时,可以先用项目里的模拟服务测试 ESP32 到服务器的 HTTP 链路:

```powershell

python tools/mock_cloud_server.py --port 8080 --stt-text "前进"

```

然后把 ESP32 的接口地址改成电脑局域网 IP,例如:

```cpp

#define STT_URL "http://192.168.1.10:8080/stt"

#define CHAT_URL "http://192.168.1.10:8080/chat"

#define TTS_URL "http://192.168.1.10:8080/tts"

```

模拟服务说明:

  • `/stt` 返回固定文字

  • `/chat` 回显文本

  • `/tts` 生成一段测试音 WAV

Arduino IDE 环境

  1. 安装 Arduino IDE

  2. Boards Manager 安装 `esp32 by Espressif Systems`

  3. Library Manager 安装:

  • `ArduinoJson`

  • `Adafruit SSD1306`

  • `Adafruit GFX Library`

  • `Adafruit NeoPixel`

  1. 打开:

```text

firmware/desktop_voice_robot/desktop_voice_robot.ino

```

  1. 开发板选择 ESP32-S3,建议启用 PSRAM

  2. 编译并上传

  3. 串口监视器设置 `115200`

串口调试命令

| 命令 | 动作 |

|---|---|

| `f` | 前进 |

| `b` | 后退 |

| `l` | 左转 |

| `r` | 右转 |

| `x` | 转一圈 |

| `s` | 停止 |

| `v` | 查看电池电压 |

第一次测试必须架空车轮,确认电机方向正确后再放到桌面。

3D 打印文件

项目内包含两个模型文件:

```text

models/desktop_robot_shell.scad

models/desktop_robot_shell.stl

```

其中:

  • `.scad` 是 OpenSCAD 参数化源文件,可以修改尺寸

  • `.stl` 可以直接导入切片软件

推荐打印参数:

  • 材料:PLA 或 PETG

  • 层高:0.2mm

  • 填充:15%-25%

  • 支撑:建议开启

  • 打印方向:底面朝下

测试清单

电机

  • 架空车轮后上电

  • 串口输入 `f`,两轮应同时向前

  • 串口输入 `b`,两轮应同时向后

  • 串口输入 `l` 和 `r`,机器人应原地转向

  • 串口输入 `s`,电机立即停止

防跌落

  • 用桌面靠近传感器,应显示安全

  • 让传感器悬空,应显示危险

  • 桌边测试至少 20 次,必须全部停止或后退

OLED 和 RGB LED

  • 上电后 OLED 显示设备名和启动状态

  • Wi-Fi 连接成功后 OLED 显示 `WiFi: OK`

  • 按住说话键时 RGB LED 变红

  • AI 思考时 RGB LED 变黄

  • 播放回复时 RGB LED 变青

  • 移动时 RGB LED 变蓝

AI 和动作

  • 说"前进",机器人前进一小段

  • 说"停止",机器人立即停止

  • 说"左转""右转""后退""转一圈",动作符合预期

  • 普通聊天内容不应触发移动

注意事项

  • ESP32-S3 不适合本地跑大模型,AI 对话建议走云端或局域网中转服务

  • 电机电源和主控电源建议分开稳压,但 GND 必须相连

  • 电池必须使用保护板

  • 电机启动导致 ESP32 重启时,需要检查升压模块余量、电容和走线

  • 第一次桌面测试必须有人看着,防止机器人冲出桌边

项目文件结构

```text

.

├── README.md

├── docs

│ ├── bom.md

│ ├── cloud-api.md

│ ├── test-checklist.md

│ ├── wiring.md

│ └── images

│ └── assembly_exploded_view.png

├── firmware

│ └── desktop_voice_robot

│ ├── config.example.h

│ └── desktop_voice_robot.ino

├── models

│ ├── README.md

│ ├── desktop_robot_shell.scad

│ └── desktop_robot_shell.stl

└── tools

└── mock_cloud_server.py

```

总结

这个版本适合作为桌面语音机器人第一版原型:先把移动、安全、音频、云端 AI、OLED/RGB 状态和 3D 打印外壳全部跑通。后续可以继续升级摄像头识别、唤醒词、本地语音前端、表情动画和更完整的云端记忆能力。

相关推荐
毕安格 - BimAngle2 小时前
地理配准高级教程:局部坐标(无地理信息)模型篇
3d·cesium·gltf·glb·3d tiles
在水一缸3 小时前
深度解析:基于 3D Gaussian Splatting 技术的编辑器实践与原理
计算机视觉·3d·编辑器·aigc·3d建模·nerf·3d编辑器
君为先-bey3 小时前
CineMaster: 3D感知电影级视频生成框架文献深度阅读分析
3d·音视频·扩散模型
人工智能培训18 小时前
打造行业知识图谱三步走
大数据·人工智能·机器学习·3d·知识图谱·agent
智海深蓝19 小时前
数字孪生案例 | 某船舶重工集团研究所如何打造“节能减碳仿真可视化平台”
3d
code_pgf1 天前
PointPillars 3D 目标检测详解
人工智能·目标检测·3d
jingling5551 天前
从零到一:用 Aholo Viewer 在浏览器里渲染 3D 高斯泼溅小熊
linux·前端·ubuntu·3d
weixin_451629841 天前
【leaflet中实现区块hover突出的伪3d效果】
3d
深圳市机智人激光雷达1 天前
时空解算与图优化:激光雷达 3D 建图的技术原理与实现流程
人工智能·3d·机器人·自动化·自动驾驶·激光雷达