钓鱼水位与气压提醒: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);
}
调试步骤
- 烧录 I2C 扫描,确认 BMP280 地址 0x76/0x77。
- 串口看气压和水位原始值,静置 10 分钟算基准。
- 调水位阈值:干、半水、全水三点校准。
- 用吹风机/空调房模拟气压变化,验证趋势报警。
- 接 TP4056 和太阳能,测充电电流与整机功耗。
- 装盒后做淋水测试,BMP280 透气孔加防水透气膜。