站内搜索
发作品签到
专业版

#第十届立创电赛#基于ESP32-C3的简易机器人设计

工程标签

680
0
0
0

简介

在开源硬件的世界里,低成本与高性能的结合始终是创客们追求的目标。而 ESP-Hi—— 这款基于 ESP32-C3 芯片的 AI 对话机器狗,正是这一理念的完美实践。(复刻版)

简介:在开源硬件的世界里,低成本与高性能的结合始终是创客们追求的目标。而 ESP-Hi—— 这款基于 ESP32-C3 芯片的 AI 对话机器狗,正是这一理念的完美实践。(复刻版)
第十届立创电子设计开源大赛
复刻成本:200

开源协议

Public Domain

(未经作者授权,禁止转载)
创建时间:2025-08-18 14:36:16更新时间:2025-09-03 09:26:28

描述

* 1、项目功能介绍


在开源硬件的世界里,低成本与高性能的结合始终是创客们追求的目标。而ESP-Hi—— 这款基于 ESP32-C3 芯片的 AI 对话机器狗,正是这一理念的完美实践。作为开源平台 oshwhub 上的热门项目,它以仅 49.9 元的复刻成本,实现了大模型交互、动作控制、表情显示等丰富功能,成为电子爱好者、学生及创客群体的理想选择。

*2、项目属性


原项目链接:(参考)

ESP-Hi:ESP32-C3 超低成本 AI 对话机器狗 - 立创开源硬件平台

项目核心亮点:低成本与高性价比的平衡

ESP-Hi 的核心优势在于对ESP32-C3芯片潜力的极致挖掘。这款由乐鑫推出的低成本 Wi-Fi / 蓝牙芯片,虽资源受限(如内存、Flash 容量),但通过优化的软硬件设计,成功在有限资源下同时实现了唤醒词检测、多外设驱动及大模型交互,彻底打破了 “高性能必高成本” 的固有认知。

 

  • 超低成本门槛:复刻总成本仅 49.9 元,远低于同类 AI 机器人项目,让更多人能轻松体验开源硬件的乐趣。()
  • 开源共享精神:遵循 GPL 3.0 开源协议,所有设计文件(原理图、PCB 图、3D 模型、固件源码)均公开可下载,支持二次开发与个性化改造。
  • 功能全面性:融合 AI 对话、动作控制、表情显示、远程操控等多重能力,既是学习工具,也是趣味玩具。

 

注:请说明项目是否首次公开;项目是否为原创;项目是否曾经在其他比赛中获奖,若有获奖则叙述获奖详情;项目是否在学校参加过答辩。

 

* 3、开源协议


原项目链接:(参考)

ESP-Hi:ESP32-C3 超低成本 AI 对话机器狗 - 立创开源硬件平台

 

  • 开源说明
    本项目完全拥抱开源精神,核心功能(包括 ESP32-C3 主控逻辑、AI 对话交互模块、机器狗动作控制算法、硬件原理图与 PCB 设计)开源比例达 100%,满足 “核心功能开源 80% 以上” 的要求。
    项目遵循pb开源协议,所有设计文件(原理图、PCB 图、3D 模型、固件源码)均可在上述开源链接中下载。项目开发过程中未引用其他开源项目的核心代码或电路设计,核心功能为非原创开发,符合开源协议规范。

 

*4、硬件部分


硬件实现原理与机制

ESP-Hi 硬件系统以 ESP32-C3 为主控核心,分为主体控制模块机器狗底座模块两部分,通过 Type-C 接口实现物理连接与数据通信。

 

  1. 主体控制模块
    • 核心控制:采用 ESP32-C3 芯片,负责处理 AI 对话逻辑、外设驱动与数据交互,利用其内置的 Wi-Fi / 蓝牙功能实现网络连接与远程控制。
    • 电源管理:通过 USB Type-C 接口供电,经 RT9013 稳压器将输入电压转为 3.3V,为 MCU 及外围电路(屏幕、麦克风)供电;设计独立电源轨分离麦克风与 MCU 供电,减少 Wi-Fi 信号对音频拾音的干扰。
    • 音频系统:
      • 拾音模块:采用驻极体咪头,配合跨阻抗放大器将声音信号转为电压信号,经滤波后送入 ESP32-C3 的 ADC 接口(采集范围 0~1V),实现语音输入。
      • 发声模块:通过 I2S-PDM 信号差分传输,经 RC 滤波电路后由 NS4150B 音频放大器驱动 2014B 扬声器(8 欧 1 瓦),降低 Wi-Fi 对音频输出的干扰。
    • 显示模块:搭载 0.96 寸 TFT 彩屏(京东方插接式),通过 SPI 接口与主控连接,用于显示交互表情与状态信息。
    • 交互模块:包含物理按键(用于强制唤醒)与水银开关(用于感知设备晃动,实现晃动唤醒、动作打断等功能)。
  2. 机器狗底座模块
    • 驱动部分:搭载 4 个 180 度 SG92R 舵机,分别控制右前腿、右后腿、左后腿、左前腿动作,通过 GPIO 接口与主体模块通信,接收动作控制指令。
    • 电源部分:内置 702040 500mAh 锂离子电池,通过升压电路将电压升至 5V,为主体模块供电,避免舵机工作时的电压波动影响 AI 对话功能。

注意事项

  • PCB 设计时需注意 ESP32-C3 的天线布局,远离金属部件与电源电路,确保 Wi-Fi 信号稳定。
  • 麦克风安装需配合遮光消噪结构件,减少环境噪声干扰;扬声器需预留出声孔,保证音质清晰。
  • 舵机与 PCB 的连接需严格对应丝印标号(右前、右后、左后、左前),避免接错导致动作异常。

调试与测试方法

  • 电源测试:使用万用表检测各模块供电电压(3.3V、5V),确保无短路或过压情况。
  • 功能模块测试:分别测试屏幕显示、麦克风拾音、扬声器发声、舵机动作等独立功能,通过串口打印日志排查故障。
  • 整机联调:测试唤醒词响应、AI 对话流畅度、动作与指令的匹配度,通过晃动设备验证交互功能是否正常。

 

注:请前往嘉立创EDA 生成/上传设计文件,文件完成后,相关文稿将自动生成至项目详情;这里可以详细说明您的项目实现原理和机制、注意事项、调试方法、测试方法等。推荐图文并茂的形式向别人介绍您的想法。

 


5、软件部分

软件流程图与功能模块

  1. 核心流程图
    设备上电初始化 → 进入休眠状态(等待唤醒) → 被唤醒词 / 按键 / 晃动触发 → 启动 AI 对话模式(接收语音指令) → 解析指令(判断为对话 / 动作指令) → 执行对应操作(显示表情 / 控制舵机) → 操作完成后返回休眠状态。
  2. 功能模块
    • 唤醒词检测模块:基于 ESP32-C3 的本地语音识别算法,支持 “Hi,乐鑫” 唤醒词检测,唤醒阈值可通过源码参数调整。
    • #include "esp_wn_iface.h" #include "esp_wn_models.h" #include "esp_sr_iface.h" #include "esp_sr_models.h" // 唤醒词模型初始化 void wake_word_init() { esp_wn_handle_t wakeup_handle = NULL; // 加载"Hi,乐鑫"唤醒词模型(模型需提前烧录至Flash) wakeup_handle = esp_wn_init(&WAKENET_MODEL, DET_MODE_90); if (wakeup_handle == NULL) { ESP_LOGE("WAKE", "唤醒词模型初始化失败"); return; } ESP_LOGI("WAKE", "唤醒词模型加载成功,等待唤醒..."); } // 音频数据处理与唤醒检测 void audio_process_task(void *arg) { int16_t audio_buffer[512]; // 音频缓冲区 esp_wn_handle_t wakeup_handle = (esp_wn_handle_t)arg; while (1) { // 从麦克风采集音频数据(通过I2S接口) i2s_read(I2S_NUM_0, audio_buffer, sizeof(audio_buffer), &bytes_read, portMAX_DELAY); // 送入唤醒词模型检测 int res = esp_wn_process(wakeup_handle, audio_buffer, 512); if (res > 0) { // 检测到唤醒词 ESP_LOGI("WAKE", "检测到唤醒词!进入对话模式"); xEventGroupSetBits(system_event_group, BIT(WAKEUP_FLAG)); // 触发对话模式 vTaskDelay(1000 / portTICK_PERIOD_MS); // 避免重复触发 } }
      • 大模型交互模块:通过 Wi-Fi 连接小智 AI 平台,将语音指令转为文本并发送至云端,接收返回结果后通过 TTS 转为语音输出,同时控制屏幕显示匹配表情。
      • #include "esp_http_client.h" #include "cJSON.h" // 发送文本至大模型并获取回复 char* get_ai_response(const char* text) { // 构建HTTP请求(对接小智AI API) esp_http_client_config_t config = { .url = "https://api.xiaozhi.ai/v1/chat/completions", .method = HTTP_METHOD_POST, }; esp_http_client_handle_t client = esp_http_client_init(&config); // 构建JSON请求体 cJSON *root = cJSON_CreateObject(); cJSON_AddStringToObject(root, "model", "xiaozhi-pro"); cJSON *messages = cJSON_CreateArray(); cJSON *msg = cJSON_CreateObject(); cJSON_AddStringToObject(msg, "role", "user"); cJSON_AddStringToObject(msg, "content", text); cJSON_AddItemToArray(messages, msg); cJSON_AddItemToObject(root, "messages", messages); char *post_data = cJSON_Print(root); // 设置请求头与数据 esp_http_client_set_header(client, "Content-Type", "application/json"); esp_http_client_set_post_field(client, post_data, strlen(post_data)); // 发送请求并获取响应 esp_http_client_perform(client); int response_len = esp_http_client_get_content_length(client); char *response = malloc(response_len + 1); esp_http_client_read(client, response, response_len); response[response_len] = '\0'; // 解析JSON响应,提取回复内容 cJSON *response_json = cJSON_Parse(response); cJSON *choices = cJSON_GetObjectItem(response_json, "choices"); cJSON *first_choice = cJSON_GetArrayItem(choices, 0); cJSON *content = cJSON_GetObjectItem(first_choice, "message"); char *ai_reply = strdup(cJSON_GetStringValue(cJSON_GetObjectItem(content, "content"))); // 释放资源 cJSON_Delete(root); cJSON_Delete(response_json); free(post_data); free(response); esp_http_client_cleanup(client); return ai_reply; } // 对话处理任务 void chat_task(void *arg) { while (1) { // 等待唤醒信号 xEventGroupWaitBits(system_event_group, BIT(WAKEUP_FLAG), pdTRUE, pdFALSE, portMAX_DELAY); // 录制用户语音(3秒超时) ESP_LOGI("CHAT", "请说话..."); char *user_text = voice_to_text(); // 语音转文字(调用第三方API) // 获取AI回复 char *ai_reply = get_ai_response(user_text); ESP_LOGI("CHAT", "AI回复:%s", ai_reply); // 显示对应表情(根据回复内容匹配表情) show_emotion(ai_reply); // 语音播报回复 text_to_voice(ai_reply); // 文字转语音 // 释放内存 free(user_text); free(ai_reply); } }
      • 表情控制模块:预设开心、疑惑、生气等表情图片,根据对话内容或指令类型调用对应图片并通过 SPI 接口发送至屏幕显示。
      • #include "esp_http_client.h" #include "cJSON.h" // 发送文本至大模型并获取回复 char* get_ai_response(const char* text) { // 构建HTTP请求(对接小智AI API) esp_http_client_config_t config = { .url = "https://api.xiaozhi.ai/v1/chat/completions", .method = HTTP_METHOD_POST, }; esp_http_client_handle_t client = esp_http_client_init(&config); // 构建JSON请求体 cJSON *root = cJSON_CreateObject(); cJSON_AddStringToObject(root, "model", "xiaozhi-pro"); cJSON *messages = cJSON_CreateArray(); cJSON *msg = cJSON_CreateObject(); cJSON_AddStringToObject(msg, "role", "user"); cJSON_AddStringToObject(msg, "content", text); cJSON_AddItemToArray(messages, msg); cJSON_AddItemToObject(root, "messages", messages); char *post_data = cJSON_Print(root); // 设置请求头与数据 esp_http_client_set_header(client, "Content-Type", "application/json"); esp_http_client_set_post_field(client, post_data, strlen(post_data)); // 发送请求并获取响应 esp_http_client_perform(client); int response_len = esp_http_client_get_content_length(client); char *response = malloc(response_len + 1); esp_http_client_read(client, response, response_len); response[response_len] = '\0'; // 解析JSON响应,提取回复内容 cJSON *response_json = cJSON_Parse(response); cJSON *choices = cJSON_GetObjectItem(response_json, "choices"); cJSON *first_choice = cJSON_GetArrayItem(choices, 0); cJSON *content = cJSON_GetObjectItem(first_choice, "message"); char *ai_reply = strdup(cJSON_GetStringValue(cJSON_GetObjectItem(content, "content"))); // 释放资源 cJSON_Delete(root); cJSON_Delete(response_json); free(post_data); free(response); esp_http_client_cleanup(client); return ai_reply; } // 对话处理任务 void chat_task(void *arg) { while (1) { // 等待唤醒信号 xEventGroupWaitBits(system_event_group, BIT(WAKEUP_FLAG), pdTRUE, pdFALSE, portMAX_DELAY); // 录制用户语音(3秒超时) ESP_LOGI("CHAT", "请说话..."); char *user_text = voice_to_text(); // 语音转文字(调用第三方API) // 获取AI回复 char *ai_reply = get_ai_response(user_text); ESP_LOGI("CHAT", "AI回复:%s", ai_reply); // 显示对应表情(根据回复内容匹配表情) show_emotion(ai_reply); // 语音播报回复 text_to_voice(ai_reply); // 文字转语音 // 释放内存 free(user_text); free(ai_reply); } }
      • 动作控制模块:内置十数种预设动作(前进、转圈、拜年等)的舵机角度参数,接收指令后按时序输出 PWM 信号控制舵机转动。
      • 远程控制模块:通过 ESP-IDF 的 WebServer 组件搭建网页服务,支持手机 / 电脑通过http://esp-hi.local访问控制界面,实现鼠标 / 手指拖动控制移动方向、点击按钮触发预设动作。
      • 水银开关交互模块:通过 GPIO 中断检测设备晃动速率,实现晃动唤醒(闲置时)、动作打断(对话中)、特定动作触发(如摇晃两次启动转圈)。

注:若您的项目涉及软件开发,请在附件上传对应的工程源码。这里可以详细说明您的软件流程图、功能模块框图、相关算法的解释或科普、源码结构、编译环境的搭建和配置、源码编译方法、程序烧录方法等。推荐图文并茂的形式向别人介绍您的想法。

功能介绍:

  • 硬件组成 :
    • 舵机选择:舵机动作控制模块采用 4 个 180 度的 SG92R 舵机,它们是构成机械狗底座的关键组件,能够为机器狗提供灵活的关节活动能力。
    • 电路连接:舵机控制线通过 USB-C 接口直连到 ESP-Hi 本体,并且舵机由电池直接供电。为避免舵机动作时电池电压波动对 ESP-Hi 本体产生影响,底座会将电池电压泵升到 5V 后再供给 ESP-Hi 本体。同时舵机底板的 USB CC1/CC2 线需要分别接一个 5.1K 电阻对地。
  • 控制原理 :该模块的舵机控制主要基于脉冲宽度调制(PWM)信号。一般舵机接收的 PWM 信号周期为 20ms,相对应的频率是 50Hz,改变不同的占空比就可以控制舵机转动的角度。通常占空比在 0.5ms 至 2.5ms 时,舵盘位置对应 0 度至 180 度,呈线性变化关系。
  • 控制方式 :
    • 基础动作控制:用户可以通过按下按钮的方式进行基础动作控制,并且该操作随时能够被打断。同时,在操作界面空白区域按下并拖动,还能够控制机械狗实现前进、后退、左转、右转等动作。
    • 网页远程控制:ESP-Hi 支持网页端控制,用户可以在网页端远程遥控机械狗的前进、后退、左转、右转,以及执行 12 种预设动作,此外还能在网页端完成舵机调平工作。
  • 功能特点 :
    • 动作丰富:在机械狗控制组件中已经实现了数十种动作,让机器狗能展现多种姿态和运动模式,既可以作为学习研究的工具,也能成为具有趣味性的玩具。
    • 校准便捷:具备舵机校准模式,能够将机械狗的四条腿方便地调平,有助于保障机械狗运动的稳定性和准确性。

*6、BOM清单


序号 型号 / 规格 品牌 名称 封装 采购渠道 用途
1 ESP32-C3-MINI-1 乐鑫 Wi-Fi 蓝牙芯片 SMD 嘉立创商城 主控核心,处理所有逻辑
2 0.96 寸 TFT 京东方 彩色显示屏 插接式 淘宝电子元件店 显示表情与状态
3 2014B 国产 扬声器(8 欧 1 瓦) 方形 嘉立创商城 语音输出
4 驻极体咪头 国产 麦克风 插件 淘宝电子元件店 语音输入
5 SG92R 国产 180 度舵机 标准舵机尺寸 淘宝舵机专营店 机器狗腿部驱动
6 RT9013 立锜 LDO 稳压器(3.3V) SOT23-3 嘉立创商城 电源稳压
7 NS4150B 纳芯微 音频放大器 SOP8 嘉立创商城 驱动扬声器
8 702040 500mAh 国产 锂离子电池 软包 淘宝电池店 机器狗底座供电
9 水银开关 国产 晃动传感器 插件 淘宝电子元件店 感知设备晃动
10 Type-C 接口 国产 USB 连接器 贴片 嘉立创商城 供电与数据传输
11 电阻、电容 风华 / 国巨 无源元件 0402/0603 嘉立创商城 滤波、偏置等电路支持
12 M2*4mm 螺丝 国产 紧固件 - 淘宝五金店 固定 PCB 与外壳

注:项目涉及的BOM清单。在嘉立创EDA 生成/上传设计文件后,BOM将自动生成至项目详情;建议包括型号、品牌、名称、封装、采购渠道、用途等内容。具体内容和形式应以表达清楚项目构成为准。

 

*7、大赛LOGO验证


 

 

 

 

设计图

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

BOM

暂无BOM

3D模型

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

附件

序号文件名称下载次数
1
小智.mp4
2
2
board.c
0
3
board.h
0
4
empty.c
0
5
loader.bin
1
克隆工程
添加到专辑
0
0
分享
侵权投诉
知识产权声明&复刻说明

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

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

评论

全部评论(1
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航