Initial commit
This commit is contained in:
134
README.md
Normal file
134
README.md
Normal 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**: ADS1015(I2C,建议与 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`。
|
||||
|
||||
软件与依赖
|
||||
--------
|
||||
|
||||
- PlatformIO(VSCode/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 秒再继续。
|
||||
|
||||
|
Reference in New Issue
Block a user