58 lines
2.2 KiB
Markdown
58 lines
2.2 KiB
Markdown
## ESP32 压力传感器数据采集与回看系统
|
||
|
||
本项目实现:
|
||
- 后端 API:接收设备上传数据、查询列表、查询详情、删除、批量导出
|
||
- 前端页面:记录列表页、详情页(时序曲线、直方图、散点图)
|
||
- 数据库:Prisma + PostgreSQL(`Recording` 表)
|
||
|
||
### 环境变量
|
||
- `DATABASE_URL`:PostgreSQL 连接串(已在 `.env` 中配置)
|
||
- `SAMPLE_RATE_HZ`:采样率(默认 `42.67`),用于计算时长
|
||
- `ADMIN_TOKEN`:可选,若设置则删除接口需请求头 `x-admin-token: <token>`
|
||
|
||
### 安装与运行
|
||
|
||
```pwsh
|
||
# 安装依赖
|
||
npm install
|
||
|
||
# 生成 Prisma Client
|
||
npx prisma generate
|
||
|
||
# 初始化数据库(开发库)
|
||
# 建议:如果当前数据库已存在其他表,请使用独立 schema,例如:
|
||
# 修改 .env 为 ...?schema=esp32 后再执行迁移
|
||
npx prisma migrate dev --name init-recording-table
|
||
|
||
# 启动开发环境
|
||
npm run dev
|
||
```
|
||
|
||
如果数据库为共享库且不便迁移,建议将连接串中的 `schema` 改为自定义(例如 `esp32`),避免与既有表冲突:
|
||
|
||
```
|
||
postgresql://user:pass@host:5432/dbname?schema=esp32
|
||
```
|
||
|
||
如需强制重置(会清空数据),开发环境可用:
|
||
|
||
```pwsh
|
||
npx prisma migrate reset --force
|
||
```
|
||
|
||
### API 速览
|
||
- `POST /api/data`:接收 `{"code": number[], "fit"?: {a,b}, "recStartMs"?: number, "recEndMs"?: number }`,最大 4096 点;若提供 `recStartMs/recEndMs`(毫秒),后端将用它们计算 `duration`(秒)
|
||
- `GET /api/records`:分页、筛选(日期、是否拟合)、排序(时间/时长/最大值)
|
||
- `GET /api/records/:id`:详情,返回完整 `code[]`、统计与拟合参数
|
||
- `DELETE /api/records/:id`:删除(若设置 `ADMIN_TOKEN` 则需携带 `x-admin-token`)
|
||
- `POST /api/export`:批量导出 `ids[]` 为 `csv | json`
|
||
|
||
### 页面
|
||
- 列表页 `/`:过滤、分页、卡片视图
|
||
- 详情页 `/records/:id`:基本信息、统计、时序曲线(码值/力值双轴)、直方图、线性度散点图、导出 CSV
|
||
|
||
### 备注
|
||
- 数据库存储 `code_data` 为 `Int[]`(PostgreSQL 数组)
|
||
- 时长 `duration = sampleCount / SAMPLE_RATE_HZ`(默认 `42.67`)
|
||
- 导出 CSV 的时间列使用 `i * (duration / sampleCount)` 计算,避免采样率变更带来的误差
|