# esp_atomizer **Repository Path**: flespark/esp_atomizer ## Basic Information - **Project Name**: esp_atomizer - **Description**: 基于ESP32-C2的加速度检测的振动和雾化加湿反馈执行装置 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-08-01 - **Last Updated**: 2026-07-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ESP Atomizer 基于 **ESP32-C2** 的手掌动作检测与反馈装置:通过 SC7A20H 三轴加速度计识别手势,驱动 3 路振动马达与 1 路雾化片,并提供 BLE GATT 调试/遥控接口。 - 硬件:https://oshwhub.com/flespark/project_ohefcwcs - HE-30 雾化器模块:ttps://e.tb.cn/h.8dxDnN1DPxGjJaK?tk=4uk1gtBdDcZ - 软件:https://gitee.com/flespark/esp_atomizer ## 功能 PCB 置于掌心时,根据加速度变化触发反馈: | 手势 | 检测依据 | 反馈 | |------|----------|------| | 翻转 | Z 轴姿态翻转 | 3 个马达同时振动 1 s | | 向左移动 | Y 轴正向运动 | 马达 1→2→3 依次振动各 0.5 s | | 向右移动 | Y 轴负向运动 | 马达 3→2→1 依次振动各 0.5 s | | 向前移动 | X 轴负向运动 | 雾化片工作 1 s | 系统启动正常后 LED 常亮;电池电压通过 ADC 周期采样,低电量时 LED 慢闪 / 快闪提示。 ## 硬件 | 项目 | 说明 | |------|------| | MCU | ESP32-C2 / **ESP8684H2X**,Flash 2 MB,40 MHz 晶振 | | IMU | SC7A20H,I2C(SDA=GPIO3,SCL=GPIO4,400 kHz) | | 振动马达 | GPIO8 / GPIO10 / GPIO18,LEDC PWM | | 雾化片 | 使能 GPIO7,PWM GPIO6,5 kHz | | 电池监测 | ADC1 CH2,分压 1M / 270k | | 状态 LED | GPIO5 | 硬件演进:v1 验证 IMU → v2 适配安装板 → **v3 雾化片验证通过** → 适配 **ESP8684H2X**。客户功能由「1 马达 + 3 雾化」改为「**3 马达 + 1 雾化**」。 ### ESP8684H2X 适配说明 当前量产/调试板采用 **ESP8684H2X**(ESP32-C2 系列芯片)。相对早期 ESP32-C2 Rev1 配置,软件侧主要做了: 1. **芯片最低修订号**:`CONFIG_ESP32C2_REV_MIN_200=y`(`ESP_REV_MIN_FULL=200`) ESP8684H2X 对应 C2 Rev 2.0,若仍使用 Rev 1.2 对应的 ESP8684H2,固件可能无法正常启动。 2. **ESP-IDF**:升级到 **v5.4.1**,与上述修订号选项及当前 BLE 栈配置对齐。 3. **BLE 4.2**:`sdkconfig.defaults` 中启用 `CONFIG_BT_BLE_42_FEATURES_SUPPORTED`(关闭仅 BLE 5.0),以兼容 `main/ble.c` 中的 Legacy GAP 广播 API。 重新 `idf.py set-target esp32c2` 或全量重配后,请确认上述三项仍生效(尤其是 Rev Min 200 与 BLE 4.2)。 ## 软件架构 ``` main/ ├── app_main.c # 启动、运动状态机、手势响应 ├── ble.c # BLE GATT:IMU / Motor / Atomizer ├── motor.c # 三路马达 PWM 与动作序列 ├── atomizer.c # 雾化片使能 + PWM 强度 └── pm.c # 电池电压监测与 LED 指示 components/ └── sc7a20h/ # SC7A20H 驱动 ``` **动作检测**:50 Hz(20 ms)采样,滑动平均滤波 + 状态机(稳定 → 加速确认 → 等待减速 → 减速确认 → 回稳),翻转单独用 Z 轴阈值确认。 **BLE(Bluedroid,BLE 4.2)**:可用 nRF Connect 等工具调试。 | Service UUID | 作用 | |--------------|------| | `0x1900` | IMU:三轴加速度 Notify(约 100 ms) | | `0x1901` | Motor:写 `0x01` 左移序列 / `0x02` 右移序列 / `0x03` 同时振动 | | `0x1902` | Atomizer:写开关控制雾化片 | ## 环境与编译 - ESP-IDF **v5.4.1** - Target:`esp32c2`(用于 ESP8684H2X) - 芯片修订:最低 **Rev 2.00**(`CONFIG_ESP32C2_REV_MIN_200`) - `sdkconfig.defaults` 已启用 BLE 4.2(兼容当前 GAP 广播 API) ```bash idf.py set-target esp32c2 idf.py build idf.py -p PORT flash monitor ``` ## 备注 SC7A20H 噪声偏大,X 轴灵敏度做过单独补偿(`MOTION_X_OFFSET`)。阈值与时序参数集中在 `main/app_main.c` 顶部,可按手感再调。