# 妈妈计数器 - 完整设计方案 v1.1.0

> 基于 ESP32-S3 1.85寸圆形LCD 的一体化可穿戴设备
> 
> **版本**: v1.1.0  
> **更新日期**: 2026-03-21  
> **硬件方案**: 开箱即用版 (一体化设计)

---

## 📋 项目概述

### 目标
制作一个可穿戴设备，让小朋友佩戴在身上，自动记录一天中"妈妈"这个词被呼唤的次数。

### 硬件平台 (⭐ 推荐开箱即用方案)
**微雪 ESP32-S3 1.85寸圆形LCD开发板**
- 1.85寸圆形LCD (360×360分辨率, GC9A01驱动)
- **板载数字麦克风** (I2S接口, 无需外接)
- **板载陀螺仪/加速度计** (QMI8658)
- **板载扬声器** (可选播放提示音)
- 内置锂电池充电管理
- CNC铝合金外壳 (可选)

### 为什么选这个方案
| 优势 | 说明 |
|------|------|
| 🎯 开箱即用 | 屏幕+麦克风一体化，无需焊接 |
| 🏠 现成外壳 | CNC铝合金外壳，无需3D打印 |
| 📱 更大屏幕 | 1.85寸 > 1.28寸，显示更清晰 |
| 🎮 扩展功能 | 陀螺仪可实现"翻转静音"等交互 |
| 💰 性价比高 | 一体方案￥80-100，比分体方案贵不了多少 |

---

## 🔧 硬件构成

### 核心开发板
| 型号 | 推荐 | 特点 | 价格 |
|------|------|------|------|
| **ESP32-S3 1.85寸圆屏** | ⭐⭐⭐ 首选 | 一体化设计, 板载麦克风, CNC外壳 | ~￥80-100 |
| ESP32-S3-Touch-LCD-1.46 | 备选 | 更小1.46寸, 分辨率更高412×412 | ~￥119 |
| ESP32-C3-Display | 经济版 | 需外接麦克风, 需DIY外壳 | ~￥55+ |

### 屏幕参数 (1.85寸圆形LCD)
| 参数 | 规格 |
|------|------|
| 分辨率 | 360 × 360 |
| 驱动芯片 | GC9A01 |
| 通信接口 | SPI (4线) |
| 颜色深度 | 16bit (65K色) |
| 触摸 | 电容触摸 (可选) |

### 板载外设
| 外设 | 型号 | 用途 | 接口 |
|------|------|------|------|
| 麦克风 | 数字麦克风 | 声音检测 | I2S |
| 陀螺仪 | QMI8658 | 姿态检测/翻转静音 | I2C |
| 扬声器 | 板载喇叭 | 提示音播放 | I2S |
| SD卡 | MicroSD槽 | 数据存储 | SPI |
| 电池 | 3.7V锂电 | 供电 | MX1.25接口 |

### 引脚分配
```
微雪 ESP32-S3 1.85寸圆屏 默认引脚:
┌─────────────────────────────────────┐
│  LCD_SPI_CS      GPIO 10            │
│  LCD_SPI_SCK     GPIO 12            │
│  LCD_SPI_MOSI    GPIO 11            │
│  LCD_SPI_DC      GPIO 13            │
│  LCD_BACKLIGHT   GPIO 42            │
│                                     │
│  I2S_MIC_SCK     GPIO 4             │
│  I2S_MIC_WS      GPIO 5             │
│  I2S_MIC_SD      GPIO 6             │
│                                     │
│  I2C_SDA         GPIO 15            │
│  I2C_SCL         GPIO 16            │
│                                     │
│  BUTTON_1        GPIO 0             │
│  BUTTON_2        GPIO 14            │
│  BAT_ADC         GPIO 17 (电池检测) │
└─────────────────────────────────────┘
```

### 对比: 旧方案 vs 新方案

```
【旧方案: ESP32-C3 + 外置麦克风】
┌────────────────────────────────────────────────┐
│ ESP32-C3-Display        MAX9814麦克风           │
│  ┌─────────────┐        ┌─────────┐            │
│  │ 1.28寸LCD   │◄───────┤ 模拟输出 │            │
│  │ 240×240     │  GPIO  │ 需焊接   │            │
│  └─────────────┘        └─────────┘            │
│         │                                      │
│         ▼                                      │
│  3D打印外壳 (需DIY)                            │
└────────────────────────────────────────────────┘
总价: ~￥80  |  工作量: 高

【新方案: ESP32-S3 1.85寸一体化】
┌────────────────────────────────────────────────┐
│ 微雪 ESP32-S3 1.85寸开发板                      │
│  ┌─────────────────────────────┐               │
│  │ 1.85寸LCD  360×360          │               │
│  │ 板载数字麦克风 (I2S)         │               │
│  │ 板载陀螺仪 QMI8658          │               │
│  └─────────────────────────────┘               │
│         │                                      │
│         ▼                                      │
│  CNC铝合金外壳 (可选，开箱即用)                  │
└────────────────────────────────────────────────┘
总价: ~￥100 |  工作量: 低 (开箱即用)
```

---

## 💻 软件设计

### 开发环境
- **Arduino IDE** (推荐 v1.8.19 或 v2.x)
- **TFT_eSPI** 库 (屏幕驱动)
- **ESP32 Board Package** (开发板支持)

### 库安装
```
1. TFT_eSPI (屏幕驱动)
2. ESP32_I2S (I2S数字麦克风)
3. QMI8658 (陀螺仪传感器 - 可选)
```

### 配置 TFT_eSPI
编辑 `User_Setup.h`:
```cpp
#define GC9A01_DRIVER     // 驱动芯片
#define TFT_WIDTH  360    // 1.85寸分辨率
#define TFT_HEIGHT 360

// ESP32-S3 引脚配置 (微雪1.85寸板)
#define TFT_MISO -1
#define TFT_MOSI 11
#define TFT_SCLK 12
#define TFT_CS   10
#define TFT_DC   13
#define TFT_RST  -1
#define TFT_BL   42

#define SPI_FREQUENCY  40000000
```

### 程序架构
```
┌─────────────────────────────────────────┐
│              初始化 setup()              │
│  - 初始化屏幕 (360×360)                  │
│  - 初始化I2S麦克风                       │
│  - 初始化陀螺仪 (可选)                   │
│  - 显示启动画面                          │
└────────────────┬────────────────────────┘
                 │
                 ▼
┌─────────────────────────────────────────┐
│              主循环 loop()               │
│                                         │
│  ┌─────────────────────────────────┐   │
│  │ 1. I2S读取数字麦克风             │   │
│  │    - I2S采样                     │   │
│  │    - 能量检测                    │   │
│  │    - 更新波形显示                │   │
│  └─────────────────────────────────┘   │
│                 │                       │
│                 ▼                       │
│  ┌─────────────────────────────────┐   │
│  │ 2. 触发检测                      │   │
│  │    - 能量阈值判断                │   │
│  │    - 冷却时间控制                │   │
│  └─────────────────────────────────┘   │
│                 │                       │
│                 ▼                       │
│  ┌─────────────────────────────────┐   │
│  │ 3. 姿态检测 (可选)               │   │
│  │    - 读取陀螺仪                  │   │
│  │    - 翻转静音判断                │   │
│  └─────────────────────────────────┘   │
│                 │                       │
│                 ▼                       │
│  ┌─────────────────────────────────┐   │
│  │ 4. 视觉反馈                      │   │
│  │    - 计数器+1                    │   │
│  │    - 屏幕闪烁效果                │   │
│  │    - 播放提示音 (可选)           │   │
│  └─────────────────────────────────┘   │
└─────────────────────────────────────────┘
```

### 核心算法

**1. I2S数字麦克风读取**
```cpp
#include <driver/i2s.h>

// I2S配置
i2s_config_t i2s_config = {
    .mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_RX),
    .sample_rate = 16000,
    .bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT,
    .channel_format = I2S_CHANNEL_FMT_ONLY_LEFT,
    .communication_format = I2S_COMM_FORMAT_STAND_I2S,
    .intr_alloc_flags = ESP_INTR_FLAG_LEVEL1,
    .dma_buf_count = 4,
    .dma_buf_len = 256
};

// 读取音频能量
int readI2SMicrophone() {
    int32_t samples[256];
    size_t bytes_read;
    i2s_read(I2S_NUM_0, samples, sizeof(samples), &bytes_read, portMAX_DELAY);
    
    // 计算能量
    int64_t energy = 0;
    int num_samples = bytes_read / sizeof(int32_t);
    for (int i = 0; i < num_samples; i++) {
        energy += abs(samples[i] >> 8);
    }
    return energy / num_samples;
}
```

**2. 触发逻辑 (带陀螺仪翻转检测)**
```cpp
// 检测是否翻转(屏幕朝下)
bool isFlipped() {
    float ax, ay, az;
    qmi8658_read_accel(&ax, &ay, &az);
    // z轴向下且角度足够大
    return (az < -0.7);
}

// 主检测逻辑
if (!isFlipped() && soundEnergy > THRESHOLD && 
    millis() - lastTrigger > COOLDOWN) {
    count++;
    lastTrigger = millis();
    playBeep();  // 可选提示音
}
```

---

## 🎨 UI设计

### 屏幕布局 (360×360圆形)
```
              ┌─────────────────┐
            ┌─┤     🔋 85%      ├─┐
            │ └─────────────────┘ │
            │                     │
            │      MAMA COUNT     │  ← 标题
            │                     │
            │        128          │  ← 大数字 (更大更清晰)
            │        times        │
            │                     │
            │   ▁▂▃▄▅▆▇█         │  ← 波形
            │                     │
            │    [翻转静音]       │  ← 状态/陀螺仪提示
            │                     │
            └─────────────────────┘
```

### 新增交互 (陀螺仪)
| 操作 | 功能 |
|------|------|
| 屏幕朝上 | 正常监听模式 |
| 屏幕朝下 (翻转) | 静音模式 (暂停监听) |
| 摇一摇 | 显示今日统计 |

---

## 🔋 功耗优化

### 电源管理策略
| 模式 | 电流 | 策略 |
|------|------|------|
| 正常监听 | ~80mA | 50Hz采样，屏幕常亮 |
| 低功耗模式 | ~10mA | 降低亮度，降低采样率 |
| Deep Sleep | ~50μA | 定时唤醒检测 |

### 续航估算 (500mAh电池)
- 纯监听模式: ~6小时 (屏幕更大功耗稍高)
- 间歇唤醒: ~18小时+
- Deep Sleep: 数周

---

## 📦 物料清单 (BOM) - 开箱即用版

| 序号 | 名称 | 型号 | 数量 | 参考价格 |
|------|------|------|------|----------|
| 1 | 开发板 | 微雪 ESP32-S3 1.85寸圆屏 | 1 | ￥80-100 |
| 2 | 锂电池 | 3.7V 500mAh | 1 | ￥15 |
| 3 | 外壳 | CNC铝合金 (板载) | 1 | 含在板子里 |
| - | **合计** | - | - | **~￥95-115** |

### 对比旧方案
| 项目 | 旧方案 | 新方案 | 差异 |
|------|--------|--------|------|
| 总价 | ~￥80 | ~￥100 | +￥20 |
| 焊接 | 需要 | 不需要 | 省时间 |
| 外壳 | 3D打印/DIY | CNC铝合金 | 质量高 |
| 屏幕 | 1.28寸 240p | 1.85寸 360p | 更大更清晰 |
| 麦克风 | 模拟MAX9814 | 数字I2S | 音质更好 |
| 额外功能 | 无 | 陀螺仪+扬声器 | 更多玩法 |

---

## 🚀 开发流程 (开箱即用版)

### 第一阶段: 开箱验证 (0.5天)
1. 收到板子，检查外观
2. 连接USB，烧录测试程序
3. 验证屏幕、麦克风、按键功能
4. 测试电池充电

### 第二阶段: 软件开发 (2-3天)
1. 搭建Arduino环境，安装库
2. 配置TFT_eSPI为360×360分辨率
3. 实现I2S麦克风读取
4. 实现UI框架和计数逻辑
5. (可选) 添加陀螺仪翻转检测

### 第三阶段: 调试优化 (1-2天)
1. 调整声音检测阈值
2. 优化UI刷新
3. 功耗测试
4. 长时间稳定性测试

### 第四阶段: 佩戴测试 (1天)
1. 实际佩戴测试
2. 调整翻转静音灵敏度
3. 最终优化

---

## 🧪 测试方案

### 功能测试
| 测试项 | 方法 | 预期结果 |
|--------|------|----------|
| 声音检测 | 播放"妈妈"录音 | 计数+1 |
| 翻转静音 | 屏幕朝下放置 | 暂停监听 |
| 按键功能 | 短按/长按 | 暂停/重置 |
| 电池续航 | 充满电运行 | >18小时 |

---

## 📁 文件清单

```
mama-counter/
├── MamaCounter.ino          # 主程序 (适配I2S麦克风)
├── DESIGN.md                # 设计方案 (本文件)
├── web-simulator/
│   └── index.html           # Web模拟器
└── hardware/
    └── pinout-esp32-s3.txt  # ESP32-S3引脚定义
```

---

## 🔗 相关链接

- **微雪ESP32-S3 1.85寸**: https://www.waveshare.net/...
- **Web模拟器**: [在线体验](web-simulator/)
- **TFT_eSPI库**: https://github.com/Bodmer/TFT_eSPI
- **ESP32 Arduino**: https://docs.espressif.com/projects/arduino-esp32/

---

**设计版本**: v1.1.0  
**更新日期**: 2026-03-21  
**硬件方案**: 开箱即用版 (ESP32-S3 1.85寸一体化)  
**设计者**: Shrimp Jetton
