Initial commit

This commit is contained in:
2025-09-09 09:27:33 +08:00
commit fcb09432e9
426 changed files with 186731 additions and 0 deletions

134
README.md Normal file
View File

@ -0,0 +1,134 @@
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 秒再继续。