Add usage steps for long-press touch, BOOT, and line serial; point firmware notes at the no-auto-record policy. Co-authored-by: Cursor <cursoragent@cursor.com>
115 lines
4.3 KiB
Markdown
115 lines
4.3 KiB
Markdown
# CYD INMP441 录音
|
||
|
||
ESP32 Cheap Yellow Display + INMP441(I2S)→ microSD **WAV 录音**,支持 DAC 回放。
|
||
|
||
默认 **2.8" ESP32-2432S028R**;可选 **3.5" ESP32-3248S035C**(`cyd_35r`)。
|
||
引脚约定见同目录 [CYD_PROJECT_GUIDE.md](../CYD_PROJECT_GUIDE.md);麦克风接线参考 [inmp441test](../inmp441test)。
|
||
|
||
## 硬件
|
||
|
||
| 项目 | 2.8" · 2432S028R | 3.5" C · 3248S035C |
|
||
|------|------------------|---------------------|
|
||
| 屏驱 | ILI9341 | ST7796 |
|
||
| 触控 | XPT2046 **SoftSPI**(见下) | GT911 Wire1(SDA33/SCL32/INT21/RST25) |
|
||
| 背光 TFT_BL | **GPIO21** | **GPIO27** |
|
||
| INMP441 WS | **GPIO22**(CN1/P3) | **GPIO22** |
|
||
| INMP441 SCK | **GPIO27**(CN1) | **GPIO21**(CN1;勿占 27=BL) |
|
||
| INMP441 SD | **GPIO35**(P3,仅输入) | **GPIO35** |
|
||
| microSD | CS5 / SCK18 / MISO19 / MOSI23 | 同左 |
|
||
| 喇叭 | **GPIO26**(DAC2,P4) | 同左 |
|
||
|
||
接线:
|
||
|
||
| INMP441 | CYD |
|
||
|---------|-----|
|
||
| VDD | 3.3V(CN1) |
|
||
| GND | GND |
|
||
| L/R | GND(左声道,勿悬空) |
|
||
| WS | IO22 |
|
||
| SCK | IO27(2.8)/ IO21(3.5) |
|
||
| SD | IO35(P3) |
|
||
|
||
> 不要接 5V;不要占用背光脚。I2S 需要三根信号线(22 + 27/21 + 35)。
|
||
> **3.5C**:`SCK=GPIO21` 与 GT911 INT 同脚;固件先完成触控选址,再把 21 交给 I2S,触控仅轮询。
|
||
|
||
## 功能
|
||
|
||
- 触控 **REC / STOP**:录制 16 kHz / 16-bit 单声道 PCM WAV 到 `/rec/Rxxxx.WAV`
|
||
- 最长约 **120 秒**(自动停)
|
||
- 实时电平条(近似 dB,与 inmp441test 同一换算)
|
||
- **PLAY / STOP**:用板载喇叭(GPIO26)回放最近一条录音
|
||
- 需插入 **FAT32 microSD**
|
||
- 备用:板载 **BOOT** 键切换 REC;串口整行 `r` / `rec` / `p` / `play`(不会吃 USB 杂字节)
|
||
- **绝无自动开录**:无触控按钮 / BOOT / 串口整行命令;上电 4s 内锁死
|
||
|
||
## 2.8" 触控说明(重要)
|
||
|
||
本板 XPT2046 **不在硬件 SPI 上**(CLK25 / MOSI32 / MISO39 / CS33 / IRQ36),与 microSD 的 **VSPI** 冲突。固件使用 vendored [`lib/CYD28_Touchscreen`](lib/CYD28_Touchscreen)(hexeguitar SoftSPI bit-bang),把 VSPI 留给 SD。
|
||
|
||
| 项 | 做法 |
|
||
|----|------|
|
||
| 总线 | SoftSPI,读触控前拉高 `SD_CS` |
|
||
| 坐标 | raw ADC → 横屏 UI 320×240;**X/Y 均反向** 以对齐 `LVGL ROTATION_270` 画面 |
|
||
| 点击 | 只命中画出的 REC / PLAY;按住 ≥120ms 且指头不滑出按钮才算 |
|
||
| 防抖 | z≥70 且连续 5 采样;**2 s** 冷却;上电 **4 s** 动作锁 |
|
||
| 备用 | BOOT(稳定按下)/ 串口整行命令 |
|
||
|
||
参考:[RNT CYD + SoftSPI + SD](https://randomnerdtutorials.com/esp32-cyd-display-touchscreen-microsd-card/)、[hexeguitar/CYD28_Touchscreen](https://github.com/hexeguitar/CYD28_Touchscreen)。
|
||
|
||
## 使用
|
||
|
||
1. 插入 FAT32 microSD,上电后等约 **4 秒**(动作锁结束)再操作。
|
||
2. **录音**:用力按住屏幕下方红色 **REC** ≥0.12s 再松开;再按一次停止并保存 `/rec/Rxxxx.WAV`。
|
||
3. **播放**:同样方式按 **PLAY**(需已有录音)。
|
||
4. 备用:**BOOT** 键开关录音;串口 `115200` 发送整行 `rec` / `play`(或 `r` / `p`)后回车。
|
||
5. 固件**不会**在无触控、无 BOOT、无串口命令时自行开录或开播。
|
||
|
||
## 构建与烧录
|
||
|
||
依赖 [PlatformIO](https://platformio.org/)。
|
||
|
||
```bash
|
||
pio run -e cyd_28r -t upload # 2.8"
|
||
pio run -e cyd_35r -t upload # 3.5C
|
||
pio device monitor -b 115200
|
||
```
|
||
|
||
### 预编译固件
|
||
|
||
| 板型 | 目录 |
|
||
|------|------|
|
||
| 2.8" | [`firmware/cyd_28r/`](firmware/cyd_28r/) |
|
||
| 3.5" | [`firmware/cyd_35r/`](firmware/cyd_35r/) |
|
||
|
||
```powershell
|
||
cd firmware\cyd_28r # 或 cyd_35r
|
||
.\flash.ps1
|
||
```
|
||
|
||
重新打包:
|
||
|
||
```powershell
|
||
.\firmware\export_from_build.ps1
|
||
.\firmware\export_from_build.ps1 -Env cyd_35r
|
||
```
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
platformio.ini
|
||
include/pins.h lv_conf.h touch.h sdcard.h recorder.h player.h
|
||
src/main.cpp touch.cpp sdcard.cpp recorder.cpp player.cpp
|
||
lib/CYD28_Touchscreen/ # 2.8 SoftSPI 触控(与 SD 隔离)
|
||
scripts/exclude_lvgl_asm.py
|
||
firmware/
|
||
README.md
|
||
```
|
||
|
||
## 变更记录
|
||
|
||
| 日期 | 说明 |
|
||
|------|------|
|
||
| 2026-10-27 | 初版:INMP441 → microSD WAV 录音 + DAC 回放;双板 `cyd_28r` / `cyd_35r` |
|
||
| 2026-10-27 | 2.8 触控:SoftSPI + XY 反向校准、按钮命中区、1.5s 冷却;消除误触反复录音 |
|
||
| 2026-10-27 | 显式操作门闩:上电锁 4s、触控长按确认、BOOT 防抖、串口整行;禁止无操作自启录音 |
|