钓鱼水位与气压提醒:ESP32-S3 户外守钓小助手

💡 划重点

  • 用 BMP280 盯气压趋势,气压骤降前 2 小时提醒收竿或换深水。
  • 水位传感器贴岸安装,涨水超过 5cm 触发蜂鸣+LED,夜钓安全。
  • ESP32-S3 本地判断+WiFi 推送,太阳能+18650 续航,目标 110 元内。
  • 模块化接线,I2C 8/9,水位 A0 接 GPIO1,TP4056 充电。

需求洞察

目标用户是野钓、夜钓、水库守钓的户外爱好者。真实痛点:鱼口受气压影响极大,气压陡降常伴随鱼上浮、停口;而钓鱼人往往在钓位上无法查微环境气压,手机天气是城市数据。其次,水库、河道夜钓时水位可能因上游放水或降雨快速上涨,人困在钓台上有安全风险。夜钓灯下看不清水尺,涨水悄无声息,等发现时钓箱已被淹。为什么值得做:一个能本地声光提醒、又能手机推送的小盒子,比频繁看手机更直接;成本百元出头,太阳能免换电池,适合长期放在钓箱。

方案设计

感知层:BMP280 采气压/温度,水位传感器采岸尺或鱼护处水位。控制层:ESP32-S3 做滑动平均滤波、气压 1 小时趋势计算、水位阈值判断。执行层:有源蜂鸣器、双色 LED,可选震动马达。日志/联网层:ESP32-S3 连 WiFi,通过 HTTP/MQTT 推送到手机;断网时存 SPIFFS,恢复后补传。供电:TP4056 管理 18650,太阳能板经 TP4056 充电,开发板 5V 脚取电。低功耗策略:ESP32-S3 深度睡眠,每 10 分钟唤醒采样,BMP280 用强制模式,水位连续采样。提醒分级:黄灯关注,红灯+蜂鸣危险。策略:气压下降≥1.5hPa/1h 且水位涨≥3cm 触发高优先级提醒。

物料清单

物料 数量 用途 估算单价
ESP32-S3 开发板 1 主控与联网 25 元
BMP280 模块 1 气压温度采集 5 元
水位传感器 1 水位检测 8 元
TP4056 充电模块 1 锂电充电保护 3 元
18650 电池 1 供电 15 元
5V 太阳能板 1 户外补电 12 元
5V 升压/稳压模块 1 稳定供电 5 元
有源蜂鸣器 1 声音提醒 2 元
双色 LED+电阻 1 视觉提醒 2 元
洞洞板/外壳/线材 1 组装 12 元
拨动开关 1 电源 1 元
合计 90 元

接线与结构

BMP280 VCC→3.3V,GND→GND,SDA→GPIO8,SCL→GPIO9。水位传感器 VCC→3.3V,GND→GND,AO→GPIO1。TP4056 IN+ 接太阳能板,BAT+ 接 18650,OUT+ 接 5V 升压模块输入,输出 5V 接开发板 5V,GND 共地。蜂鸣器接 GPIO4,LED 红接 GPIO5,绿接 GPIO6。水位传感器若输出 5V,需分压到 3.3V。选择 GPIO1 是因为它属于 ESP32-S3 的 ADC1,WiFi 开启时比 ADC2 更稳定;I2C 用 GPIO8/9 避开 Strapping 引脚。结构:防水盒,BMP280 开百叶窗透气,水位传感器固定于岸尺,太阳能板朝南。

核心代码


#include <Wire.h>
#include <Adafruit_BMP280.h>
#include <WiFi.h>
#include <HTTPClient.h>

#define SDA_PIN 8
#define SCL_PIN 9
#define WATER_PIN 1
#define BUZZER 4
#define LED_R 5
#define LED_G 6

Adafruit_BMP280 bmp;
float basePressure = 0;
unsigned long lastLog = 0;

void setup() {
  Serial.begin(115200);
  pinMode(BUZZER, OUTPUT);
  pinMode(LED_R, OUTPUT);
  pinMode(LED_G, OUTPUT);
  Wire.begin(SDA_PIN, SCL_PIN);
  if (!bmp.begin(0x76)) {
    while (1) delay(10);
  }
                  Adafruit_BMP280::SAMPLING_X2,
                  Adafruit_BMP280::SAMPLING_X16,
                  Adafruit_BMP280::FILTER_X16,
  basePressure = bmp.readPressure() / 100.0F;
}

void loop() {
  float p = bmp.readPressure() / 100.0F;
  int water = analogRead(WATER_PIN);
  float trend = p - basePressure;

  bool warn = (trend < -1.5) || (water > 2200);
  if (warn) {
    digitalWrite(BUZZER, HIGH);
    digitalWrite(LED_R, HIGH);
    digitalWrite(LED_G, LOW);
  } else {
    digitalWrite(BUZZER, LOW);
    digitalWrite(LED_R, LOW);
    digitalWrite(LED_G, HIGH);
  }

  if (millis() - lastLog > 60000) {
    lastLog = millis();
    Serial.printf("P=%.1fhPa trend=%.1f water=%d\n", p, trend, water);
    // 可在此加入 WiFi 上报
  }
  delay(1000);
}

调试步骤

  1. 烧录 I2C 扫描,确认 BMP280 地址 0x76/0x77。
  2. 串口看气压和水位原始值,静置 10 分钟算基准。
  3. 调水位阈值:干、半水、全水三点校准。
  4. 用吹风机/空调房模拟气压变化,验证趋势报警。
  5. 接 TP4056 和太阳能,测充电电流与整机功耗。
  6. 装盒后做淋水测试,BMP280 透气孔加防水透气膜。

设计图

钓鱼水位与气压提醒结构flow
1
感知输入
→
2
控制处理
→
3
执行反馈
→
4
数据上报