# W10 **Repository Path**: lonely-shadow/w10 ## Basic Information - **Project Name**: W10 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-25 - **Last Updated**: 2025-10-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ESP32-S3 K10_car 项目 基于ESP32-S3的K10小车主机驱动项目,通过I2C通信控制Weeecore Bot从机设备。 ## 项目概述 本项目实现了一个ESP32-S3主机驱动,用于控制Weeecore Bot小车。主机通过I2C总线与从机通信,实现设备信息读取、LED控制、电池电压监测、巡线传感器控制和电机控制等功能。 ## 功能特性 ### 核心功能 - **设备信息读取**:获取设备名称、固件版本、编译日期和时间 - **LED控制**:支持LED开关、闪烁控制 - **电池电压监测**:实时读取电池电压 - **巡线传感器**:设置阈值和读取传感器数据 - **电机控制**:支持多种控制模式 - 直接PWM控制 - 平滑PWM控制(带启动斜坡) - 速度PID控制 - 位置PID控制 - 电机停止和状态读取 - 位置重置和角度目标设置 - 直线行驶控制 ### 技术特性 - **I2C主从通信**:ESP32-S3作为I2C主机,Weeecore Bot作为从机 - **C++兼容**:支持C++代码调用 - **FreeRTOS任务**:使用FreeRTOS进行任务调度 - **错误处理**:完善的错误检测和状态反馈机制 ## 硬件配置 ### ESP32-S3配置 - **I2C引脚**: - SDA: GPIO 21 - SCL: GPIO 22 - **I2C地址**:0x28 (7位地址,对应0x50的8位地址) - **内部上拉**:已启用I2C内部上拉电阻 ### 从机设备 - **设备类型**:Weeecore Bot - **通信协议**:I2C从机模式 - **数据缓冲区**:48字节 ## 项目结构 ``` ├── CMakeLists.txt # 项目根目录CMake配置 ├── main/ │ ├── CMakeLists.txt # 主程序CMake配置 │ └── main.cpp # 主程序入口 ├── components/ │ ├── bsp_i2c/ # I2C底层驱动组件 │ │ ├── CMakeLists.txt │ │ ├── bsp_i2c.cpp # I2C初始化和设备添加 │ │ └── include/ │ │ └── bsp_i2c.h # I2C驱动头文件 │ └── bsp_weeecorebot/ # Weeecore Bot主机驱动组件 │ ├── CMakeLists.txt │ ├── bsp_weeecorebot.c # 主机驱动实现 │ └── include/ │ └── bsp_weeecorebot.h # 主机驱动头文件 ├── partitions-16MiB.csv # Flash分区表 ├── sdkconfig # ESP-IDF配置文件 └── README.md # 项目说明文档 ``` ## 编译和烧录 ### 环境要求 - ESP-IDF v5.5+ - Python 3.8+ - CMake 3.16+ ### 编译步骤 ```bash # 设置ESP-IDF环境 . $HOME/esp/esp-idf/export.sh # 进入项目目录 cd K10_car # 配置项目 idf.py menuconfig # 编译项目 idf.py build # 烧录到设备 idf.py -p /dev/ttyUSB0 flash monitor ``` ### 分区表配置 项目使用16MB Flash分区表,包含: - NVS分区:24KB - PHY初始化:4KB - 应用程序:1MB ## API接口 ### 设备管理 ```c // 添加Weeecore Bot设备 esp_err_t weeecorebot_add_device(i2c_master_bus_handle_t bus_handle, i2c_master_dev_handle_t *dev_handle); // 读取设备信息 esp_err_t weeecorebot_read_device_info(i2c_master_dev_handle_t dev_handle, weeecorebot_device_info_t *info); ``` ### LED控制 ```c // LED控制命令 esp_err_t weeecorebot_led_control(i2c_master_dev_handle_t dev_handle, uint8_t led_cmd); // LED命令定义 #define LED_CMD_TURN_ON 0x01 // 打开LED #define LED_CMD_TURN_OFF 0x02 // 关闭LED #define LED_CMD_DISABLE_BLINK 0x03 // 禁用闪烁 #define LED_CMD_ENABLE_BLINK 0x04 // 启用闪烁 ``` ### 电池电压监测 ```c // 读取电池电压 esp_err_t weeecorebot_read_battery_voltage(i2c_master_dev_handle_t dev_handle, float *voltage); ``` ### 巡线传感器 ```c // 设置巡线阈值 esp_err_t weeecorebot_set_line_patrol_threshold(i2c_master_dev_handle_t dev_handle, uint16_t threshold); // 读取巡线数据 esp_err_t weeecorebot_read_line_patrol_data(i2c_master_dev_handle_t dev_handle, weeecorebot_line_patrol_data_t *data); ``` ### 电机控制 ```c // 直接PWM控制 esp_err_t weeecorebot_motor_direct_pwm(i2c_master_dev_handle_t dev_handle, int8_t left_pwm, int8_t right_pwm); // 平滑PWM控制 esp_err_t weeecorebot_motor_smooth_pwm(i2c_master_dev_handle_t dev_handle, int8_t left_pwm, int8_t right_pwm, uint8_t ramp_time); // 速度PID控制 esp_err_t weeecorebot_motor_speed_pid(i2c_master_dev_handle_t dev_handle, int8_t left_rpm, int8_t right_rpm); // 位置PID控制 esp_err_t weeecorebot_motor_position_pid(i2c_master_dev_handle_t dev_handle, int32_t left_position, int32_t right_position); // 停止所有电机 esp_err_t weeecorebot_motor_stop_all(i2c_master_dev_handle_t dev_handle); // 读取电机状态 esp_err_t weeecorebot_motor_read_status(i2c_master_dev_handle_t dev_handle, weeecorebot_motor_status_t *status); // 重置位置 esp_err_t weeecorebot_motor_reset_position(i2c_master_dev_handle_t dev_handle); // 设置角度目标 esp_err_t weeecorebot_motor_set_angle_target(i2c_master_dev_handle_t dev_handle, float angle_target); // 直线行驶控制 esp_err_t weeecorebot_motor_line_control(i2c_master_dev_handle_t dev_handle, uint8_t direction); ``` ## 数据结构 ### 设备信息 ```c typedef struct { char device_name[16]; // 设备名称 char firmware_version[16]; // 固件版本 char build_date[16]; // 编译日期 char build_time[16]; // 编译时间 } weeecorebot_device_info_t; ``` ### 巡线传感器数据 ```c typedef struct { uint16_t sensor_data[4]; // 4个巡线传感器的ADC值 } weeecorebot_line_patrol_data_t; ``` ### 电机状态 ```c typedef struct { int32_t left_position; // 左电机位置 int32_t right_position; // 右电机位置 float left_speed; // 左电机滤波速度 float right_speed; // 右电机滤波速度 float left_raw_speed; // 左电机原始速度 float right_raw_speed; // 右电机原始速度 int8_t left_direction; // 左编码器方向 int8_t right_direction; // 右编码器方向 } weeecorebot_motor_status_t; ``` ## 使用示例 ```c #include "bsp_i2c.h" #include "bsp_weeecorebot.h" extern "C" void app_main(void) { // 初始化I2C总线 i2c_master_bus_handle_t bus_handle; i2c_master_dev_handle_t dev_handle; bsp_i2c_init(&bus_handle, &dev_handle); // 添加Weeecore Bot设备 weeecorebot_add_device(bus_handle, &dev_handle); // 读取设备信息 weeecorebot_device_info_t device_info; weeecorebot_read_device_info(dev_handle, &device_info); printf("Device: %s, Version: %s\n", device_info.device_name, device_info.firmware_version); // LED控制示例 weeecorebot_led_control(dev_handle, LED_CMD_TURN_ON); vTaskDelay(pdMS_TO_TICKS(1000)); weeecorebot_led_control(dev_handle, LED_CMD_TURN_OFF); // 电机控制示例 weeecorebot_motor_direct_pwm(dev_handle, 50, 50); // 前进 vTaskDelay(pdMS_TO_TICKS(2000)); weeecorebot_motor_stop_all(dev_handle); } ``` ## 故障排除 ### 常见问题 1. **I2C通信失败** - 检查硬件连接(SDA/SCL) - 确认I2C地址正确(0x28) - 检查上拉电阻 2. **电机状态读取失败** - 增加I2C延时时间 - 检查从机端编码器状态 - 确认数据格式正确 3. **编译错误** - 确认ESP-IDF版本兼容 - 检查CMakeLists.txt配置 - 验证C++支持设置 ### 调试建议 - 启用详细日志输出 - 检查I2C通信时序 - 验证从机端响应 - 监控内存使用情况 ## 许可证 本项目基于MIT许可证开源。 ## 贡献 欢迎提交Issue和Pull Request来改进项目。 ## 联系方式 如有问题,请通过GitHub Issues联系。