# esp32-aqua-bot **Repository Path**: flashdog/esp32-aqua-bot ## Basic Information - **Project Name**: esp32-aqua-bot - **Description**: 这是一个基于ESP32开发的蓝牙遥控双电机水上机器人项目。通过Dabble App的GamePad模块,用户可以通过手机蓝牙连接控制水上机器人的前进、后退、左转、右转等动作。项目采用L298N双H桥电机驱动模块来控制两个直流电机,实现水上机器人的精确运动控制。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-06 - **Last Updated**: 2025-10-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ESP32-AquaBot 蓝牙遥控水上机器人 ## 项目简介 这是一个基于ESP32开发的蓝牙遥控双电机水上机器人项目。通过Dabble App的GamePad模块,用户可以通过手机蓝牙连接控制水上机器人的前进、后退、左转、右转等动作。项目采用L298N双H桥电机驱动模块来控制两个直流电机,实现水上机器人的精确运动控制。 ## 主要功能 - 🔵 **蓝牙无线控制**:通过ESP32内置蓝牙模块与手机App通信 - 🎮 **游戏手柄控制**:支持Dabble App的GamePad模块,提供直观的操作体验 - 🚤 **四向运动控制**:前进、后退、左转、右转及停止功能,适用于水上环境 - ⚡ **PWM速度控制**:通过PWM信号精确控制推进器转速 - 📊 **实时状态监控**:串口输出详细的控制状态和调试信息 - 🔧 **完整按键映射**:支持方向键和动作按键的完整识别 - 🌊 **防水设计兼容**:电路设计考虑水上应用环境 ## 硬件要求 ### 主要组件 - **ESP32开发板** × 1 - **L298N电机驱动模块** × 1 - **直流推进器/螺旋桨电机** × 2 - **防水电池组**(推荐7.4V锂电池) - **防水接线盒** - **杜邦线**若干 - **防水连接器**(推荐) ### 技术规格 - 工作电压:3.3V (ESP32) / 5-35V (L298N) - 通信方式:蓝牙2.0/BLE - PWM频率:1000Hz - PWM分辨率:8位 (0-255) - 最大电机电流:2A (每通道) ## 接线图 ### ESP32 与 L298N 连接 ``` ESP32 开发板 L298N 电机驱动模块 ┌─────────────────┐ ┌─────────────────┐ │ │ │ │ │ GPIO 16 ────────┼────────────┼─── IN1 │ │ GPIO 17 ────────┼────────────┼─── IN2 │ │ GPIO 18 ────────┼────────────┼─── ENA │ │ GPIO 19 ────────┼────────────┼─── IN3 │ │ GPIO 21 ────────┼────────────┼─── IN4 │ │ GPIO 22 ────────┼────────────┼─── ENB │ │ │ │ │ │ GND ────────────┼────────────┼─── GND │ │ │ │ │ └─────────────────┘ └─────────────────┘ ``` ### 详细引脚对应关系 | ESP32 引脚 | L298N 引脚 | 功能描述 | |-----------|-----------|----------| | GPIO 16 | IN1 | 电机A方向控制1 | | GPIO 17 | IN2 | 电机A方向控制2 | | GPIO 18 | ENA | 电机A使能/速度控制 (PWM) | | GPIO 19 | IN3 | 电机B方向控制1 | | GPIO 21 | IN4 | 电机B方向控制2 | | GPIO 22 | ENB | 电机B使能/速度控制 (PWM) | | GND | GND | 公共地线 | ### 电源连接 ``` 电池组 (7.4V) │ ├─── L298N VCC (电机电源) │ └─── L298N +12V (逻辑电源,通过内部稳压器为ESP32供电) 注意:L298N的+5V输出可以为ESP32供电,或者ESP32可以独立供电 ``` ### 电机连接 ``` L298N 输出端 推进器 ┌─────────────┐ ┌─────────┐ │ OUT1 ───────┼───────────────┼─ 推进器A+ │ │ OUT2 ───────┼───────────────┼─ 推进器A- │ │ │ └─────────┘ │ OUT3 ───────┼───────────────┼─ 推进器B+ │ │ OUT4 ───────┼───────────────┼─ 推进器B- │ └─────────────┘ └─────────┘ ``` ### L298N跳线帽设置 - **ENA跳线帽**:移除(由ESP32 PWM控制) - **ENB跳线帽**:移除(由ESP32 PWM控制) - **+5V跳线帽**:保留(启用内部5V稳压器) ## 软件架构 ### 核心模块 1. **蓝牙通信模块** - 使用ESP32内置蓝牙功能 - 设备名称:`ESP32-Robot` - 支持Dabble协议数据解析 2. **按键解析模块** - 解析Dabble GamePad数据包 - 支持方向键:UP, DOWN, LEFT, RIGHT - 支持动作键:START, SELECT, TRIANGLE, CIRCLE, CROSS, SQUARE 3. **电机控制模块** - PWM速度控制(1000Hz,8位分辨率) - 方向控制逻辑 - 运动模式:前进、后退、左转、右转、停止 4. **状态监控模块** - 实时串口输出 - 按键状态显示 - 电机控制信号调试 ### 数据流程 ``` 手机Dabble App → 蓝牙传输 → ESP32接收 → 数据解析 → 按键状态更新 → 推进器控制 → 水上机器人运动 ``` ## 工程实现原理 ### 1. 蓝牙通信原理 项目使用ESP32的BluetoothSerial库建立与手机的蓝牙连接。Dabble App发送的数据包格式为: - 起始字节:0xFF - 模块标识:0x01 (GamePad) - 数据长度:可变 - 按键数据:data[5] (动作键), data[6] (方向键) ### 2. 按键映射机制 ```cpp // 方向键映射 (data[6]) UP = 0x01 // 二进制: 00000001 DOWN = 0x02 // 二进制: 00000010 LEFT = 0x04 // 二进制: 00000100 RIGHT = 0x08 // 二进制: 00001000 // 动作键映射 (data[5]) START = 0x01 // 二进制: 00000001 SELECT = 0x02 // 二进制: 00000010 TRIANGLE = 0x04 // 二进制: 00000100 CIRCLE = 0x08 // 二进制: 00001000 CROSS = 0x10 // 二进制: 00010000 SQUARE = 0x20 // 二进制: 00100000 ``` ### 3. L298N控制原理 L298N是双H桥电机驱动芯片,每个H桥可以控制一个直流电机的方向和速度: **方向控制逻辑:** - IN1=HIGH, IN2=LOW:电机正转 - IN1=LOW, IN2=HIGH:电机反转 - IN1=LOW, IN2=LOW:电机停止 **速度控制:** - ENA/ENB引脚接收PWM信号 - PWM占空比决定电机转速 - 0% = 停止,100% = 最大速度 ### 4. 水上机器人运动控制 ```cpp // 前进:两个推进器同向正转 moveForward() { Propeller_A: IN1=HIGH, IN2=LOW, ENA=PWM Propeller_B: IN3=HIGH, IN4=LOW, ENB=PWM } // 后退:两个推进器同向反转 moveBackward() { Propeller_A: IN1=LOW, IN2=HIGH, ENA=PWM Propeller_B: IN3=LOW, IN4=HIGH, ENB=PWM } // 左转:左推进器正转,右推进器反转 turnLeft() { Propeller_A: IN1=HIGH, IN2=LOW, ENA=PWM Propeller_B: IN3=LOW, IN4=HIGH, ENB=PWM } // 右转:左推进器反转,右推进器正转 turnRight() { Propeller_A: IN1=LOW, IN2=HIGH, ENA=PWM Propeller_B: IN3=HIGH, IN4=LOW, ENB=PWM } ``` ### 5. PWM技术应用 项目使用ESP32的LEDC(LED控制器)模块生成PWM信号: - 频率:1000Hz(避免电机啸叫) - 分辨率:8位(0-255级调速) - 通道分配:通道0控制ENA,通道1控制ENB ## 使用说明 ### 1. 环境准备 1. 安装PlatformIO IDE或Arduino IDE 2. 安装ESP32开发板支持包 3. 下载并安装Dabble App(Android/iOS) ### 2. 硬件连接 1. 按照接线图连接ESP32与L298N 2. 连接电机到L298N输出端 3. 连接电源(注意电压匹配) 4. 检查所有连接是否牢固 ### 3. 软件配置 1. 编译并上传代码到ESP32 2. 打开串口监视器(波特率115200) 3. 确认ESP32启动并显示"等待Dabble App连接..." ### 4. 手机连接 1. 打开Dabble App 2. 连接到"ESP32-Robot"蓝牙设备 3. 选择GamePad模块 4. 切换到Digital模式 5. 使用方向键控制机器人运动 ### 5. 控制说明 - **↑ 上键**:水上机器人前进 - **↓ 下键**:水上机器人后退 - **← 左键**:水上机器人左转 - **→ 右键**:水上机器人右转 - **松开按键**:水上机器人停止 ## 故障排除 ### 常见问题 1. **蓝牙连接失败** - 检查ESP32是否正常启动 - 确认手机蓝牙已开启 - 重启ESP32和手机蓝牙 2. **推进器不转动** - 检查电源电压是否足够 - 确认接线是否正确 - 检查L298N跳线帽设置 - 确认推进器是否适合水上使用 3. **控制不响应** - 确认Dabble App已连接 - 检查GamePad模式是否为Digital - 查看串口输出调试信息 4. **推进器转向错误** - 交换对应推进器的两根线 - 或修改代码中的HIGH/LOW逻辑 ### 调试技巧 - 使用串口监视器查看实时状态 - 检查按键解析是否正确 - 验证PWM信号输出 - 测量各引脚电压 ## 扩展功能 ### 可能的改进方向 1. **速度调节**:添加速度档位控制 2. **传感器集成**:GPS导航、深度传感器、水质检测 3. **摄像头模块**:水下实时视频传输 4. **语音控制**:集成语音识别功能 5. **自动模式**:预设航行轨迹、自动返航 6. **多机器人控制**:支持多艘水上机器人编队控制 7. **防水等级提升**:IP67/IP68防水设计 8. **太阳能充电**:可持续能源系统 ## 技术参数 | 参数 | 数值 | |------|------| | 微控制器 | ESP32 | | 工作电压 | 3.3V (ESP32), 5-35V (L298N) | | 蓝牙版本 | 2.0/BLE | | PWM频率 | 1000Hz | | PWM分辨率 | 8位 (0-255) | | 最大推进器电流 | 2A/通道 | | 通信距离 | ~10米 | | 响应延迟 | <100ms | ## 开源协议 本项目采用MIT开源协议,欢迎自由使用、修改和分发。 ## 作者信息 - 项目基于ESP32和L298N的蓝牙遥控水上机器人 - 支持Dabble App GamePad控制 - 完整的双推进器运动控制系统 --- **注意事项:** - 请确保电源电压匹配,避免损坏设备 - 连接电路时请断开电源 - 首次使用建议在安全环境下测试 - 如有问题请检查接线和代码配置