c7dfa1e9fc0869f3a45a21347cd4159830536f71
ESP32 + ADS1015 + 0.96" OLED 压力监测固件
本项目用于通过 ESP32 读取 ADS1015 外接的模拟压力传感器(量程 00.2 MPa,输出 0.54.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(量程 00.2MPa) - 若 ADS1015 供电为 3.3V,请务必加入分压或限压,避免 4.5V 直接进入 ADC!
接线说明
默认 I2C 引脚为 SDA=21, SCL=22(可在 src/main.cpp 里通过 I2C_SDA_PIN/I2C_SCL_PIN 修改)。
- I2C 连接(共用总线)
-
ESP32
3V3→ SSD1306VCC -
ESP32
GND→ SSD1306GND -
ESP32
GPIO21 (SDA)→ SSD1306SDA -
ESP32
GPIO22 (SCL)→ SSD1306SCL -
ESP32
3V3或5V→ ADS1015VDD(推荐 3.3V 上拉逻辑更安全) -
ESP32
GND→ ADS1015GND -
ESP32
GPIO21 (SDA)→ ADS1015SDA -
ESP32
GPIO22 (SCL)→ ADS1015SCL -
ADS1015
ADDR→GND(地址 0x48,若接到 VDD/或其它,地址会不同)
- 传感器-ADC 接线(单端 A0)
- 传感器
V+ (5V)→ 5V 电源 - 传感器
GND→ 系统 GND - 传感器
OUT (0.5~4.5V)→ 分压网络 → ADS1015A0
分压建议
- 如果 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 ADS1X15Adafruit SSD1306Adafruit GFX Library
构建与烧录
- 打开本工程目录。
- 连接 ESP32 到电脑。
- 选择合适的串口,执行编译与上传(PlatformIO: Upload)。
- 打开串口监视器,波特率
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)。
校准步骤建议:
- 在无压力状态,观察 Vs 是否接近
SENSOR_MIN_V,必要时调整ZERO_TRIM_V至读数接近 0MPa。 - 在已知压力点(如 0.1MPa),调节
SPAN_SCALE使显示读数接近真实值。 - 校准完成后记录参数,固定使用。
故障与排查
- 屏幕显示
ADS1015 MISSING:I2C 地址、接线或供电问题。 - 屏幕显示
SENSOR INVALID:采样电压无效或超出范围,检查分压与增益设置。 - 串口输出含有
[WARN] ADC read invalid:原始电压异常(可能为过压、浮空、断线)。
许可证
MIT
HTTP 上报与本地测试
- 固件每 5 秒会向
http://<SERVER_HOST>:<SERVER_PORT><SERVER_PATH>发送 JSON:
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 简易示例(本地调试)
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 秒再继续。
Description
Languages
C++
71.3%
Makefile
26.7%
Python
1.1%
Vue
0.4%
C
0.3%
Other
0.1%