Files
pressureSensor/README.md
2025-09-09 09:27:33 +08:00

135 lines
4.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

ESP32 + ADS1015 + 0.96" OLED 压力监测固件
=========================================
本项目用于通过 ESP32 读取 ADS1015 外接的模拟压力传感器(量程 0~0.2 MPa输出 0.5~4.5V),并在 0.96 英寸 SSD1306 OLED 上实时显示压力值。工程基于 PlatformIO 与 Arduino 框架。
硬件准备
--------
- **主控**: ESP32-DevKitC 或兼容开发板3.3V 逻辑)
- **ADC**: ADS1015I2C建议与 ESP32 I2C 速率 400kHz
- **显示**: 0.96" SSD1306 OLED I2C常用地址 0x3C
- **压力传感器**: 供电 5V输出 0.5~4.5V(量程 0~0.2MPa
- 若 ADS1015 供电为 3.3V,请务必加入分压或限压,避免 4.5V 直接进入 ADC
接线说明
--------
默认 I2C 引脚为 `SDA=21`, `SCL=22`(可在 `src/main.cpp` 里通过 `I2C_SDA_PIN/I2C_SCL_PIN` 修改)。
1) I2C 连接(共用总线)
- ESP32 `3V3` → SSD1306 `VCC`
- ESP32 `GND` → SSD1306 `GND`
- ESP32 `GPIO21 (SDA)` → SSD1306 `SDA`
- ESP32 `GPIO22 (SCL)` → SSD1306 `SCL`
- ESP32 `3V3``5V` → ADS1015 `VDD`(推荐 3.3V 上拉逻辑更安全)
- ESP32 `GND` → ADS1015 `GND`
- ESP32 `GPIO21 (SDA)` → ADS1015 `SDA`
- ESP32 `GPIO22 (SCL)` → ADS1015 `SCL`
- ADS1015 `ADDR``GND`(地址 0x48若接到 VDD/或其它,地址会不同)
2) 传感器-ADC 接线(单端 A0
- 传感器 `V+ (5V)` → 5V 电源
- 传感器 `GND` → 系统 GND
- 传感器 `OUT (0.5~4.5V)` → 分压网络 → ADS1015 `A0`
分压建议
--------
- 如果 ADS1015 以 3.3V 供电,`A0` 最大输入不应超过参考范围(按增益配置)。建议做分压,例如 `R1=10kΩ``R2=10kΩ`1:1 分压),将 4.5V 降到约 2.25V。
- 分压连接:传感器输出 → `R1` → 节点(接 `A0`) → `R2` → GND。
- 在代码顶部可设置电阻值用于反推传感器端电压:`R1_OHMS``R2_OHMS`
软件与依赖
--------
- PlatformIOVSCode/Cursor
- 依赖库(`platformio.ini` 已配置):
- `Adafruit ADS1X15`
- `Adafruit SSD1306`
- `Adafruit GFX Library`
构建与烧录
--------
1. 打开本工程目录。
2. 连接 ESP32 到电脑。
3. 选择合适的串口执行编译与上传PlatformIO: Upload
4. 打开串口监视器,波特率 `115200`
屏幕显示与功能
-------------
- 顶部状态条显示功能名与状态OK/ERR
- 中央大号字体显示实时压力值(单位 MPa
- 底部显示传感器端电压 Vs并提供相对满量程的进度条。
参数与校准
--------
`src/main.cpp` 顶部可配置:
- `SENSOR_MIN_V`/`SENSOR_MAX_V`:传感器 0MPa 与满量程的电压(默认 0.5V~4.5V)。
- `PRESSURE_FULL_SCALE_MPA`:满量程压力(默认 0.2MPa)。
- `ZERO_TRIM_V`零点微调V
- `SPAN_SCALE`:跨度微调(倍率)。
- `R1_OHMS`/`R2_OHMS`:分压电阻值(未分压则设为 0
- `ADS_GAIN`ADS1015 增益(默认 `GAIN_ONE` ±4.096V;若 ADC 端电压可能更高可改为 `GAIN_TWOTHIRDS`)。
校准步骤建议:
1. 在无压力状态,观察 Vs 是否接近 `SENSOR_MIN_V`,必要时调整 `ZERO_TRIM_V` 至读数接近 0MPa。
2. 在已知压力点(如 0.1MPa),调节 `SPAN_SCALE` 使显示读数接近真实值。
3. 校准完成后记录参数,固定使用。
故障与排查
--------
- 屏幕显示 `ADS1015 MISSING`I2C 地址、接线或供电问题。
- 屏幕显示 `SENSOR INVALID`:采样电压无效或超出范围,检查分压与增益设置。
- 串口输出含有 `[WARN] ADC read invalid`:原始电压异常(可能为过压、浮空、断线)。
许可证
----
MIT
HTTP 上报与本地测试
----------------
- 固件每 5 秒会向 `http://<SERVER_HOST>:<SERVER_PORT><SERVER_PATH>` 发送 JSON
```bash
curl -X POST http://localhost:5000/data \
-H "Content-Type: application/json" \
-d '{"device_id":"test","timestamp":"2023-01-01T12:00:00Z","pressure":0.1,"voltage":2.5}'
```
-`src/main.cpp` 中通过以下宏配置:`SERVER_HOST`(建议用电脑的局域网 IP不要用 localhost`SERVER_PORT`(默认 5000`SERVER_PATH`(默认 /data`DEVICE_ID`
- 同时设置 `WIFI_SSID``WIFI_PASSWORD`
Flask 简易示例(本地调试)
---------------------
```python
from flask import Flask, request
app = Flask(__name__)
@app.route('/data', methods=['POST'])
def data():
print(request.json)
return {'ok': True}
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
```
启动说明(重要):
- 请将 `SERVER_HOST` 改为你电脑的局域网 IP例如 192.168.1.100),不要用 `localhost`。ESP32 通过路由器访问电脑服务。
- 若需要我等待你启动服务:请告知我,我将等待 30 秒再继续。