# ESP32 + IMU 采集与夹爪控制

本项目使用 MicroPython 在 ESP32 上读取 IMU 的 TTL 串口数据，并通过板载 CP2102 USB 串口将数据发送到电脑。

- 注意观察esp32芯片型号，参考资料可在[ESP-WROOM-32](https://git.nicecart.ai/ZhengLiu-cart/Gripper_UMI/src/branch/main/ESP32%E5%BC%80%E5%8F%91%E6%9D%BF%E8%B5%84%E6%96%99/ESP32%E8%B5%84%E6%96%99%E6%96%87%E6%A1%A3/esp_wroom_32_datasheet_cn.pdf).

- 最新的接线图请参考 [这个](https://nicecart-my.sharepoint.com/:p:/g/personal/zheng_liu_nicecart_ai/IQAd1vjTOFRTQJdIf7uh9ybCASTbYUrugCMrXxhclWS-Yn0?e=4C3Z6G)，与嵌入式组沟通。

- 将电脑USB口与ESP32用线连起来时，理论上ESP32板子将有5V及3.3V 供电，无需额外供电。

- [IMU 资料](https://wit-motion.yuque.com/wumwnr/docs/ovet650wkalmx779)

- [ESP32 京东链接](https://ic-item.jd.com/100200013859.html#product-detail)

- 注：IMU本身支持串口通信，所以可以通过USB转TTL串口版（办公室货架上有）连电脑直接进行调试(借助串口调试助手，可以参考这个IMU资料 [链接](https://wit-motion.yuque.com/wumwnr/bf4d0f/ppm3hc?#%20%E3%80%8A%E6%A8%A1%E5%9D%97%E7%B1%BB%E4%BC%A0%E6%84%9F%E5%99%A8%E4%BD%BF%E7%94%A8%E4%B8%89%E5%90%88%E4%B8%80-%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B%E3%80%8B))。可以在使用ESP32板通过串口通信前，先使用USB转TTL串口版测试其功能是否正常。

- **以下内容供参考，根据实际情况修改**。

## 硬件连接概览

```text
IMU -> TTL UART -> ESP32 -> CP2102 -> USB -> 电脑
```

## 一、准备软件

1. 安装 [Thonny](https://thonny.org/)。
2. 使用支持数据传输的 Micro-USB 线连接 ESP32。
3. 打开终端，查看 ESP32 对应的串口设备：

   ```bash
   ls /dev/ttyUSB*
   ```

   通常会看到：

   ```text
   /dev/ttyUSB0
   ```

4. 也可以使用以下命令确认 CP210x 设备：

   ```bash
   lsusb
   dmesg | tail
   ```

5. 记住对应的串口设备，例如 `/dev/ttyUSB0`。

如果当前用户没有串口访问权限，执行：

```bash
sudo usermod -aG dialout $USER
```

执行后注销并重新登录 Ubuntu，使权限生效。也可以重新启动电脑。

## 二、安装 MicroPython 固件

打开 Thonny，然后执行以下步骤：

1. 选择 `工具 -> 选项 -> 解释器`。
2. 解释器选择：

   ```text
   MicroPython (ESP32)
   ```

3. 端口选择 ESP32 对应的设备，例如 `/dev/ttyUSB0`。
4. 点击“安装或更新 MicroPython”。
5. 目标端口选择对应的 `/dev/ttyUSB0`。
6. 芯片选择 `ESP32`。
7. 建议勾选“擦除闪存”。
8. 点击安装。

如果提示无法连接：

1. 按住 ESP32 上的 `BOOT` 按钮。
2. 点击安装。
3. 出现连接或写入进度后松开 `BOOT`。

安装完成后，Thonny 下方 Shell 中通常会显示：

```text
MicroPython ...
>>>
```

## 三、上传 main.py

ESP32 端程序位于：

[main.py](./main.py)

在 Thonny 中：

1. 选择 `文件 -> 打开`。
2. 打开仓库中的 `main.py`。
3. 选择 `文件 -> 另存为`。
4. 选择保存到“MicroPython设备”。
5. 将文件名填写为 `main.py`。

保存后，Thonny 左侧“MicroPython设备”中应能看到：

```text
/main.py
```

ESP32 启动时会依次自动执行：

```text
boot.py
main.py
```

因此，程序必须准确命名为 `main.py`。

## 四、连接 IMU

### TTL 串口

| IMU | ESP32 |
|---|---|
| VCC | 按模块要求连接 3.3V 或 5V |
| GND | GND |
| TX | GPIO16 |
| RX | GPIO17 |

```text
IMU VCC -> ESP32 3.3V/5V
IMU GND -> ESP32 GND
IMU TX  -> ESP32 GPIO16
IMU RX  -> ESP32 GPIO17
```

> ESP32 GPIO 不能承受 5V。连接前必须确认 IMU 的 TTL 信号电平兼容 3.3V。

### 四路数字输入

| 输入 | ESP32 |
|---|---|
| DIN1 | GPIO25 |
| DIN2 | GPIO26 |
| DIN3 | GPIO27 |
| DIN4 | GPIO32 |
| 信号地 | GND |

数字输入电压不能超过 `3.3V`。

## 五、重新上电运行

上传完成后：

1. 关闭 Thonny，或者点击 Thonny 的“停止/断开”。
2. 按一下 ESP32 的 `EN/RESET` 按钮。
3. 也可以拔掉 USB 后重新连接。

以后每次 ESP32 上电时，都会自动运行 `main.py`：

```text
IMU -> TTL -> ESP32 -> CP2102 -> USB -> 电脑
```

## 六、电脑接收数据

电脑端程序位于：

[pc_reader.py](./pc_reader.py)

安装 Python 串口依赖：

```bash
python3 -m pip install pyserial
```

如果 Ubuntu 提示当前 Python 环境由系统管理，建议使用虚拟环境：

```bash
python3 -m venv .venv
source .venv/bin/activate
pip install pyserial
```

运行程序：

```bash
python3 pc_reader.py /dev/ttyUSB0
```

将 `/dev/ttyUSB0` 替换为 ESP32 的实际串口设备。

正常输出类似：

```text
#       1  200.0Hz DIN=[1, 1, 0, 1] DOUT=[0, 0] ACC=[...] GYRO=[...] ANGLE=[...]
```

电脑接收程序使用 `230400` 波特率。

> 运行 `pc_reader.py` 前必须断开 Thonny，否则串口可能被 Thonny 占用。

## 七、夹爪控制命令

运行 `pc_reader.py` 后，可以输入以下命令并按回车：

| 命令 | 操作 |
|---|---|
| `o` | 打开夹爪 |
| `c` | 闭合夹爪 |
| `s` | 停止，两路控制输出均释放 |

ESP32 使用以下管脚控制外部驱动电路：

| 功能 | ESP32 |
|---|---|
| 控制输出1 | GPIO18 |
| 控制输出2 | GPIO19 |

ESP32 GPIO 只能输出 `3.3V`，不能直接连接 12V 工业控制信号。必须使用光耦隔离模块、晶体管或其他合适的电平转换和驱动电路。

## 项目文件

```text
.
|-- README.md
|-- main.py
`-- pc_reader.py
```
