From d71841d24816fa80c409d6c99eca0b0d5b447aa4 Mon Sep 17 00:00:00 2001
From: laride <198868291+laride@users.noreply.github.com>
Date: Wed, 11 Mar 2026 21:20:43 +0800
Subject: [PATCH] Rename EchoEar to ESP-VoCat (#1827)
---
main/CMakeLists.txt | 6 ++---
main/Kconfig.projbuild | 8 +++----
main/boards/{echoear => esp-vocat}/README.md | 12 +++++-----
main/boards/{echoear => esp-vocat}/config.h | 0
.../boards/{echoear => esp-vocat}/config.json | 2 +-
.../EchoEar.cc => esp-vocat/esp_vocat.cc} | 24 +++++++++----------
main/boards/{echoear => esp-vocat}/touch.h | 0
7 files changed, 26 insertions(+), 26 deletions(-)
rename main/boards/{echoear => esp-vocat}/README.md (72%)
rename main/boards/{echoear => esp-vocat}/config.h (100%)
rename main/boards/{echoear => esp-vocat}/config.json (89%)
rename main/boards/{echoear/EchoEar.cc => esp-vocat/esp_vocat.cc} (96%)
rename main/boards/{echoear => esp-vocat}/touch.h (100%)
diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt
index ebb2139..03ae1d8 100644
--- a/main/CMakeLists.txt
+++ b/main/CMakeLists.txt
@@ -255,13 +255,13 @@ elseif(CONFIG_BOARD_TYPE_ESP_HI)
set(BOARD_TYPE "esp-hi")
# Set ESP_HI emoji directory for DEFAULT_ASSETS_EXTRA_FILES
set(DEFAULT_ASSETS_EXTRA_FILES "${CMAKE_BINARY_DIR}/emoji")
-elseif(CONFIG_BOARD_TYPE_ECHOEAR)
- set(BOARD_TYPE "echoear")
+elseif(CONFIG_BOARD_TYPE_ESP_VOCAT)
+ set(BOARD_TYPE "esp-vocat")
set(BUILTIN_TEXT_FONT font_puhui_20_4)
set(BUILTIN_ICON_FONT font_awesome_20_4)
set(DEFAULT_EMOJI_COLLECTION twemoji_64)
set(EMOTE_RESOLUTION "360_360")
- # set(EMOTE_EXTERNAL_PATH "${CMAKE_CURRENT_SOURCE_DIR}/boards/echoear/assets")
+ # set(EMOTE_EXTERNAL_PATH "${CMAKE_CURRENT_SOURCE_DIR}/boards/esp-vocat/assets")
elseif(CONFIG_BOARD_TYPE_ESP_SENSAIRSHUTTLE)
set(BOARD_TYPE "esp-sensairshuttle")
set(BUILTIN_TEXT_FONT font_puhui_basic_16_4)
diff --git a/main/Kconfig.projbuild b/main/Kconfig.projbuild
index b4119fc..32621f7 100644
--- a/main/Kconfig.projbuild
+++ b/main/Kconfig.projbuild
@@ -185,8 +185,8 @@ choice BOARD_TYPE
config BOARD_TYPE_ESP_P4_FUNCTION_EV_BOARD
bool "Espressif ESP-P4-Function-EV-Board"
depends on IDF_TARGET_ESP32P4
- config BOARD_TYPE_ECHOEAR
- bool "EchoEar"
+ config BOARD_TYPE_ESP_VOCAT
+ bool "Espressif ESP-VoCat"
depends on IDF_TARGET_ESP32S3
config BOARD_TYPE_KEVIN_BOX_2
bool "Kevin Box 2"
@@ -653,7 +653,7 @@ choice DISPLAY_STYLE
config USE_EMOTE_MESSAGE_STYLE
bool "Emote animation style"
depends on BOARD_TYPE_ESP_BOX || BOARD_TYPE_ESP_BOX_3 \
- || BOARD_TYPE_ECHOEAR || BOARD_TYPE_LICHUANG_DEV_S3 \
+ || BOARD_TYPE_ESP_VOCAT || BOARD_TYPE_LICHUANG_DEV_S3 \
|| BOARD_TYPE_ESP_SENSAIRSHUTTLE
endchoice
@@ -754,7 +754,7 @@ config USE_DEVICE_AEC
|| BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_2_06 || BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_4B || BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4B || BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_7B \
|| BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_3_4C || BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4C || BOARD_TYPE_ESP_S3_LCD_EV_Board_2 || BOARD_TYPE_YUNLIAO_S3 \
|| BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_7 || BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_8 || BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_10_1 \
- || BOARD_TYPE_ECHOEAR || BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_3_49 || BOARD_TYPE_WAVESHARE_ESP32_S3_RLCD_4_2 || BOARD_TYPE_ZHENGCHEN_CAM || BOARD_TYPE_ZHENGCHEN_CAM_ML307 \
+ || BOARD_TYPE_ESP_VOCAT || BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_3_49 || BOARD_TYPE_WAVESHARE_ESP32_S3_RLCD_4_2 || BOARD_TYPE_ZHENGCHEN_CAM || BOARD_TYPE_ZHENGCHEN_CAM_ML307 \
|| BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_4_3C)
help
To work properly, device-side AEC requires a clean output reference path from the speaker signal and physical acoustic isolation between the microphone and speaker.
diff --git a/main/boards/echoear/README.md b/main/boards/esp-vocat/README.md
similarity index 72%
rename from main/boards/echoear/README.md
rename to main/boards/esp-vocat/README.md
index 8a2be5f..fd3613c 100644
--- a/main/boards/echoear/README.md
+++ b/main/boards/esp-vocat/README.md
@@ -1,4 +1,4 @@
-# EchoEar 喵伴
+# ESP-VoCat 喵伴
## 简介
@@ -6,7 +6,7 @@
立创开源平台
-EchoEar 喵伴是一款智能 AI 开发套件,搭载 ESP32-S3-WROOM-1 模组,1.85 寸 QSPI 圆形触摸屏,双麦阵列,支持离线语音唤醒与声源定位算法。硬件详情等可查看[立创开源项目](https://oshwhub.com/esp-college/echoear)。
+ESP-VoCat 喵伴是一款智能 AI 开发套件,搭载 ESP32-S3-WROOM-1 模组,1.85 寸 QSPI 圆形触摸屏,双麦阵列,支持离线语音唤醒与声源定位算法。硬件详情等可查看[立创开源项目](https://oshwhub.com/esp-college/echoear)。
## 配置、编译命令
@@ -25,11 +25,11 @@ idf.py menuconfig
分别配置如下选项:
### 基本配置
-- `Xiaozhi Assistant` → `Board Type` → 选择 `EchoEar`
+- `Xiaozhi Assistant` → `Board Type` → 选择 `Espressif ESP-VoCat`
### UI风格选择
-EchoEar 支持多种不同的 UI 显示风格,通过 menuconfig 配置选择:
+ESP-VoCat 支持多种不同的 UI 显示风格,通过 menuconfig 配置选择:
- `Xiaozhi Assistant` → `Select display style` → 选择显示风格
@@ -63,7 +63,7 @@ EchoEar 支持多种不同的 UI 显示风格,通过 menuconfig 配置选择
- **适用**: 喜欢微信风格的用户
- **类**: `SpiLcdDisplay`
-> **说明**: EchoEar 使用16MB Flash,需要使用专门的分区表配置来合理分配存储空间给应用程序、OTA更新、资源文件等。
+> **说明**: ESP-VoCat 喵伴使用16MB Flash,需要使用专门的分区表配置来合理分配存储空间给应用程序、OTA更新、资源文件等。
按 `S` 保存,按 `Q` 退出。
@@ -75,7 +75,7 @@ idf.py build
**烧录**
-将 EchoEar 连接至电脑,**注意打开电源**,并运行:
+将 ESP-VoCat 喵伴连接至电脑,**注意打开电源**,并运行:
```bash
idf.py flash
diff --git a/main/boards/echoear/config.h b/main/boards/esp-vocat/config.h
similarity index 100%
rename from main/boards/echoear/config.h
rename to main/boards/esp-vocat/config.h
diff --git a/main/boards/echoear/config.json b/main/boards/esp-vocat/config.json
similarity index 89%
rename from main/boards/echoear/config.json
rename to main/boards/esp-vocat/config.json
index e725e40..3ad6adf 100644
--- a/main/boards/echoear/config.json
+++ b/main/boards/esp-vocat/config.json
@@ -2,7 +2,7 @@
"target": "esp32s3",
"builds": [
{
- "name": "echoear",
+ "name": "esp-vocat",
"sdkconfig_append": [
"CONFIG_USE_EMOTE_MESSAGE_STYLE=y",
"CONFIG_MMAP_FILE_NAME_LENGTH=32",
diff --git a/main/boards/echoear/EchoEar.cc b/main/boards/esp-vocat/esp_vocat.cc
similarity index 96%
rename from main/boards/echoear/EchoEar.cc
rename to main/boards/esp-vocat/esp_vocat.cc
index 75aa118..e84454c 100644
--- a/main/boards/echoear/EchoEar.cc
+++ b/main/boards/esp-vocat/esp_vocat.cc
@@ -24,7 +24,7 @@
#include
#include
-#define TAG "EchoEar"
+#define TAG "ESP-VoCat"
temperature_sensor_handle_t temp_sensor = NULL;
@@ -282,7 +282,7 @@ public:
// Create touch interrupt semaphore
touch_isr_mux_ = xSemaphoreCreateBinary();
if (touch_isr_mux_ == NULL) {
- ESP_LOGE("EchoEar", "Failed to create touch semaphore");
+ ESP_LOGE(TAG, "Failed to create touch semaphore");
}
}
@@ -319,15 +319,15 @@ public:
// Press event (transition from not touched to touched)
press_count_++;
event = TOUCH_PRESS;
- ESP_LOGI("EchoEar", "TOUCH PRESS - count: %d, x: %d, y: %d", press_count_, tp_.x, tp_.y);
+ ESP_LOGI(TAG, "TOUCH PRESS - count: %d, x: %d, y: %d", press_count_, tp_.x, tp_.y);
} else if (!is_touched && was_touched_) {
// Release event (transition from touched to not touched)
event = TOUCH_RELEASE;
- ESP_LOGI("EchoEar", "TOUCH RELEASE - total presses: %d", press_count_);
+ ESP_LOGI(TAG, "TOUCH RELEASE - total presses: %d", press_count_);
} else if (is_touched && was_touched_) {
// Continuous touch (hold)
event = TOUCH_HOLD;
- ESP_LOGD("EchoEar", "TOUCH HOLD - x: %d, y: %d", tp_.x, tp_.y);
+ ESP_LOGD(TAG, "TOUCH HOLD - x: %d, y: %d", tp_.x, tp_.y);
}
// Update previous state
@@ -380,7 +380,7 @@ private:
SemaphoreHandle_t touch_isr_mux_;
};
-class EchoEar : public WifiBoard {
+class EspVocat : public WifiBoard {
private:
i2c_master_bus_handle_t i2c_bus_;
Cst816s* cst816s_;
@@ -471,7 +471,7 @@ private:
while (true) {
if (touchpad->WaitForTouchEvent()) {
auto &app = Application::GetInstance();
- auto &board = (EchoEar &)Board::GetInstance();
+ auto &board = (EspVocat &)Board::GetInstance();
ESP_LOGD(TAG, "Touch event, TP_PIN_NUM_INT: %d", gpio_get_level(TP_PIN_NUM_INT));
touchpad->UpdateTouchPoint();
@@ -509,7 +509,7 @@ private:
gpio_config(&int_gpio_config);
gpio_install_isr_service(0);
gpio_intr_enable(TP_PIN_NUM_INT);
- gpio_isr_handler_add(TP_PIN_NUM_INT, EchoEar::touch_isr_callback, cst816s_);
+ gpio_isr_handler_add(TP_PIN_NUM_INT, EspVocat::touch_isr_callback, cst816s_);
}
void InitializeSpi()
@@ -612,7 +612,7 @@ private:
#endif // CONFIG_ESP_VIDEO_ENABLE_USB_UVC_VIDEO_DEVICE
public:
- ~EchoEar() {
+ ~EspVocat() {
// Stop tasks
if (charge_task_handle_ != nullptr) {
vTaskDelete(charge_task_handle_);
@@ -627,7 +627,7 @@ public:
delete display_;
// Note: backlight_ (PwmBacklight) and camera_ (EspVideo) are not deleted here
// because their base classes (Backlight, Camera) don't have virtual destructors.
- // Since EchoEar is a singleton that lives for the device lifetime, this is acceptable.
+ // Since EspVocat is a singleton that lives for the device lifetime, this is acceptable.
// Remove GPIO ISR handler
gpio_isr_handler_remove(TP_PIN_NUM_INT);
@@ -640,7 +640,7 @@ public:
}
}
- EchoEar() : boot_button_(BOOT_BUTTON_GPIO)
+ EspVocat() : boot_button_(BOOT_BUTTON_GPIO)
{
InitializeI2c();
uint8_t pcb_version = DetectPcbVersion();
@@ -693,4 +693,4 @@ public:
}
};
-DECLARE_BOARD(EchoEar);
+DECLARE_BOARD(EspVocat);
diff --git a/main/boards/echoear/touch.h b/main/boards/esp-vocat/touch.h
similarity index 100%
rename from main/boards/echoear/touch.h
rename to main/boards/esp-vocat/touch.h