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

4.6 KiB
Raw Permalink Blame History

ESP32 + ADS1015 + 0.96" OLED 压力监测固件

本项目用于通过 ESP32 读取 ADS1015 外接的模拟压力传感器(量程 00.2 MPa输出 0.54.5V),并在 0.96 英寸 SSD1306 OLED 上实时显示压力值。工程基于 PlatformIO 与 Arduino 框架。

硬件准备

  • 主控: ESP32-DevKitC 或兼容开发板3.3V 逻辑)
  • ADC: ADS1015I2C建议与 ESP32 I2C 速率 400kHz
  • 显示: 0.96" SSD1306 OLED I2C常用地址 0x3C
  • 压力传感器: 供电 5V输出 0.54.5V(量程 00.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 3V35V → ADS1015 VDD(推荐 3.3V 上拉逻辑更安全)

  • ESP32 GND → ADS1015 GND

  • ESP32 GPIO21 (SDA) → ADS1015 SDA

  • ESP32 GPIO22 (SCL) → ADS1015 SCL

  • ADS1015 ADDRGND(地址 0x48若接到 VDD/或其它,地址会不同)

  1. 传感器-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_OHMSR2_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_GAINADS1015 增益(默认 GAIN_ONE ±4.096V;若 ADC 端电压可能更高可改为 GAIN_TWOTHIRDS)。

校准步骤建议:

  1. 在无压力状态,观察 Vs 是否接近 SENSOR_MIN_V,必要时调整 ZERO_TRIM_V 至读数接近 0MPa。
  2. 在已知压力点(如 0.1MPa),调节 SPAN_SCALE 使显示读数接近真实值。
  3. 校准完成后记录参数,固定使用。

故障与排查

  • 屏幕显示 ADS1015 MISSINGI2C 地址、接线或供电问题。
  • 屏幕显示 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不要用 localhostSERVER_PORT(默认 5000SERVER_PATH(默认 /dataDEVICE_ID
  • 同时设置 WIFI_SSIDWIFI_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 秒再继续。