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://:` 发送 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 秒再继续。